Как правильно хранить дерево страниц в БД? Решил сделать три таблицы. Первая - содержимое страницы, заголовок и id. Вторая - иерархия - id и родительский элемент. Третья для алиасов - id и алиас. Как мне вывести список всех страниц со ссылками на них, с минимальным количеством запросов? Заранее спасибо!
Но судя по количеству ошибок в HTML, новичок вы не только в PHP. Так что изучите сначала HTML, а затем уже делайте сайты, а пока вам еще рано (тем более с PHP). У вас половина тегов не закрыты, как ваш код вообще должен работать?
Т.е. добавляю его на второе место, и после этого все элементы должны автоматически сдвинутся на одну позицию вниз, при этом ключи должны идти по-порядку (1, 2, 3,...).
aesoem,
Насколько я знаю, эти функции возвращают 0 (false) при ошибке. Поэтому, я вижу две возможных причины:
1. Если на файл, из которого вы читает число, не установлены права на чтение, то соответственно его нельзя считать. Установите права на этот файл - 777.
2. Если ваш PHP-код находится в шаблоне, то файл из которого вы читаете должен находится все одно в корне сайта, потому что шаблон подключается в файл index.php и все пути нужно указывать относительно корня.
DeepVarvar,
Вы издеваетесь ? Мне нужна система для сайта-визитки, которым будут управлять люди плохо разбирающиеся в компьютерах (я это еще в первом сообщении написал). Что такое RSS они даже не знают, пользователь будет только один - администратор (т.е. систему регистрации, пользователи, группы и лс мне делать не надо). Мне нужны только страницы, меню и настройки сайта. Конечно это не CMS, но я не знаю как это правильно назвать.
P.S. Я имел ввиду 3 функции только для работы со страницами.
caballero
Мне чисто для тренировки. Клиентам я пока делаю на Drupal. То что я пытаюсь написать это как бы не можно назвать нормальной CMS. Мне бы только редактор страниц и меню. Ну и настройки (название сайта, слоган и т.д.). Моим клиентам этого достаточно (ну почти что ).
Дико извиняюсь но сия задача для вашего уровня знаний неподьемная.
Какая именно? Такая структура страниц или вы имели виду CMS вообще. Я как бы уже создавал очень простенькую систему (чисто для тренировки). Но там не было вложенности страниц .
caballero пишет:
Это только как страницы вывести - уже проблемма. А еще контент на страницах
Вы хоть сами поняли что сказали ? Контент это часть страницы (как заголовок, описание, ключевые слова и т.д.)
caballero пишет:
а еще управление страницами.
Всего 3 функции: добавить страницу, обновить страницу и удалить страницу. Тем более каждая функция практически лишь запрос в БД.
caballero пишет:
Архитектуру надо сразу разрабатывать а не обсуждать какими переменными буду страницы выводить.
Я обсуждаю логику, какой все это дело организовать. Причем тут вообще КАКИМИ переменными...?
И как вы себе представляете алгоритм вычисления "рокировки" страниц по уровню + позиции, когда юзер захочет перенести "деревья" в самый верх над "животными" и сделать эти "деревья" разделом?
После того как он перенесет "деревья" в самый верх ему нужно будет "сдвинуть" на +1 все страницы ниже. Алгоритм следующий: когда вы выводите страницу, то вы записываете ее NL во временную ($tmp_nl) переменную и выводите ссылки на все страницы ниже, пока не встретите страницу с NL >= $tmp_nl.
morosit пишет:
ИМХО NL дочернеи страницы должен быть равен ID родительской
Нет, NL - это УРОВЕНЬ вложенности. ID родительской странички лучше записывать в PARENT или PARENT_ID (так более логично).
А что мешает? Здесь все понятно. Кстати, можно переместить страницу Цветы выше и она будет принадлежать уже странице Животные. Можно сделать сортировку страниц (т.е. сам редактор списка страниц) как это сделано в Drupal для сортировки терминов, тогда вообще будет классно (особенно для пользователя ).
Вот первый метод. Таблица со страницами будет выглядеть примерно так:
NL - это уровень вложенности (от Nesting Level). Если NL = 0 значит что страница в корне (родительская страница), если 1 - то это дочерняя страница. Т.е. получается как бы иерархия, и в данном примере она выглядит приблизительно так:
Теперь если мы выводим какую-то страницу, и ее NL = 0, то нужно отображать ссылки на следующие страницы пока не встретится следующая родительская страница (или не закончится список). Можно, конечно, не просто ссылки, но и содержимое или его часть, но это уже дело вкуса.
Плюс этого метода в том, что для хранения иерархии страниц можно использовать лишь одну таблицу, да и понять его, как мне кажется, проще.