|
|
|
| заголовок получился длинный, не знал как лучше написать
имеется рекурсивная функция getListing(), которой передаётся массив разделов из БД в таком формате
$arr[$row['parent']][] = array('id'=>$row['id'], 'parent' => $row['parent'], 'name' => $row['name']);
|
<?php
public function getListing($data, $parent, $lvl)
{
static $out = '';
if (!isset($data[$parent])) return;
$indent = str_repeat(' ', $lvl);
$out .= $indent."<ul>\n";
foreach($data[$parent] as $v)
{
$out .= $indent.' <li><a href="'.$v['id'].'">'.$v['name']."</a></li>\n";
$this->getListing($model, $v['id'], $lvl+1);
}
$out .= $indent."</ul>\n";
return $out;
}
?>
|
вызываю так
echo getListing( $data_category, 0, 0) ;
|
Разделы выводится ввиде списков ul и li.
Если в качестве второго аргумента в функции передать parent_id значение 0, выведится все ветки, если передать id родителя то выведиться только ветка принадлежащая ей, и её внутренним подразделам. Но вот как сделать чтобы список был из всех родителей первого уровня и если был передан аргумент допустим родителя id 2 то только эта ветка и её внутренние ветки вывелись?
Ниже пример всех веток:
Cars
-- chevy
-- ford
---- mustang
---- ranger
-- toyota
Food
-- fruit
---- apples
---- oranges
------- sunny
------- green
-- pasta
-- veges
Food
Acura
BMW
|
так вот, если мы выбрали "Cars", то нужно получить такую ветку
Cars
-- chevy
-- ford
---- mustang
---- ranger
-- toyota
Food
Acura
BMW
|
| |
|
|
|
|
|
|
|
для: web777
(29.04.2010 в 11:52)
| | Здесь эта задача однажды была решена. Непрофессионально, конечно. К внедрению не рекомендуется.
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=62917&page=2 | |
|
|
|
|
|
|
|
для: DJ Paltus
(29.04.2010 в 11:58)
| | можно пример этой темы, или хотя бы запрос по которому можно найти?
да и почему не профессионально, в чём данный вариант плох?
ведь нужно выделить только нужную ветку а не всю карту разделов. Тут можно конечно сделать вывод только конкретной ветки и все её принадлежащие, но что если вдруг пользователь захочет перейти в другой раздел например на "Food" а его ведь уже не будет т.к. он находится в корне а не в ветке "Cars"
вообщем нужно вывести всех родителей первого уровня, и все ветки только определённого выбранного родителя | |
|
|
|
|
|
|
|
для: web777
(29.04.2010 в 12:06)
| | вообщем нужно вывести всех родителей первого уровня, и все ветки только определённого выбранного родителя
- первый запрс выбирает всех родителей.
- а) второй (и более в зависимости от глубины вложенности) выбирает нужную ветку.
б) второй (сложный запрос) выбирает дерево | |
|
|
|
|
|
|
|
для: DJ Paltus
(29.04.2010 в 11:58)
| | спасибо за ссылку, только появилась, сейчас изучу | |
|
|
|
|
|
|
|
для: DJ Paltus
(29.04.2010 в 11:58)
| | ужас, то что по ссылке предложено DJ Paltus слишком ресурсо-тяжёлый вариант, он не подходит. В моём варианте, только один запрос который собирает всю таблицу и далее с ним работаю. Сейчас посмотрю по последней ссылке предложенный вариант | |
|
|
|