Jump to content
  • 0

Категории


Fenix
 Share

Question

Здравствуйте, форумчане. Мне недавно потребовалось сделать для одного сайт бесконечную вложенность категорий. Говорю сразу: сайт некомерческий. Делаю его сам для себя. Частично решение я уже придумал. В таблицу категорий(в базе данных) добавить ещё одно поле - parent, т. е. родительская категория. Но появилось другая проблема: надо сделать скрипт генерации меню. Меню на списках и может быть бесконечно вложено. Причем списки строятся по специальной схеме. Пример меню будет выложен внизу. Пожалуйста, у кого есть время подскажите как сделать скрипт генерации меню или предложите свой метод реализации.

Пример меню:

	<li class="top"><a href="index.html" class="top_link"><span>Главная</span></a></li>
<li class="top"><a href="rasteniya/index.html" class="top_link"><span class="down">Растения</span></a>
<ul class="sub">
<li><a href="rasteniya/harakterictic.html">Общая характеристика</a></li>
<li><a href="rasteniya/gribi.html">Грибы</a></li>
<li><a href="rasteniya/lishainiki.html">Лишайники</a></li>
<li><a href="rasteniya/mohovidnie.html">Моховидные</a></li>
<li><a href="rasteniya/plaunovidnie.html">Плауновидные</a></li>
<li><a href="rasteniya/paporotnikovidnie.html">Папоротниковидные</a></li>
<li><a href="rasteniya/golosemenie.html">Голосеменные</a></li>
<li><a href="rasteniya/pokritosemennie.html">Покрытосеменные</a></li>
</ul></li>
<li class="top"><a href="animals/index.html" class="top_link"><span class="down">Животные</span></a>
<ul class="sub">
<li><a href="animals/bezpozvon/index.html" class="fly">Морские беспозвоночные</a>
<ul>
<li><a href="animals/bezpozvon/harakterictic.html">Характеристика условий обитания</a></li>
<li><a href="animals/bezpozvon/kishechnopolosnie.html">Кишечнополостные</a></li>
<li><a href="animals/bezpozvon/chervi.html">Черви</a></li>
<li><a href="animals/bezpozvon/moluski.html">Моллюски</a></li>
<li><a href="animals/bezpozvon/chlenistonogie.html">Членистоногие</a></li>
<li><a href="animals/bezpozvon/iglokozhie.html">Иглокожие</a></li>
</ul>
<li><a href="animals/pozvon/index.html" class="fly">Позвоночные</a>
<ul>
<li><a href="animals/pozvon/ribi.html">Рыбы</a></li>
<li><a href="animals/pozvon/zemnovod_presmik.html">Земноводные и пресмыкающиеся</a></li>
<li><a href="animals/pozvon/ptishi.html">Птицы</a></li>
<li><a href="animals/pozvon/mlekopitauscie.html">Млекопитающие</a></li>
<li><a href="animals/pozvon/see_mlekopitauscie.html">Морские млекопитающие</a></li>
</ul>
</ul></li>
<li class="top"><a href="intresting/index.html" class="top_link"><span class="down">Интересные статьи</span></a>
<ul class="sub">
<li><a href="intresting/labirint.html">Лабиринт</a></li>
<li><a href="intresting/piramidi.html">Пирамиды</a></li>
<li><a href="intresting/seidozero.html">Сейдозеро</a></li>
<li><a href="intresting/tropic_cherepaha.html">Троопическая черепаха</a></li>
<li><a href="intresting/gde_zhivet_edinorog.html">Где живёт единорог</a></li>
<li><a href="intresting/skvazhina.html">Во глубине горячих руд...</a></li>
<li><a href="intresting/oblaka.html">Красивые облака</a></li>
</ul></li>
<li class="top"><a href="galery/index.html" class="top_link"><span>Галерея</span></a></li>

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0
Вот схема. Сам додумаешь.

			do
{
// получаем в цикле данные категории по ID
}
while ($result['parent_id'] != 0);

Я не дурак. Додуматься что здесь нужен цикл просто. Просто додуматься, что тут должны быть вложеные циклы. Но так можно сделать вложеность только на определенное число уровней вложеность. А мне надо бесконечную.

Link to comment
Share on other sites

  • 0

ну-у-у-у... я думал, что деревья уже давным давно всем известны. Еще дядя Кнут давным-давно начал рассказывать про бинарные и не бинарные деревья. Сейчас существует достаточно много алгоритмов деревьев. И на php тоже. От простых Adjacency List до сложных NestedSets и еще вот здесь достаточно инфы, чтобы разобраться в этом вопросе.

Link to comment
Share on other sites

  • 0
ну-у-у-у... я думал, что деревья уже давным давно всем известны. Еще дядя Кнут давным-давно начал рассказывать про бинарные и не бинарные деревья. Сейчас существует достаточно много алгоритмов деревьев. И на php тоже. От простых Adjacency List до сложных NestedSets и еще вот здесь достаточно инфы, чтобы разобраться в этом вопросе.

Ну вот, меня опередили)) Да, NestedSets самый шикарный вариант для этой задачи, но с одной проблемой - перемещение узлов - жопа :D

Link to comment
Share on other sites

  • 0

Можно было бы сделать ещё один параметр - уровень вложенности, ну а дальше рекурсивная процедура, строящая структуру меню. Или же вместо рекурсии два вложенных цикла. Первый - по уровню, второй - по элементам этого уровня

for ($level=0; $level < $maxlevel; $level++)
while($elem = GetNextElem($level))
BuildMenu($elem);

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy