Войти

Показать полную графическую версию : Дерево ссылок с неограниченным числом вложений


rizz
27-08-2009, 20:00
нужно дерево ссылок, как в реестре, с возможностью добалять неограниченно вложенные подразделы
хотя бы идею как сделать?
я делал но с вложенностью до 3х, три таблички в каждой табличке пишется ссылка на другую, а тут нужно создавать много таблиц динамически получается?

DedAlex
27-08-2009, 22:58
Можно создать таблицу с 3 полями: ID, ID "родителя", ссылка.

rizz
29-08-2009, 22:11
id | ud_parent | ud_current | time_create | nazvanie | status |

id - autoincrement
ud используются потому что хочется понятные имена подразделов, а не цифры id
status 1 - ветка дерева развёрнута, 0 - ветка дерева свёрнута

сделал в одной таблице table.gif (http://forum.oszone.net/attachment.php?attachmentid=31272&d=1251569566) image.gif (http://forum.oszone.net/attachment.php?attachmentid=31273&stc=1&d=1251569713) , но сейчас непонятно как отобразить это дерево,
получается опять нужно писать бесконечно вложенный код, этот код отобразит только верхний уровень, а для каждого вложенного уровня чё новый писать, или как-нибудь функцией может написать

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 -->");

Coutty
30-08-2009, 09:42
Для отображения воспользоваться рекурсией (надеюсь, правильно алгоритм составил):

запрос_элементов_уровня(х) // изначально x=0, но при рекурсивном вызове будет увеличиваться
{ // начало функции
запросить_строки(x);
цикл_по_всем_выданным_результатам
{
если_уровень_не_самый_нижний // ведь метка в таблице будет?
{
вывести_текущую_строку_с_отступом(x); // и соответствующим JavaScript'ом
запрос_элементов_уровня(x+1);
}
иначе // уровень нижний
{
вывести_ссылку_с_отступом(x); // без JS уже
return;
}
}
} // конец функции

Разве в интернете нет готовых функций?


Но, быть может, использовать XML+XSLT? Думается мне, что мороки будет меньше.




© OSzone.net 2001-2012