[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Иерархическая структура разделов/страниц на сайте
Sylex
Прочитав кучу материалов:
http://getinfo.ru/article610.html
http://phpclub.ru/faq/Tree/DemoPrintDynamic?v=17kl
http://sub.rambler.ru/read/rambler.compute...2-16&time=13:05
http://phpclub.ru/detail/article/2002-06-03
http://habrahabr.ru/blogs/development/46659/
http://habrahabr.ru/blogs/development/47280/

хотелось бы внести ясность.

К примеру имеется некая иерархическая структура разделов/страниц сайтов. Раздел и страница считать синонимами, просто всегда разное понятие более подходит. Каждая страница имеет свой URL, не числовой, а к примеру:
Код
/news/travel/hehe.php
/news/auto/autozvuk.php
/articles/mix.php
/articles/auto/zxczxc.php


Нужны следующие возможности:
- добавление страницы в выбранный раздел
- удаление разделов
- изменение порядка сортировки в разделе
- выборка всех разделов/подразделов/страниц из заданного раздела с учетом сортировки
- построение пути (рездел 7 - подраздел 2 - подраздел 3 - страница 6) по выбранному разделу
- поиск страницы по URL

Страниц предполагается до 200.

Хотелось бы узнать, какие методики хранения вы используете:
- Список смежных вершин (Adjacency List)
- Вложенное множество (Nested Set)
- Материализованный путь (Materialized Path).

И есть ли конкретный пример реализации (класс на PHP к примеру).



Спустя 3 часа, 41 минута, 40 секунд (13.02.2009 - 11:19) kirik написал(а):
Для сложной структуры сайта я бы использовал Nested Set Model.
Adjacency List Model имеет ряд недостатков и неудобств в работе. Например чтобы вывести какой-либо путь нужно знать на каком уровне мы находимся, или чтобы удалить уровень нужно будет перебрать все дочерние уровни начиная с верхнего, чтобы выставить правильные родительские значения. Думаю что этот метод можно использовать когда структура не модифицируется, а только дополняется (простые комменты без удаления, или двач smile.gif )

С Nested Set Model все проще. Для отображения пути не нужно знать на каком уровне мы сейчас, для удаления/перемещения раздела нужно выполнить несколько запросов.

Классом не поделюсь.. Никак руки не доходят smile.gif А из сети, можешь поглядеть этот.

Спустя 14 минут, 10 секунд (13.02.2009 - 11:34) Sylex написал(а):
kirik
спасибо, именно его уже и реализовываю!
Осталась сортировка wink.gif

Спустя 5 дней, 21 час, 48 минут, 16 секунд (19.02.2009 - 09:22) HardWoman написал(а):
Что касаемо Nested Set Model, то там есть существенный недостаток, при большой структуре значимый - пересчет правого и левого индекса по всей структуре. Если структура не будет изменяться часто - то не проблемма

Есть еще способ - вложенные подмножества - но он избыточен по данным. То есть для каждого пути прописываются все дети

Спустя 35 минут, 2 секунды (19.02.2009 - 09:57) Sylex написал(а):
HardWoman
я же писал - максимум до 200 страниц smile.gif
забыл указать только - изменения структуры будут редкими wink.gif

Спустя 24 минуты, 48 секунд (19.02.2009 - 10:22) HardWoman написал(а):
В свое время я все мозги выполоскала этими сложными иерархиями. Вот ссылочка, может будет интересно.

http://www.arbinada.com/main/node/25

http://www.ibase.ru/devinfo/oop_rdbms.htm

щас поищу еще - допишу сюда.

Спустя 1 день, 3 минуты, 23 секунды (20.02.2009 - 10:25) Sylex написал(а):
интересно, пасип


_____________
Я думал я буду сеять добро, но у меня не получилось. Во-первых, мне помешали, во-вторых я сам отрекся от этой идеи.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.