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

Форум MySQL

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

 

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

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

тема: Как сделать навигацию по бесконечно вложенному каталогу?
 
 автор: tAleks   (14.11.2006 в 13:54)   письмо автору
 
 

Есть каталог изображений, привязаный к базе данных...
Структура таблицы каталогов:

-- 
-- Структура таблицы `pict_groups`
-- 

CREATE TABLE `pict_groups` (
  `id_group` int(11) NOT NULL auto_increment,
  `code_group` int(11) default NULL,
  `name` tinytext,
  `description` tinytext,
  `new` enum('y','n') default 'n',
  `pos` int(11) default NULL,
  `showhide` enum('show','hide') default 'hide',
  `code_parent` int(11) default NULL,
  PRIMARY KEY  (`id_group`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='Группы изображений' AUTO_INCREMENT=9 ;


Как реализовать навигацию, чтобы было примерно как хождение по каталогам в проводнике или в FAR?

   
 
 автор: tAleks   (14.11.2006 в 19:07)   письмо автору
 
   для: tAleks   (14.11.2006 в 13:54)
 

Никто не знает?

   
 
 автор: Trianon   (14.11.2006 в 19:25)   письмо автору
 
   для: tAleks   (14.11.2006 в 13:54)
 

Реализовать две функции.
Одна отображает дерево. Как правило, рекурсивно.
Другая отображает список элементов выбранного узла. Обычным циклом. Или двумя.
Если трудности с первой - советую глянуть поиском "Каталог продукции". Там было несколько реализаций для многоуровневых каталогов.
Если трудности со второй... м.. тогда приниматься навигацию по многоуровневому каталогу рановато.

   
 
 автор: tAleks   (14.11.2006 в 20:31)   письмо автору
 
   для: Trianon   (14.11.2006 в 19:25)
 

C выводм содержимого узла проблем нет...
Вот с навигацией, разобраться не могу...
Хочу чтобы при хождении по каталогу рисовалась трока типа:

Главное меню/Фото/Семинары/Сосновый бор

Чтобы можно было кликнуть например по Фото, и перейти в соответствующий вышеуказанный узел...

буду копаться в поиске...

Если встретите такую тему, будьте добры скиньте ссылку... Буду благодарен...

   
 
 автор: tAleks   (14.11.2006 в 21:33)   письмо автору
 
   для: Trianon   (14.11.2006 в 19:25)
 

Заделал вот такю функцию рекурсивного подьема по дереву:

function menu($code_group)
{
    // Если код родителя 0 - возвращаем результат
    if($code_group != 0)
    {    
        // Запрос имени группы и родителя
        $query = mysql_query("SELECT name, code_parent FROM pict_groups WHERE code_group = $code_group LIMIT 1") or die('Ошибка 1 '.mysql_error());
        if(mysql_num_rows($query) > 0) $g = mysql_fetch_assoc($query);
        
        // Делаем строку
        return menu($g['code_parent']).'/<a href="'.$_SERVER['PHP_SELF'].'?code_group='.$code_group.'">'.$g['name'].'</a>';
    }
}


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

   
 
 автор: Trianon   (14.11.2006 в 21:45)   письмо автору
 
   для: tAleks   (14.11.2006 в 21:33)
 

Можно и так...

Насколько я знаю, есть три подхода к постронеию дерева (в меньшей степени) и к получению пути до элемента (в большей) .
1. Как у Вас. Запрос к БД на каждом шагу.
2. Один запрос, читающий всю структуру дерева (хотя бы поля id, parent_id) в массив PHP.
После чего - построение дерева или пути путем обхода этого массива.
3. Запрос длинной цепочки .... table as T15 LEFT JOIN table as T16 ON T15.parent_id=T16.id ....

   
 
 автор: Loki   (15.11.2006 в 12:22)   письмо автору
 
   для: Trianon   (14.11.2006 в 21:45)
 

4. еще есть nested sets, но это штука специфическая.

   
 
 автор: Trianon   (15.11.2006 в 12:51)   письмо автору
 
   для: Loki   (15.11.2006 в 12:22)
 

Пардонте-с, я отвечал в рамках поставленной задачи. А там черным по серому было изображено {Adjacency Lists}

   
 
 автор: Loki   (16.11.2006 в 15:51)   письмо автору
 
   для: Trianon   (15.11.2006 в 12:51)
 

согласен - условия я не читал:)

   
 
 автор: tAleks   (15.11.2006 в 15:33)   письмо автору
 
   для: Loki   (15.11.2006 в 12:22)
 

Что такое nested sets?

   
 
 автор: tAleks   (15.11.2006 в 15:33)   письмо автору
 
   для: Trianon   (14.11.2006 в 21:45)
 

>Можно и так...
>
>Насколько я знаю, есть три подхода к постронеию дерева (в меньшей степени) и к получению пути до элемента (в большей) .
>1. Как у Вас. Запрос к БД на каждом шагу.
>2. Один запрос, читающий всю структуру дерева (хотя бы поля id, parent_id) в массив PHP.

А как одним запросом читать всю структуруд дерева? Это же надоз знать хотя бы первичные ключи каждого узла? Или вообещ читается все, и потом в PHP выбирается нужное?

>После чего - построение дерева или пути путем обхода этого массива.
>3. Запрос длинной цепочки .... table as T15 LEFT JOIN table as T16 ON T15.parent_id=T16.id ....

Это я вообще не понял, можно чуть подробнее?

   
 
 автор: Trianon   (15.11.2006 в 15:37)   письмо автору
 
   для: tAleks   (15.11.2006 в 15:33)
 

>Или вообещ читается все,
Строки - все[, относящиеся к этому дереву]. Поля - достаточно id и parent_id.
>и потом в PHP выбирается нужное?
именно.

   
 
 автор: Niko2   (06.12.2006 в 00:58)   письмо автору
 
   для: tAleks   (15.11.2006 в 15:33)
 

А какой путь, по вашему, и из опыта народа предпочтительней?
Если в дереве предвидится от одной до тыщ пяти элементов?

   
Rambler's Top100
вверх

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