у меня проблема не могу написать меню!

Boris

Guest
у меня проблема не могу написать меню!

у меня проблема не могу написать меню!
Мне надо чтобы в нем можно было делать бесконечное количество под категорий !
Я создал базу там есть колонки name,id,parent_id с админкой все просто а вот вывести на сайт не могу ! Получается что подкатегории теряются.
help.....
 

nerezus

Вселенский отказник
Boris
рекурсивной называется функция, которая вызывает саму себя, либо ф-ию, вызывающую эту ф-ию.
 

Boris

Guest
ето многое облегчает Спосиба

-~{}~ 23.07.06 16:29:

можно синтаксис плиз а?
 

maxru

МИФИст
Boris
PHP:
<?php

function getmenuitem($menuparent_id=0)
{
   //забираем данные из БД
   [sql]SELECT * FROM menuitems WHERE menuid=1 AND menuparent=$menuparent_id[/sql]
//если колич-во результатов 0, то return;
// обьединили строки в массив $result
   //получили список меню первого уровня (родительских элементов нет)
  foreach($result as $menuitem)
{
    // echo $menuitem['menuname']...or something else
    getmenuitem($menuitem['menuitem_id']);
}
   
return;
}

?>
 

eXtreme

Новичок
При большом дереве много запросов к БД получится. Наверно лучше сделать одну выборку и собрать древовидный массив, а уже после сделать его обход. Ну тут нагрузка на ЦП и оперативу. Что лучше решается в конкретном случае.
 

maxru

МИФИст
eXtreme
а ты будешь меню с 56 подпунктами делать?
Если меню состоит из 3 пунктов и зх подпунктов в каждом, то запросов будет:
1+3=4

Если меню трёхуровневое, то запросов:

1+число_подменю+число_подменю*число_подподменю и так далее

-~{}~ 23.07.06 19:45:

кроме того, можно добавить в таблицу поле islast, чтобы не делать лишние запросы по несуществующим субменю
 

eXtreme

Новичок
maxru

Да можно хоть в статике меню сделать.
Просто запросы к БД в цикле, а тем более в рекурсии так называемый программистский дурной тон :)

Теоретически БД может быть расположена но другом серваке, а это уже +ПИНГ.

Конечно в конкретном случае любой код прокатит, но надо стремится к универсальности и может даже где-то к совершенству :)
 

maxru

МИФИст
eXtreme
ну да, это программистский дурной тон.
А если ты не программист, то пиши без циклов и рекурсий 8)

-~{}~ 23.07.06 20:20:

Да, кстати, что же ты сам ничего не посоветовал, только критикуешь?
Про кеширование тоже забыл?
 

eXtreme

Новичок
maxru
Не, не критикую.

Я согласен с твоим вариантом рекурсии, просто предложил делать её по массиву вместо множества запросов к БД.

Думаю автор топика уже накурился, так что не будем разводить флейм :)
 

maxru

МИФИст
eXtreme, а как ты собираешься забивать древовидный массив в бд? serialize'ом?

Меня тут WP разодрал на клочки за хранение списка групп, которым разрешён доступ к странице в виде 2.3.43.533.234
8)

Кстати, дурной программистский тон - это безусловные переходы. Все товарищи, в чьём коде я видел безусловные переход уже зарыты у меня под окном. (это не про php)
И ещё, когда начинают писать всякие функции-заглушки и функции-переходники, вместо того, чтобы переписать библиотечку под новую версию.
 

0xHH

Новичок
maxru
Можно одним запросом SELECT * FROM menuitems загнать всё меню в массив, а потом рекурсивно получать необходимые значения из php.
 

maxru

МИФИст
В смысле SELECT * FROM menuitems WHERE menuid=4353
Так что-ли?
Вполне логично 8)
 

maxru

МИФИст
0xHH, я это и мел в виду, просто предполагал, что менющек будет не одна (menu_id - это id одного из доступных menu, а не пунктов меню.)
 
Сверху