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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Бесконечно-вложенная навигация
 
 автор: Tema   (05.07.2006 в 14:55)   письмо автору
 
 

Есть таблица. Вида:
id_catalog id_parent name
1 0 !Разное
2 1 !Материалы
3 0 !Разное
4 3 Прочие товары
5 0 !Разное
6 5 Разное 1
7 0 !Разное
и т.д.
Как сделать вывод в виде вложенных списков?
Разное
...Материалы
...Прочие товары
...Разное1
....Что-то разное
Далее

   
 
 автор: cheops   (05.07.2006 в 16:35)   письмо автору
 
   для: Tema   (05.07.2006 в 14:55)
 

Возможно вас заинтересует тема по ссылке
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=17635
Т.е. понадобится что-то вроде
<?php 
  
function recurse($id_catalog,$intend
  { 
    
$result mysql_query("SELECT * FROM tbl WHERE id_parent = id_catalog"); 
    if(!
$result) exit("Ошибка при обращении к каталогу"); 
    if(
mysql_num_rows($result) > 0
    { 
      while(
$table mysql_fetch_array($result)) 
      { 
        echo 
str_repeat(".",$intend).$table['name']."<br>";
        
recurse($table['id_catalog'],$intend 5); 
      } 
    } 
  } 
  
recurse(0,0);
?>

   
 
 автор: Tema   (05.07.2006 в 17:11)   письмо автору
 
   для: cheops   (05.07.2006 в 16:35)
 

Ваша функция выводит так:
!Разное
.....!Материалы
!Разное
.....Прочие товары
!Разное
.....Разное 1
!Разное
.....РазноеПК
..........Картридж
!Разное
.....РазноеПК
и т.д.
Как бы точки преобразовать в <ul><li>?

   
 
 автор: cheops   (06.07.2006 в 00:08)   письмо автору
 
   для: Tema   (05.07.2006 в 17:11)
 

Для этого можно воспользоваться следующей модификацией
<?php 
  
function recurse($id_catalog,$intend
  { 
    
$result mysql_query("SELECT * FROM tbl WHERE id_parent = id_catalog"); 
    if(!
$result) exit("Ошибка при обращении к каталогу"); 
    if(
mysql_num_rows($result) > 0
    { 
      echo 
"<ul>";
      while(
$table mysql_fetch_array($result)) 
      { 
        echo <
li>$table['name']."</li>"
        
recurse($table['id_catalog'],$intend 5); 
      } 
      echo 
"</ul>";
    } 
  } 
  
recurse(0,0); 
?>

   
 
 автор: Tema   (06.07.2006 в 09:24)   письмо автору
 
   для: cheops   (06.07.2006 в 00:08)
 

Скажите, пожалуйста, как убрать повторения основных разделов?
Разное
...!Материалы
!Разное
...Прочие товары
!Разное
...Разное 1
!Разное
...РазноеПК
....Картридж
!Разное
...РазноеПК

   
 
 автор: cheops   (06.07.2006 в 11:38)   письмо автору
 
   для: Tema   (06.07.2006 в 09:24)
 

Хм... так вы из таблицы уберите эти повторы...

   
 
 автор: Tema   (06.07.2006 в 13:18)   письмо автору
 
   для: cheops   (06.07.2006 в 11:38)
 

Я не знаю как :(
Вот таким образом данные заносятся в таблицу:
$arr[0] - это "Разное/!Материалы/Еще что-то" и т.д.

<?php
$cats  
explode('/'$arr[0]);
           
$pid 0
           foreach(
$cats as $cat
           { 
             if(isset(
$tree[$pid][$cat])) 
                
$id array_search($cat$nodestrue); 
             else 
             { 
                 if(empty(
$cat)) continue;
                else {
                
$sql mysql_query("INSERT INTO catalog (id_parent, name) VALUES ('".$pid."', '".mysql_escape_string($cat)."')"); 
                 if(!
$sql) exit("SQL error in ".nl2br($sql)." : <br>".mysql_error()); 
                 
$id mysql_insert_id(); 
                 
$tree[$pid][$id] = $cat
                 
$tree[$id] = array(=> $pid);
                      }
             } 
             
$pid $id
           } 
?>

   
 
 автор: cheops   (06.07.2006 в 20:47)   письмо автору
 
   для: Tema   (06.07.2006 в 13:18)
 

Что находится в $arr[0] и откуда он берётся?

   
 
 автор: Tema   (06.07.2006 в 20:55)   письмо автору
 
   для: cheops   (06.07.2006 в 20:47)
 

$arr[0] это строка вида "!Разное/!Материалы", берется из csv файла.
В файле вот так:
!Разное/!Материалы
!Разное/!Материалы
!Разное/!Материалы/Еще что-то
!Разное/И т.д.
Канцелярия/И т.д.

   
 
 автор: Trianon   (06.07.2006 в 21:13)   письмо автору
 
   для: cheops   (06.07.2006 в 20:47)
 

ноги растут отсюда. http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=18535

   
 
 автор: Tema   (07.07.2006 в 20:18)   письмо автору
 
   для: Trianon   (06.07.2006 в 21:13)
 

Как сделать чтобы главные разделы заносились в одну таблицу, а их id в таблицу где будут остальные разделы соответственно?

   
Rambler's Top100
вверх

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