За последние 24 часа нас посетили 26930 программистов и 1512 роботов. Сейчас ищут 848 программистов ...

Иерархическая структура разделов/страниц на сайте

Тема в разделе "PHP и базы данных", создана пользователем sylex, 12 фев 2009.

  1. sylex

    sylex Активный пользователь

    С нами с:
    9 ноя 2008
    Сообщения:
    625
    Симпатии:
    0
    Адрес:
    Омск
    Прочитав кучу материалов:
    http://getinfo.ru/article610.html
    http://phpclub.ru/faq/Tree/DemoPrintDynamic?v=17kl
    http://sub.rambler.ru/read/rambler.comp ... time=13:05
    http://phpclub.ru/detail/article/2002-06-03
    http://habrahabr.ru/blogs/development/46659/
    http://habrahabr.ru/blogs/development/47280/

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

    К примеру имеется некая иерархическая структура разделов/страниц сайтов. Раздел и страница считать синонимами, просто всегда разное понятие более подходит. Каждая страница имеет свой URL, не числовой, а к примеру:
    Код (Text):
    1. /news/travel/hehe.php
    2. /news/auto/autozvuk.php
    3. /articles/mix.php
    4. /articles/auto/zxczxc.php
    Нужны следующие возможности:
    - добавление страницы в выбранный раздел
    - удаление разделов
    - изменение порядка сортировки в разделе
    - выборка всех разделов/подразделов/страниц из заданного раздела с учетом сортировки
    - построение пути (рездел 7 - подраздел 2 - подраздел 3 - страница 6) по выбранному разделу
    - поиск страницы по URL

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

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

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

    sylex Активный пользователь

    С нами с:
    9 ноя 2008
    Сообщения:
    625
    Симпатии:
    0
    Адрес:
    Омск
  3. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ну тут целая история, для начала советую начать обращаться к страницам через 1 файл, например index.php =)
    с помощью мод реврайта сможешь сделать перенаправление на него, потом разбить REQUEST_URI как надо

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

    md5 Активный пользователь

    С нами с:
    29 янв 2007
    Сообщения:
    250
    Симпатии:
    0
    у NS тяжёлая вставка (пересчет лефт и райт ключей)
     
  5. sylex

    sylex Активный пользователь

    С нами с:
    9 ноя 2008
    Сообщения:
    625
    Симпатии:
    0
    Адрес:
    Омск
    Mr.M.I.T.
    по поводу mod_rewrite - я так и делаю...

    а на счет варианта с доп. таблицей - вряд ли мне подойдет, но все же, покажи структуру таблицы Категории

    да понимаю, но если учитывать что в основном кол-во страниц будет 30-50, и это будет производиться очень редко - я думаю мне вполне сойдет...

    Если и так, то какой метод используешь ты?
     
  6. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    если страниц до 1000 и больше не предвидится, то проще сделать матерьяльный путь и не париться.
    касательно урлов - у меня есть древняя статья на эту тему.
     
  7. Frozen

    Frozen Активный пользователь

    С нами с:
    20 окт 2008
    Сообщения:
    540
    Симпатии:
    0
    Адрес:
    Москва
    я использовал в одной таблице NS + pid родительской страницы. Выборка запрашиваемой страницы шла по pid (допустим вложенность 3 - максимум 3 запроса. Думаю делать вложенность больше не имет смысла. При том что данный путь можо закэшировать и ваще не делать запросов.). NS использовался для всяких разных сортировок и прочей байды.