PDA

View Full Version : سوال: برنامه نویسی برای ایجاد منو و زیر منو



idocsidocs
دوشنبه 26 دی 1390, 18:59 عصر
من می خوام بتونم منو و زیر منو ایجاد کنم.

نمی دونم چطور باید کد بزنم که منوی اول نمایش داده بشه و بعد زیر منوهای اون نمایش داده بشه و به ترتیب بقیه منوها و زیر منوها هم نمایش داده بشن.

لطفا راهنمایی کنید.

djsaeedkhan
دوشنبه 26 دی 1390, 19:09 عصر
سلام
لطفا این مورد رو مشاهده بفرمایید
http://barnamenevis.org/showthread.php?322408-%D9%85%D9%86%D9%88-%D9%87%D8%A7%DB%8C-%D8%AF%D8%B1%D8%AE%D8%AA%DB%8C-%D8%A8%D8%A7-%D8%A8%DB%8C-%D9%86%D9%87%D8%A7%DB%8C%D8%AA-%D8%B3%D8%B7%D8%AD

idocsidocs
دوشنبه 26 دی 1390, 19:37 عصر
لطفا این مورد رو مشاهده بفرماییدچیزی متوجه نشدم.

البته باید بدونیم که منوهاو زیر منوها توی چند جدول نگه داری می شن. منتوی یه جدول ذخیره می کنم.

pejman_view
دوشنبه 26 دی 1390, 21:02 عصر
سلام

برای خیلی ها روش ساخت منوی درختی با بی نهایت زیر مجموعه را توضیح دادم اما متاسفانه بازهم سوال می شود.
فرض کنید جدول اطلاعاتی دارید با فیلدهای روبرو: 1- آیدی 2- آیدی والد 3- متن منو


<?phpfunction make_list ($parent) { global $menus; echo '<ol>'; foreach ($parent as $menu_id => $todo) { echo "<li>$todo"; if (isset($menus[$menu_id])) { make_list($menus[$menu_id]); } echo '</li>'; } echo '</ol>';} $dbc = @mysqli_connect ('localhost', 'username', 'password', 'test') OR die ('<p>Could notconnect to the database!</p>');$q = 'SELECT menu_id, parent_id, menu_text FROM menus ORDER BY parent_id ASC'; $r = mysqli_query($dbc, $q);$menus = array();while (list($menu_id, $parent_id, $menu_text) = mysqli_fetch_array($r, MYSQLI_NUM)) { $menus[$parent_id][$menu_id] = $menu_text;}make_list($menus[0]);?>


تابع make_list قراره شناسه والد را دریافت کند سپس با دریافت شناسه والد تمامی شناسه های زیر مجموعه اش را چاپ کند در صورتی که خود زیر مجموعه والد باشد دوباره همینکار را تکرار کند.
یعنی می تواند n تا زیر مجموعه را نمایش می دهد.

با آرزوی موفقیت

idocsidocs
سه شنبه 27 دی 1390, 03:12 صبح
تابع make_list قراره شناسه والد را دریافت کند سپس با دریافت شناسه والد تمامی شناسه های زیر مجموعه اش را چاپ کند در صورتی که خود زیر مجموعه والد باشد دوباره همینکار را تکرار کند.من تا حالا با تابع list کار نکردم، می شه بجای این تابع از یه تابع دیگه استفاده کنید و این کد رو اصلاح کنید؟

mohsen24000
سه شنبه 27 دی 1390, 08:11 صبح
من تا حالا با تابع list کار نکردم، می شه بجای این تابع از یه تابع دیگه استفاده کنید و این کد رو اصلاح کنید؟
اخوی تابعی که دوستمون اشاره کردند تابع خاصی نیست که کار نکرده باشی، ایشون خودشون یک تابع بازگشتی(recursive) نوشتند برای کاری که مدنظر شما هم هست.
فلذا برای ایجاد منو از طریق اطلاعات بانک می بایست از این الگوریتم پیروی کنید حالا با هر نامی یا هر روشی...

idocsidocs
سه شنبه 27 دی 1390, 12:41 عصر
اخوی تابعی که دوستمون اشاره کردند تابع خاصی نیست که کار نکرده باشی، ایشون خودشون یک تابع بازگشتی(recursive) نوشتند برای کاری که مدنظر شما هم هست.
منظورم تابع make_list نبود بلکه منظورم تابع list توی کد زیر بود:

while (list($menu_id, $parent_id, $menu_text) = mysqli_fetch_array($r, MYSQLI_NUM))
من با این تابع تا حالا کار نکردم.

pejman_view
سه شنبه 27 دی 1390, 16:27 عصر
سلام

تابع list برای آرایه بکار می رود فرض کنید من یک آرایه دارم که مقدار اولین اندیس آرایه menu_id و دومین parent_id و سومین menu_text است.
از تابع لیست برای ریختن مقدار این اندیس ها به داخل یک متغیر استفاده می کنم.
به مثالم توجه کن:


$menu = array ('id' => '1' ,'parent_id'=> '0' , 'menu_text'=>'home');
list ($menu_id,$parent_id,$menu_text) = $menu

به ترتیب اندیس های آرایه ام از متغیرهای مناسب استفاده کردم به چند نکته توجه کن: 1- ترتیب اندیس ها برای لیست کردن مهم است 2- همانطور که در مثال هم می بینید لازم نیست متغیرها هم نام با اندیس های آرایه باشد.
حالا من می خواهم برای فهم بیشتر در مثال زیر مقادیر را نمایش بدهم.



echo $menu_id; // print '1'
echo $parent_id; // print '0'
echo $menu_text; // print 'home'

با آرزوی موفقیت

idocsidocs
سه شنبه 27 دی 1390, 16:44 عصر
تابع list برای آرایه بکار می رود فرض کنید من یک آرایه دارم که مقدار اولین اندیس آرایه menu_id و دومین parent_id و سومین menu_text است.چرا از کد زیر استفاده نکنیم؟


$arr=array();
while($row=$r->fetch_assoc()){
$arr=$row;
}

pejman_view
سه شنبه 27 دی 1390, 16:53 عصر
سلام

خوب برای آرایه های دیتابیسی شاید این کاربرد داشته باشد اما برای بقیه آرایه ها خیر.
ضمناً من فقط یک رکورد از کل دیتابیس را نیاز داشتم با این کار تمام رکورد ها را بازیابی خواهم کرد. اینطور کمی رم بیشتر و زمان بیشتر برای پردازش نیاز است.

با آرزوی موفقیت

idocsidocs
سه شنبه 27 دی 1390, 17:32 عصر
ضمناً من فقط یک رکورد از کل دیتابیس را نیاز داشتم

می شه بگید تابعی که برای نمایش منوها و زیر منوها دادید، چند ردیف از جدول رو بیرون می کشه؟

pejman_view
سه شنبه 27 دی 1390, 19:30 عصر
می شه بگید تابعی که برای نمایش منوها و زیر منوها دادید، چند ردیف از جدول رو بیرون می کشه؟
سلام

لطفاً به این خطم توجه کن:


while (list($menu_id, $parent_id, $menu_text) = mysqli_fetch_array($r, MYSQLI_NUM)) {
$menus[$parent_id][$menu_id] = $menu_text;
}


من می خواستم یک آرایه چند بعدی درست کنم که اولین بعدش شناسه والد است و دومین بعدش شناسه منو است. من بجایی که بیام یک خط پایین تر از while به متغیرهام مقدار بدم تو همان قسمت نوشتم.

با آرزوی موفقیت