{% else-1 %}
Обновить | Подписаться | Поднять тему
Чтобы выполнить действие авторизируйтесь или пройдите регистрацию на сайте.
1.
wapoleg * 2.59
[автор] (13 окт 2014, 16:46) [0/0] [0] [отв] [спам] [под] +1 | -1

Есть значит дерево категорий в бд.
id | pid | name
цель получить полный путь до текущей папки не зависимо от уровня вложенности.
т.е.
от текущей 1234 по pid получить все предыдущие id до pid=0 и соответственно вывести все это.
пробовал рекурсию, но как-то криво получается.
примеров тоже не нашел в гугле, в общем помощь нужна. подскажите реализацию, или можно ссылку на пример, разберусь.


Изм. 2 раз. / Посл. изм.
wapoleg * 2.59
(14 окт 2014, 18:57)
2.
wapoleg * 2.59
[автор] (14 окт 2014, 18:58) [0/0] [0] [отв] [спам] [под] +1 | -1

На говнокодил с рекурсией, может кому понадобиться.
[code]
function navig($id, $current=array()){
$arr=$current;
$r = 'подключение к бд'; // Получение pid и name из БД, по текущему значению $id
$arr[]= array('url'=>$id, 'name'=>$r['name']);
if($r['pid']!=0):
$arr = navig($r['pid'], $arr);
endif;
if($current!=0):
asort($arr);
return $arr;
endif;
}

# Собственно запускаем
$navig = navig('Текущий ID категории');
# Далее кэшируем, и выводим в цикле полный путь к текущей папке.
[/code]
если есть иные варианты, предлагайте)


Изм. 1 раз. / Посл. изм.
wapoleg * 2.59
(14 окт 2014, 19:26)
3.
abler98 * 22.68
(14 окт 2014, 19:14) [0/0] [0] [отв] [спам] [под] +1 | -1

Лучше сразу записывать путь при создании категории, просто чем "глубже" категория, тем больше запросов нужно для получения полного пути!

4. (14 окт 2014, 19:16) [0/0] [0] [отв] [спам] [под] +1 | -1

Ну есть такой вариант
/* Построение дерева */
function get_tree($dataset) {
$tree = array();

foreach ($dataset as $id=>&$node) {
if (!$node['parent']){
$tree[$id] = &$node;
}else{
$dataset[$node['parent']]['childs'][$id] = &$node;
}
}

return $tree;
}

5.
wapoleg * 2.59
[автор] (14 окт 2014, 19:37) [0/0] [0] [отв] [спам] [под] +1 | -1

abler98, это да, но в моем случае, у меня сейчас уже больше 2к подкатегорий. Проще получить так и закешировать.
Миледи, там не совсем дерево, т.е. структура как у дерева, но для вапа ни к чему выбирать все значения из бд, вывожу их по pid=$id и так-же кэширую.
что-то вроде:
$id=isset($id)?$id:0;
$r = '...WHERE pid=$id';
Ну вот поэтому и нужно было так-же по текущему $id вывести полный путь, от 1234 до 0
В общем что хотел получил.


Изм. 1 раз. / Посл. изм.
wapoleg * 2.59
(14 окт 2014, 19:38)
  • 1 из 1
Чтобы писать сообщения авторизируйтесь или пройдите регистрацию на сайте.
Подписаны: 1
Скачать тему | Файлы темы | Фильтр сообщений