|
|
|
|
|
для: Assessor
(29.09.2008 в 07:50)
| | так тоже можно. Три строки изменить.
<?php
require_once('dbconfig.php');
function tab($s) { return "\r\n".str_repeat(' ', 2*count($s)); }
function drop($x,$s)
{
for($v = ''; !empty($s) && $x > $s[$t = count($s)-1]; $v .= tab($s)."</ul></li>")
unset($s[$t]);
return $v;
}
$sql = "SELECT * FROM dirtree ORDER BY lb ";
$res=mysql_query($sql) or exit("Error in $sql " . mysql_error());
for(; $row = mysql_fetch_assoc($res); )
{
echo drop($lb = intval($row['lb']), &$s);
echo tab($s)."<li>". htmlspecialchars($row['name']);
if($lb+1 < ($rb=intval($row['rb'])))
{
echo tab($s)."<ul>";
$s[] = $rb;
} else echo "</li>";
}
echo drop($s[0]+1,&$s);
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(28.09.2008 в 20:01)
| | Мой гибрид из Nested Sets и списков смежности, строит многоуровневое выпадающее меню.
На выходе получается примерно такой код
<ul>
<li>Тест1
<ul>
<li>Тест1.1
<ul>
<li>Тест1.1.1</li>
</ul>
</li>
<li>Тест1.2
</li>
</ul>
</li>
<li>Тест2
</li>
</ul> | |
|
|
|
|
|
|
|
для: Trianon
(28.09.2008 в 19:12)
| | Набросал черновик, который выводит нечто напоминающее то, что строит word.
<?php
require_once('dbconfig.php');
function tab($s) { return "\r\n".str_repeat(' ', 2*count($s)); }
function drop($x,$s)
{
for($v = ''; !empty($s) && $x > $s[$t = count($s)-1]; $v .= tab($s)."</ul>")
unset($s[$t]);
return $v;
}
$sql = "SELECT * FROM dirtree ORDER BY lb ";
$res=mysql_query($sql) or exit("Error in $sql " . mysql_error());
for(; $row = mysql_fetch_assoc($res); )
{
echo drop($lb = intval($row['lb']), &$s);
echo tab($s)."<li>". htmlspecialchars($row['name']). "</li>";
if($lb+1 < ($rb=intval($row['rb'])))
{
echo tab($s)."<ul>";
$s[] = $rb;
}
}
echo drop($s[0]+1,&$s);
?>
|
PS1. В примере таблица с полями name, lb, rb
lb и rb - соответственно левая и правая границы поддерева. Вообще-то никакие другие ключи для вывода NESTED SETS не требуются.
PS2. tab() - чисто для красоты вывода. Ничего, кроме пробелов, она не вычисляет. | |
|
|
|
|
|
|
|
для: Assessor
(28.09.2008 в 18:08)
| | А как эти самые <li> и <ul> должны расставляться?
Я тут попробовал набросать скрипт вывода списка, но понял, что расстановка самих тегов для меня - темный лес.
Пример бы. Аргументированный. | |
|
|
|
|
|
|
|
для: mihdan
(28.09.2008 в 14:41)
| | но... вы сами смотрели класс который работает с NESTED SETS деревьями? и понимаете что я делаю в коде? думаете, я вот так взял и написал, не пошарив при этом инет? вы мне пальцем ткните, а то я уже чувствую себя ущербным, не видя очевидные вещи | |
|
|
|
|
|
|
|
для: Assessor
(28.09.2008 в 14:29)
| | Вы статью прочтите, посмотрите ссылки внизу ее - все есть только читать нужно.
Загляните сюда | |
|
|
|
|
|
|
|
для: mihdan
(28.09.2008 в 14:22)
| | и? может я не понимаю, тогда ткните мне строчку где написано, как правильно расставить тэги списка... как обойти дерево, как удалить ветку, как переместить я знаю. | |
|
|
|
|
|
|
|
для: Assessor
(28.09.2008 в 13:56)
| | [поправлено модератором] | |
|
|
|
|
|
|
|
для: Trianon
(28.09.2008 в 14:12)
| | Я с этим и не спорю... Я ж говорю, не могу построить валидный спискок "<ul>" одним запросом.... | |
|
|
|
|
|
|
|
для: Assessor
(28.09.2008 в 13:56)
| | Вообще-то метод NESTED SETS ориентирован в первую очередь на то, чтобы выборку дерева (в порядке обхода в глубину) можно было делать одним единственным SQL-запросом. | |
|
|
|
|