Tofik
Новичок
Хранение деревьев в базе
Столкнулся с этой проблемой до того, как узнал о Nested Sets, поэтому у меня есть проекты, использующие "моё" хранение. Вот думаю, стоит переписывать или сойдёт.
Вкратце моя логика:
В базе есть поле, которое содержит инфу о пути (напр. /razdel/podrazdel/). Чтобы отобразить всю ветку использую следующюю функцию:
где get_blocks:
Чтобы по сто раз не выполнять скрипт, который генерирует навигацию для сайта, я сделал запись навигации в файл каждый раз, когда админ меняет структуру сайта. И когда юзер обращается к странице - навигация выводится из файла, не обращаясь к базе.
Теперь очень удобно перемещать разделы. Пример работы можно посмотреть на www.zavod.by/test/admin/
Столкнулся с этой проблемой до того, как узнал о Nested Sets, поэтому у меня есть проекты, использующие "моё" хранение. Вот думаю, стоит переписывать или сойдёт.
Вкратце моя логика:
В базе есть поле, которое содержит инфу о пути (напр. /razdel/podrazdel/). Чтобы отобразить всю ветку использую следующюю функцию:
PHP:
function print_block($path="/")
{
$block=get_blocks($path);
echo "<ul>";
for($i=1;$i<=count($block);$i++)
{
echo "<li><a href=\"?path=".$block[$i]['path']."\">".$block[$i]['title']."</a></li>";
print_block($block[$i]['path']);
echo "</ul>";
}
}
PHP:
function get_blocks($path)
{
$query=mysql_query("SELECT * FROM `site` WHERE path REGEXP '^".$path."([^/][a-z0-9_-]+)/$' ORDER BY `id` ASC");
for($i=1;$row=mysql_fetch_row($query);$i++)
{
$res[$i]['path']=$row[1];
$res[$i]['title']=$row[2];
}
return $res;
}
Теперь очень удобно перемещать разделы. Пример работы можно посмотреть на www.zavod.by/test/admin/