PDA

View Full Version : فیلد های دلخواه در سیستم فروشگاهی



rahahost
دوشنبه 26 آبان 1393, 17:01 عصر
سلام خدمت همه دوستان :)

در حال طراحی یه سیستم فروشگاهی هستم که متاسفانه در موردی به مشکل برخوردم که ممنون میشم راهنمایم کنید :

درون سیستمم چندین دسته برای محصولاتم دارم ( تعداد نامحدود ) و هر دسته باید فیلدهای خاص خودش رو داشته باشه ، مثلا دسته لپ تاپ ( هارد دیست ، رم ، سی پی یو و... ) و دسته ی دیگه مثلا یخچال فریزر ( حجم ، تعداد طبقه ها و... )

میخوام بدونم با چه روشی باید این کارو انجام بدم ؟
چند جدول باید داشته باشم ؟
ارتباط ها باید چطوری باشه ؟

موقع ثبت اطلاعات ، هر دسته ای که انتخاب شده ، باید فیلدهای همون دسته بارگذاری بشه ،، بنابر این باید موقع ذخیره چطوری عمل کنم ؟
منظورم اینه که چطوری باید فیلد رو ذخیره کنم ؟

امکانش هست ساختار جدولش رو برام ترسیم کنید ؟
واقعا در این مورد به مشکل برخوردم !

متشکرم .

wallfa
سه شنبه 27 آبان 1393, 22:45 عصر
باید بهتر توضیح بدی :
ولی چیزی که داخل ذهن منه
1- جیسون اطلاعات و ذخیره اونها در دیتابیس
2- جدولی که ای دی هر محصول بگیره و ذخیره کنه و جلوش اسم فیلد خاص و در نهایت ذخیره اطلاعات خاص

ni.alpr
سه شنبه 27 آبان 1393, 23:22 عصر
فکر می کنم بهترین کار این باشه که دیتابیس فروشگاه ساز های موجود رو یکم مطالعه کنید. معمولا از meta-data ها برای این کار استفاده می کنن.

Magento Database Diagrams (http://www.magentocommerce.com/wiki/2_-_magento_concepts_and_architecture/magento_database_diagram)
MS2 Database Schema (http://addons.oscommerce.com/info/3853/page,23)

پ ن : ضمنا این سوالتون بیشتر مربوط به دیتابیس می شه .

rahahost
چهارشنبه 28 آبان 1393, 16:09 عصر
فکر می کنم بهترین کار این باشه که دیتابیس فروشگاه ساز های موجود رو یکم مطالعه کنید. معمولا از meta-data ها برای این کار استفاده می کنن.

Magento Database Diagrams (http://www.magentocommerce.com/wiki/2_-_magento_concepts_and_architecture/magento_database_diagram)
MS2 Database Schema (http://addons.oscommerce.com/info/3853/page,23)

پ ن : ضمنا این سوالتون بیشتر مربوط به دیتابیس می شه .

لینکی که دادید خیلی مفید بود اما این جداول خیلی پیچیدگی داره که شاید لازم به این همه پیچیدگی نباشه !

چهار بخش کاملا مشخصه :
1 - یک جدول برای دسته محصولات لازمه
2 - یک جدول برای فیلدها لازمه
3 - یک جدول برای مشخص کردن اینکه کدوم فیلد مربوط به کدوم دسته هست
4 - جدول محصولات

یک گروه ایجاد میشه و درون جدول گره های محصولات ثبت میشه
چند فیلد برای اون دسته ثبت میشه و آی دی های دسته و فیلد درون جدول مشترک ( جدول شماره 3 که بالا اشاره کردم )

تا این بخش مشکلی نیست

مشکل از این به بعد شروع میشه که :
ما برای ثبت محصول ، فیلدهای دسته محصولات رو نمایش میدیم و اونهارو پر میکنید ، موقع ذخیره شدن ، این مقادیر اضافه شده ، باید کجا ذخیره بشه ؟

باید طوری باشه که اگه دسته پاک شد ، فیلدهای دسته هم پاک بشه ( که این مشکلی نیست و با caseCade ) حل میشه و اینکه اگه یک فیلد حذف شد ، مقدارش هم درون جدولی که مقدار رو ذخیره کرده ، حذف بشه !

یه عکس ضمیمه کردم که ارتباط هارو مشخص کردم درونش ولی متاسفانه هنوز نمیدونم باید برای ذخیره مقدار فیلدها


125870

MMSHFE
چهارشنبه 28 آبان 1393, 16:26 عصر
درمورد Redis تحقیق کنید. اگه نمیخواین از ساختارهای جدولی و RDBMSها خارج بشین، میتونید یک جدول داشته باشین با فیلدهای زیر:
product_id
attribute
value
که فیلد product_id کلید خارجی به جدول product هست و ترکیب فیلدهای product_id و attribute رو با هم کلید اصلی کنید. حالا میتونید مثلاً برای اینکه محصول شماره 5 خاصیتی به نام رنگ داشته باشه و مقدارش هم سفید باشه، رکوردی با مقادیر زیر ثبت کنید:
5
color
white
و الی آخر

rahahost
چهارشنبه 28 آبان 1393, 17:11 عصر
درمورد Redis تحقیق کنید. اگه نمیخواین از ساختارهای جدولی و RDBMSها خارج بشین، میتونید یک جدول داشته باشین با فیلدهای زیر:
product_id
attribute
value
که فیلد product_id کلید خارجی به جدول product هست و ترکیب فیلدهای product_id و attribute رو با هم کلید اصلی کنید. حالا میتونید مثلاً برای اینکه محصول شماره 5 خاصیتی به نام رنگ داشته باشه و مقدارش هم سفید باشه، رکوردی با مقادیر زیر ثبت کنید:
5
color
white
و الی آخر

جناب شهرکی ، ممنون از لطفتون :)

روشی که گفتین یه مشکلی داره ، اونم اینکه برای هر محصول باید فیلدهارو جداگانه تعریف کنم که از خودش مشکل بزرگی هست اگر تعداد فیلدها زیاد باشه .
از اونجایی که فیلدهای هر دسته با دسته ی دیگه فرق داره ، فیلدها بر اساس دسته ها مشخص بشه .

برای نمایش فیلد های هر دسته مشکلی ندارم ، مشکل در ذخیره کردنشه که مقدارهارو چطوری و تو چه جدولی و به چه شکلی ذخیره کنم ؟!

MMSHFE
چهارشنبه 28 آبان 1393, 18:03 عصر
خوب میتونید یک جدول جداگانه دیگه برای خصوصیتها داشته باشین که یک کلید خارجی به جدول دسته بندیها داره و اینطوری مشخص کنید هر فیلد مربوط به چه دسته ای هست و برحسب دسته مربوطه فیلدها رو نشون بدین. جدول مقادیر رو هم تغییر بدین تا بجای اسم خاصیتها کلید خارجی به جدول خصوصیتها ذخیره بشه. امیدوارم خوب توضیح داده باشم.

rahahost
چهارشنبه 28 آبان 1393, 19:05 عصر
خوب میتونید یک جدول جداگانه دیگه برای خصوصیتها داشته باشین که یک کلید خارجی به جدول دسته بندیها داره و اینطوری مشخص کنید هر فیلد مربوط به چه دسته ای هست و برحسب دسته مربوطه فیلدها رو نشون بدین. جدول مقادیر رو هم تغییر بدین تا بجای اسم خاصیتها کلید خارجی به جدول خصوصیتها ذخیره بشه. امیدوارم خوب توضیح داده باشم.

قسمت اول توضیحاتتون رو انجام داده بودم که :
1 - جدول دسته محصولات ساختم
2 - جدول فیلدها رو هم ساختم
3 - کلید اصلی هر دو جدول رو در جدول دیگه ای کلید خارجی کردم که مشخص کنم هر فیلد مربوط به چه دسته ای هست .

قسمت دوم توضیحاتتون برام گنگ بود .
فرض کنید و فیلدهارو نمایش دادم ( زمانی که میخوام محصول رو ثبت کنم ) و مقادیرشو هم وارد کردم
حالا این مقادیر باید درون یک جدول دیگه ثبت بشه که شامل آی دی فیلد ، آی دی محصول و مقدار فیلد میشه ؟

امکانش هست دیاگرام این ارتباط هارو برام رسم کنید ؟

واقعا ممنونم .

MMSHFE
چهارشنبه 28 آبان 1393, 19:14 عصر
بله دقیقاً :
یک ارتباط 1 به n داریم بین جدول categories و attributes ازطریق کلید خارجی توی جدول attributes
یک ارتباط 1 به n داریم بین جدول categories و products ازطریق کلید خارجی توی جدول products
یک ارتباط n به n داریم بین جدول products و attributes ازطریق جدول واسط productattributes (با دو کلید خارجی product_id و attribute_id) که توی همین جدول فیلد value هم داریم

اگه باز هم ابهامی هست بفرمایید.

rahahost
چهارشنبه 28 آبان 1393, 20:34 عصر
ممنونم جناب شهرکی عزیز :)

الان شکل جداول مشخصه و معلوم شده که باید ارتباط ها به چه شکلی باشه :)

مشکل دیگه که هست اینه که از دید من لاراول کمی محدود هست :

من الان میبایست کلید اصلی جدول محصولات و فیلدهارو در یک جدول دیگه بعنوان کلید خارجی ( با روش pivot ) به هم وصل کنم

مشکل اینجاست که در این روش فیلد اضافه ای نمیشه قرار داد و مقدار هارو گرفتو ذخیره کرد و متد sync برای ذخیره فقط آی دی میگیره !

دوستان لاراولی لطفا راهنمایی کنید تا این بخش سوالم هم حل بشه

متشکرم .

rahahost
پنج شنبه 29 آبان 1393, 09:39 صبح
یه تصویر هم ضمیمه میکنم که دقیقا به ساختار جدولم اشاره میکنه و معلومه کجایه کا اشکال دارم :)
125882

rahahost
جمعه 30 آبان 1393, 11:26 صبح
تا به حال فروشگاه طراحی نکردید با لاراول ؟
این بخش رو اصلا نداشتین ؟

دوستان یه نظری ، پیشنهادی چیزی .... !

ni.alpr
جمعه 30 آبان 1393, 14:49 عصر
می خواستم همینجا جوابتون رو بنویسم اما واقعا کد نوشتن تو اینجا سخته.

laravel یه دستور withPivot داره که در ادامه ی BlongsToMany زنجیر میشه و می تونید باهاش فیلدهای اضافه ای که در pivot دارید رو بهش بدید.

اینجا رو مطالعه کنید به جوابتون می رسید : Laravel 4 :pivot table example (http://www.developed.be/2013/08/30/laravel-4-pivot-table-example-attach-and-detach/)

یادتون باشه لاراول توی مدیریت داده ها خیلی غنی هست ، همچین چیزایی حتما براش در نظر گرفته شده .

rahahost
جمعه 30 آبان 1393, 21:15 عصر
می خواستم همینجا جوابتون رو بنویسم اما واقعا کد نوشتن تو اینجا سخته.

laravel یه دستور withPivot داره که در ادامه ی BlongsToMany زنجیر میشه و می تونید باهاش فیلدهای اضافه ای که در pivot دارید رو بهش بدید.

اینجا رو مطالعه کنید به جوابتون می رسید : Laravel 4 :pivot table example (http://www.developed.be/2013/08/30/laravel-4-pivot-table-example-attach-and-detach/)

یادتون باشه لاراول توی مدیریت داده ها خیلی غنی هست ، همچین چیزایی حتما براش در نظر گرفته شده .


این موردو قبلا دیده بودم امام متاسفانه متوجه نشدم !
امکانش هست طبق جداولی که عکسش رو گذاشتم ، یه نمونه برام مثال بزنید ؟

طبق جدول من ، جدول مشترک بین محصولات و فیلدها ( product_product_group_field ) هست :
یک فیلد باید بهش اضافه کنم ( اضافه کردن رو باید دستی انجام بدم یا php artisan ... ?) ؟
واسه اینکه در زمان ثبت محصول ، دو مقدار product_id و product_field_id به همراه مقدارش رو ثبت کنم ، باید چه کاری انجام یدم ؟

یه مثال بزنید ممنونتون میشم :)

منابع فارسی کمی داریم متاسفانه !

rahahost
چهارشنبه 05 آذر 1393, 18:11 عصر
مشکلم رفع شد ، دوستان اگر با مشکلی که من داشتم مواجه شدن ، بگن تا روش رو خدمتشون ارائه بدم :)

rahahost
شنبه 08 آذر 1393, 22:05 عصر
سلام مجدد خدمت همه دوستان .

در امتداد مشکلی که داشتم ، مسئله ی جدیدی پیش اومد برام که ممنون میشم یه راهنمایی بکنید تا رفعش کنم :

من درون کنترلرم فیلد های هر دسته از محصولات رو فراخوانی کردم ( بصورت جی کوئری ایجکس ) و هر اینپوت رو با نام آرایه ای نام گذاری کردم :




public function getGroups()
{
$id = Input::get('id');
$group = Productgroup::find($id);
if($group)
{
if(count($group->productfields) >= 1)
{
foreach ($group->productfields as $field){

echo '
<div id="showfields" class="col-lg-12 form-group field">
<label for="product_gid" class="col-sm-2">'.$field->fieldname.' : </label>
<div class="col-sm-10">
<input type="text" name="productfield['.$field->id.']" id='.$field->id.' class="form form-control" placeholder='.$field->fieldname.' />
</div>
</div>
';
}
}
else
{
echo '
<div id="showfields" class="col-lg-12 form-group field">
<label for="product_gid" class="col-sm-2">فیلد های محصول </label>
<div class="col-sm-10">
در این دسته فیلدی وجود ندارد .
</div>
</div>
';
}
}
else
{
return 'چنین دسته ای وجود ندارد ، لطفا مجددا تلاش نمایید .';
}

}




حالا ، خروجی کد من ، زمانی که مقدار های هر فیلد رو وارد میکنم و ارسال میکنم ، به این شکل هست :


array(1) { [0]=> array(5) { [26]=> string(6) "512 MB" [27]=> string(9) "4400 Mghz" [28]=> string(0) "" [29]=> string(6) "512 GB" [30]=> string(5) "12 GB" } }


یعنی : آی دی هر فیلد و مقدار همون فیلد

حالا من چطور میتونم این دو مقدار رو درون جدول مشترک بین فیلدها و محصولات ، همراه با مقدارشون ثبت کنم ؟
یعنی آی دی محصول ثبت شده + آی دی فیلد ثبت شده + مقدار فیلد رو درون جدول product_productfield ثبت کنم ؟

ممنون میشم راهنماییم کنید .

rahahost
دوشنبه 10 آذر 1393, 21:38 عصر
الان فهمیدم که با روش زیر میشه اما یه آی دی رو قبول میکنه برای فیلد و مقدارش رو میتونم بدم اما من میخوام تعداد زیادی فیلد ( که تعدادشم معلوم نیست )




$product->productfields()->sync(array(35 => array('value' => '12 GB')));



مقدار هایی که من دارم ( همونطزور که تو پست قبلی گفتم ) آرایه هست که شامل ای دی فیلد و مقدار همون فیلد میشه !
حالا موندم چطوری باید برای تمام فیلد و مقدار ها ، با متد sync ، مقدار اضافه کنم و ذخیره کنم ؟!

rahahost
چهارشنبه 12 آذر 1393, 22:11 عصر
تو این انجمن سوالات زیادی پرسیدم که اکثرا به جواب نرسید !

نمیدونم دوستان تا به حال به همچین مشکلاتی برخورد نکردن یا اینکه مشکل دیگران براشون اهمیت نداره !

خوشبختانه تا به حال نشده جواب سوالی رو بدونم و راهنمایی نکنم البته در اون حد نیستم که خودمو .... !

به هر حال ؛ از تاریخ ایجاد این تاپیک تا الان حدود 16 روز گذشته ،بعضی از دوستان راهنماییم کردن ، بعضی ها هم حتی به پیام خصوصیشونم نگاه نکردن ;)

گلایه ای نیست ولی حتما شما هم یه همچین مراحلی رو طی کردید و حتا سوالاتی رو مطرح کردید ، دوست داشتم بدونم وقتی جواب نمیگیرید ، ناراحت و نامید میشین یا نه !


ممنون بابت راهنمایی ها !

جواب این سوالم اینطور میشه که دوستان دیگه اگه به مشکل برخوردن ، بتونن حلش کنن :




$fieldids = Input::get('productfield');
$callback_array = array();
foreach ($fieldids as $fieldid => $value)
{
$callback_array[$fieldid] = array("value" => $value);
}

$product->productfields()->sync($callback_array);

rahahost
سه شنبه 25 آذر 1393, 11:30 صبح
و باز هم مشکلی دیگه !

محصول با موفقت ثبت میشه و مشکلی در این مورد نیست .
حالا فرضا میخوایم ویرایشش کنیم ، این فیلدهایی که پر شدن بودن و ذخیره کرده بودیم باید به همراه فیلد هایی که خالی هستن باگذاری بشه تا اگه کاربر خواست ، ویرایشش بکنه و یا یک فیلد رو به خواسته خودش پر و یا خالی کنه !

برای نمایش فیلد ها باید چیکار کنم ؟

nasirb
سه شنبه 25 آذر 1393, 20:40 عصر
حالا فرضا میخوایم ویرایشش کنیم ، این فیلدهایی که پر شدن بودن و ذخیره کرده بودیم باید به همراه فیلد هایی که خالی هستن باگذاری بشه تا اگه کاربر خواست ، ویرایشش بکنه و یا یک فیلد رو به خواسته خودش پر و یا خالی کنه !


باید تمام فیلد ها را چه پر شده و چه نشده را نمایش بدید به خاطر اینکه ویرایش فقط پر کردن فیلدهای خالی نیست !!! بلکه ممکنه شما غلط املای داشته باشید و بخواهید اونو ویرایش کنید و ...



برای نمایش فیلد ها باید چیکار کنم ؟


باید مشخصات محصولی که می خواهید رو بر اساس ستونی Uniqe ای که در جدول set کردید رو فراخوانی کنید . به طور مثال بر اساس id (معمولش هم همینه) . بعد بیایید یک صفحه درست کنید که بر اساس و تعداد فیلد هایی که نیازه(حالا ممکنه پر شده باشه یا نه و بستگی به database داره ) input بذارید و البته حواستون باشه همه ی این input ها داخل یک Form باشه . نکته مهم اینجا اینکه باید action این فرم رو بر اساس id محصول به یک Route بفرستید ! به طور مثال :



saveEdit/{id}

بعد مقادیری که از db گرفتید رو داخل value های این input ها قرار می هید حالا ممکنه پر شده باشه یا نشه ( بر اساس زمانی که محصول ثبت شده! ) .
بعد می رید داخل Route مورد نظر و مقادیر وارد شده در فرم رو در db ذخیره می کنید !

rahahost
دوشنبه 22 دی 1393, 18:12 عصر
سلام .

ممنون از راهنماییتون اما شما فقط الگوریتم دادین که میدونستم شکل پیاده سازیش به زبان الگوریتم چطوری هست ولی کد هایی که باید استفاده کنم رو نمیدونم !

ببینید ، من با کد زیر میتونم مقدار هایی که ذخیره شده رو نمایش بدم :


@foreach ($products->productfields as $productfield)
<li><span>{{ $productfield->fieldname }}</span> : {{ $productfield->pivot->value }}</li>
@endforeach



این کد فقط فیلد هایی که پر شده ( مقدارش ) رو نمایش میده اما من باید تمام فیلد هارو نمایش بدم ( فیلد هایی که پر شده و خالی هستن ) تا بتونم ویرایش ، حذف و اضافه کنم مقدارش رو .

ممنون میشم راهنماییم کنید.