PDA

View Full Version : سوال: طراحی منوی درختی بصورت داینامیک



rash44
جمعه 16 بهمن 1388, 10:04 صبح
سلام
1 سایت دارم طراحی می کنم که تعداد بخش های منو ها مشخص نیست
1 کد برای افزودن دسته ها یا همون گزینه های منو ساختم
1 بخش دیگه برای افزودن زیر منو ساختم
گزینه های منو به صورت درختی رشد می کنه ::
مثلا کشاورزی > گندم
حالا شاید زیر منوی گندم هم خودش به تعدادی زیر منو تقسیم بشه و شاید مجددا زیر منوهای گندم هم تعداد زیر منو داشته باشن
طراحی بخشی که بتونه این نوع منو را بسازه باید به چه صورت باشه ؟؟

امیـرحسین
جمعه 16 بهمن 1388, 12:08 عصر
می تونید با حلقه و تابع این کار رو بکنید ولی اگر من باشم یه جدول برای نگهداری این منوها میسازم که که مثلا منوی کشاورزی هرچی زیرمنو داره رو با یه فرمت خاص که خودم دوست دارم توش میریزم (مثلا JSON). هر دفعه از اونجا می خونم و موقع آپدیت هم اونجا رو آپدیت می کنم.

rash44
جمعه 16 بهمن 1388, 19:28 عصر
سلام

من نمی تونم تعداد زیر منوها تخیص بدم
واقعا هم قابل تشخیص نیست
مثل کشاورزی > باعبانی > پسته >

حالا گزینه پسته >
انواع پسته : .....

امیـرحسین
جمعه 16 بهمن 1388, 22:56 عصر
اگر یه فضایی برای منوها اختصاص بدید، فقط کافیه وقتی زیرمنویی اضافه میشه این بخش رو آپدیت کنید و برای چاپ منو محتویات این بخش (جدول یا فایل یا هر چی) رو بخونید و چاپ کنید.

maysamscript
شنبه 17 بهمن 1388, 10:45 صبح
پاسخ شما استفاده از ساختار سلسله مراتبی داده ها در دیتابیس هست. برای اطلاعات بیشتر به آدرس زیر مراجعه فرمایید
http://dev.mysql.com/tech-resources/articles/hierarchical-data.html

یک نمونه از کاری که شما میخواهید انجام بدید در آدرس زیر انجام دادم
http://marvastonix.com

rash44
شنبه 17 بهمن 1388, 19:13 عصر
سلام
آیا این راه حل درسته ؟؟
1 دیتا بیس با 3 تا فیلد : id - name - type
1 فرم برای تعریف منو یا زیر منو :
فیلد بخش » شامل کل من هایی که ثبت شده
فیلد نام : ----

زمانی که می خوام 1 زیر منو تعریف کنم فیلد type رو با آی دی مربوط به بخش موزد نظر آپدیت کنم
زمانی که کاربر وارد بخش پسته شد کل رکوردهایی که type آنها برابر با مقدار id پسته هیت نمایش داده بشه

maysamscript
شنبه 17 بهمن 1388, 21:40 عصر
شما پست قبلی من رو خوندید؟؟
برای ایجاد ساختار درختی در دیتابیس یک راه استاندارد و اصولی وجود داره که در نرم افزار های زیادی از این روش استفاده می شود و این کاری شما مخواهید انجام دهید کاری نیست که جدید باشه و قبلاً انجام نشده باشه.
روش کار در لینکی (http://dev.mysql.com/tech-resources/articles/hierarchical-data.html) که قبلاً دادم به طور مفصل توضیح داده شده اما من هم یه توضیحاتی در مورد اون میدم.
برای ایجاد ساختار درختی در دیتابیس ، در جدولی که میخواهیم رکورد ها به صورت درختی با هم در ارتباط باشند باید 2 فیلد اضافه در جدول قرار دهیم. 2 فیلد ذکر شده که به ارزشهای چپ و راست برگها معروفند ، درواقع درخت را همچون ظرف های تودرتو شبیه سازی میکند. فرض کنید درخت ما تنها یک گره دارد این گره دارای ارزش چپ 1 و ارزش راست 2 میباشد. اگر خواسته باشیم یک گره به عنوان فرزند به گره موجود اضافه کنیم باید ظرفمان را برای جاسازی یک ظرف دیگر گسترش دهیم. یعنی ارزش چپ و راست گره پدر را به ترتیب 1 و 4 قرار می دهیم. با اختصاص ارزشهای 2 و 3 به گره فرزند در واقع این گره در گره پدر جاسازی شده است. این روند را برای افزودن تمام گره ها انجام می دهیم. نگران نباشید این کار با دستورات ساده sql قابل انجام هست و لازم نیست برنامه پیچیده ای برای این کار بنویسید(اون لینک را ببینید). اگر قصد نوشتن برنامه قویی دارید اکیداً توصیه می کنم که از این ساختار برای پیاده سازی ساختار درختی در دیتابیس استفاده کنید.

امیـرحسین
شنبه 17 بهمن 1388, 22:20 عصر
اینها دو نمونه با مثال تحت PHP هستند:

Sitepoint.com :: Storing Hierarchical Data in a Database (http://articles.sitepoint.com/article/hierarchical-data-database)
PHPRo.com :: Managing Hierarchical Data with PHP and MySQL (http://www.phpro.org/tutorials/Managing-Hierarchical-Data-with-PHP-and-MySQL.html)

maysamscript عزیز، شما معماری دیتابیس بلدید. اگر منبع خوب سراغ دارید معرفی کنید خیلی لطف کردید.

zoghal
یک شنبه 18 بهمن 1388, 09:27 صبح
شما پست قبلی من رو خوندید؟؟
برای ایجاد ساختار درختی در دیتابیس یک راه استاندارد و اصولی وجود داره که در نرم افزار های زیادی از این روش استفاده می شود و این کاری شما مخواهید انجام دهید کاری نیست که جدید باشه و قبلاً انجام نشده باشه.
روش کار در لینکی (http://dev.mysql.com/tech-resources/articles/hierarchical-data.html) که قبلاً دادم به طور مفصل توضیح داده شده اما من هم یه توضیحاتی در مورد اون میدم.
برای ایجاد ساختار درختی در دیتابیس ، در جدولی که میخواهیم رکورد ها به صورت درختی با هم در ارتباط باشند باید 2 فیلد اضافه در جدول قرار دهیم. 2 فیلد ذکر شده که به ارزشهای چپ و راست برگها معروفند ، درواقع درخت را همچون ظرف های تودرتو شبیه سازی میکند. فرض کنید درخت ما تنها یک گره دارد این گره دارای ارزش چپ 1 و ارزش راست 2 میباشد. اگر خواسته باشیم یک گره به عنوان فرزند به گره موجود اضافه کنیم باید ظرفمان را برای جاسازی یک ظرف دیگر گسترش دهیم. یعنی ارزش چپ و راست گره پدر را به ترتیب 1 و 4 قرار می دهیم. با اختصاص ارزشهای 2 و 3 به گره فرزند در واقع این گره در گره پدر جاسازی شده است. این روند را برای افزودن تمام گره ها انجام می دهیم. نگران نباشید این کار با دستورات ساده sql قابل انجام هست و لازم نیست برنامه پیچیده ای برای این کار بنویسید(اون لینک را ببینید). اگر قصد نوشتن برنامه قویی دارید اکیداً توصیه می کنم که از این ساختار برای پیاده سازی ساختار درختی در دیتابیس استفاده کنید.

دقیقا با حرف ایشون موافقم. این روش بهترین و سریع ترین هست. من این روش رو در 2 سیستم نتورک مارکتینگ امتحان و پیاده سازی کردم. روش های دیگه رو هم همینطور . این روش مخصوصا در مورد جستجو (فرضا 1000 رکورد که زیر مجموعه هم هستند.)سرعت بسیار بالایی داره.

maysamscript
یک شنبه 18 بهمن 1388, 09:52 صبح
maysamscript عزیز، شما معماری دیتابیس بلدید. اگر منبع خوب سراغ دارید معرفی کنید خیلی لطف کردید. من بطور خاص روی ساختار سلسله مراتبی داده ها (همون درخت) در دیتابیس زیاد کار کردم و پایان نامه ام هم همین موضوع بوده. منبع من هم سایت http://dev.mysql.com/ بود. مقالات مفیدی در این سایت موجود هست