Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Оптимизация

Сообщения:  [1-10]   [11-11] 

 
 автор: Trianon   (29.09.2008 в 10:40)   письмо автору
 
   для: 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+< ($rb=intval($row['rb'])))
    {
        echo 
tab($s)."<ul>";
        
$s[] = $rb;
    } else echo  
"</li>";
}
echo 
drop($s[0]+1,&$s);

?>

  Ответить  
 
 автор: Assessor   (29.09.2008 в 07:50)   письмо автору
 
   для: 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 в 20:01)   письмо автору
 
   для: 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+< ($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() - чисто для красоты вывода. Ничего, кроме пробелов, она не вычисляет.

  Ответить  
 
 автор: Trianon   (28.09.2008 в 19:12)   письмо автору
 
   для: Assessor   (28.09.2008 в 18:08)
 

А как эти самые <li> и <ul> должны расставляться?
Я тут попробовал набросать скрипт вывода списка, но понял, что расстановка самих тегов для меня - темный лес.
Пример бы. Аргументированный.

  Ответить  
 
 автор: Assessor   (28.09.2008 в 18:08)   письмо автору
 
   для: mihdan   (28.09.2008 в 14:41)
 

но... вы сами смотрели класс который работает с NESTED SETS деревьями? и понимаете что я делаю в коде? думаете, я вот так взял и написал, не пошарив при этом инет? вы мне пальцем ткните, а то я уже чувствую себя ущербным, не видя очевидные вещи

  Ответить  
 
 автор: mihdan   (28.09.2008 в 14:41)   письмо автору
 
   для: Assessor   (28.09.2008 в 14:29)
 

Вы статью прочтите, посмотрите ссылки внизу ее - все есть только читать нужно.
Загляните сюда

  Ответить  
 
 автор: Assessor   (28.09.2008 в 14:29)   письмо автору
 
   для: mihdan   (28.09.2008 в 14:22)
 

и? может я не понимаю, тогда ткните мне строчку где написано, как правильно расставить тэги списка... как обойти дерево, как удалить ветку, как переместить я знаю.

  Ответить  
 
 автор: mihdan   (28.09.2008 в 14:22)   письмо автору
 
   для: Assessor   (28.09.2008 в 13:56)
 

[поправлено модератором]

  Ответить  
 
 автор: Assessor   (28.09.2008 в 14:17)   письмо автору
 
   для: Trianon   (28.09.2008 в 14:12)
 

Я с этим и не спорю... Я ж говорю, не могу построить валидный спискок "<ul>" одним запросом....

  Ответить  
 
 автор: Trianon   (28.09.2008 в 14:12)   письмо автору
 
   для: Assessor   (28.09.2008 в 13:56)
 

Вообще-то метод NESTED SETS ориентирован в первую очередь на то, чтобы выборку дерева (в порядке обхода в глубину) можно было делать одним единственным SQL-запросом.

  Ответить  

Сообщения:  [1-10]   [11-11] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования