-
Вебмастеру
(
http://forum.oszone.net/forumdisplay.php?f=22)
Дерево ссылок с неограниченным числом вложений
нужно дерево ссылок, как в реестре, с возможностью добалять неограниченно вложенные подразделы
хотя бы идею как сделать?
я делал но с вложенностью до 3х, три таблички в каждой табличке пишется ссылка на другую, а тут нужно создавать много таблиц динамически получается?
|
Можно создать таблицу с 3 полями: ID, ID "родителя", ссылка.
|
Вложений: 2
id | ud_parent | ud_current | time_create | nazvanie | status |
id - autoincrement
ud используются потому что хочется понятные имена подразделов, а не цифры id
status 1 - ветка дерева развёрнута, 0 - ветка дерева свёрнута
сделал в одной таблице table.gif image.gif , но сейчас непонятно как отобразить это дерево,
получается опять нужно писать бесконечно вложенный код, этот код отобразит только верхний уровень, а для каждого вложенного уровня чё новый писать, или как-нибудь функцией может написать
PHP код:
echo("<!-- razdel -->");
$result = mysql_query ("SELECT * FROM razdel ORDER BY `id` ASC",$db);
$myrow = mysql_fetch_array ($result);
do
if ($myrow['ud_current'] == $razdel)
{
if ($myrow['status'] == 0) // в зависимости от status отображает plus или minus
{
echo("
<a href='$pathdomain/?razdel=$razdel&status=1&status_target=$myrow[ud_current]'><image src='/img/plus.gif' style='float:left; margin: 4px 10px 0px 0px;'></a>
");
}
else
{
echo("
<a href='$pathdomain/?razdel=$razdel&status=0&status_target=$myrow[ud_current]'><image src='/img/minus.gif' style='float:left; margin: 4px 10px 0px 0px;'></a>
");
}
echo("
<div class='conteiner_link_1_current'>
$myrow[nazvanie] <a href='$pathdomain/?razdel=$myrow[ud_current]' class='add_razdel' onClick='openwindow = window.open(\"add_razdel.php\", \"add_razdel\", \"toolbar=0,width=360,height=150\"); openwindow.focus();' title='Добавить раздел'>*</a>
</div>
");
}
else
{
if ($myrow['status'] == 0) // в зависимости от status отображает plus или minus
{
echo("
<a href='$pathdomain/?razdel=$razdel&status=1&status_target=$myrow[ud_current]'><image src='/img/plus.gif' style='float:left; margin: 4px 10px 0px 0px;'></a>
");
}
else
{
echo("
<a href='$pathdomain/?razdel=$razdel&status=0&status_target=$myrow[ud_current]'><image src='/img/minus.gif' style='float:left; margin: 4px 10px 0px 0px;'></a>
");
}
echo("
<div class='conteiner_link_1'>
<a href='$pathdomain/?razdel=$myrow[ud_current]'>$myrow[nazvanie]</a>
</div>
");
}
while ($myrow = mysql_fetch_array ($result));
echo("<a href='#' onClick='openwindow = window.open(\"add_razdel.php\", \"add_razdel\", \"toolbar=0,width=360,height=150\"); openwindow.focus();' title='Добавить раздел'>Добавить раздел</a>");
echo("<!-- razdel -->");
|
Для отображения воспользоваться рекурсией (надеюсь, правильно алгоритм составил):
Код:
запрос_элементов_уровня(х) // изначально x=0, но при рекурсивном вызове будет увеличиваться
{ // начало функции
запросить_строки(x);
цикл_по_всем_выданным_результатам
{
если_уровень_не_самый_нижний // ведь метка в таблице будет?
{
вывести_текущую_строку_с_отступом(x); // и соответствующим JavaScript'ом
запрос_элементов_уровня(x+1);
}
иначе // уровень нижний
{
вывести_ссылку_с_отступом(x); // без JS уже
return;
}
}
} // конец функции
Разве в интернете нет готовых функций?
Но, быть может, использовать XML+XSLT? Думается мне, что мороки будет меньше.
|
Время: 14:57.
© OSzone.net 2001-