Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 29 мар 2024, 18:08

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Дерево категорий
СообщениеДобавлено: 31 авг 2012, 10:19 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Доброго времени суток.
Есть стандартная схема хранения категорий:
Код:
id | parent_id

Помоги те разобраться, как построить дерево категорий.
Я могу сделать что то вроде:
Код:
    <form method="post" action="">
        <select name="parentId">
            <?php foreach($cats_p as $cat_p): ?>
                <option value="<?php echo $cat_p['name']; ?>" selected="selected">
                    <?php
                    //if ( 0 == $cat_p['parent'] ) {
                    echo $cat_p['name'].'</ br>';
                        foreach($cats_c as $cat_c):
                            if ( $cat_p['term_id'] == $cat_c['parent'] ) { ?>
                                <option value="" selected="selected"><?php echo '-'.$cat_c['name'].'</ br>';?></option>
                            <?php }
                        endforeach;
                    //}
                    ?>
                </option>
            <?php endforeach; ?>
        </select>
        <input type="submit" value="Создать" name="btnsubmit">
    </form>

В $cats_p попадают только все у кого parent=0, в cats_с абсолютно все.
Но это для родительских категорий и их первых подкатегорий, а как быть с 2,3..10 вложением?
..не могу построить логику..расчитываю на вашу помощь..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дерево категорий
СообщениеДобавлено: 31 авг 2012, 12:46 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Поищите по форуму. Там где то моя (и не только) писанина была по этом поводу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дерево категорий
СообщениеДобавлено: 31 авг 2012, 14:43 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
У вас там тоже используется всего два foreach.
То есть отобразятся только родители и их первые потомки, а что если у потомков есть свои потомки?
..предполагаю нужна рекурсия, но не знаю как это реализовать..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дерево категорий
СообщениеДобавлено: 31 авг 2012, 16:16 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
ну вот же http://www.tommylacroix.com/2008/09/10/php-design-pattern-building-a-tree


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дерево категорий
СообщениеДобавлено: 02 сен 2012, 01:29 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Премного благодарен за ссылку, то что нужно.
Не могу адаптировать под себя, так как не совсем прочувствовал код.
Понимаю что загвоздка, у меня, в этом куске:
Код:
function mapTree($dataset) {
   $tree = array();
   foreach ($dataset as $id=>&$node) {
      if ($node['parent'] === null) { // root node
         $tree[$id] = &$node;
      } else { // sub node
         if (!isset($dataset[$node['parent']]['children'])) $dataset[$node['parent']]['childs'] = array();
         $dataset[$node['parent']]['children'][$id] = &$node;
      }
   }

   return $tree;
}

А именно в условии else, не понимаю что тут происходит, а точнее от куда берутся ['children'] и ['childs']?
И еще, в данном контексте ID это позиция строки в общем массиве, но у меня ID моих категорий расходится с позицией их в выборочном массиве, поэтому происходит не корректное присваивание.
Как можно с данным вопросом разобраться? Куда копать?
..задача для меня пока не тривиальна..
Там есть другая функция mapTree, которая первая, kohana на нее ругается благим матом:
Цитата:
ErrorException [ Fatal Error ]: Maximum function nesting level of '100' reached, aborting!

В этой части кода:
Код:
$node['children'] = mapTree($dataset, $id, $levels+1);

В общем я в тупике рассчитываю на помощь...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дерево категорий
СообщениеДобавлено: 08 сен 2012, 12:36 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Возможно не хотели отвечать на глупые вопросы, такие как:
borodatych писал(а):
А именно в условии else, не понимаю что тут происходит, а точнее от куда берутся ['children'] и ['childs']?

С этим я разобрался, но по прежнему остается нерешенный вопрос:
borodatych писал(а):
И еще, в данном контексте ID это позиция строки в общем массиве, но у меня ID моих категорий расходится с позицией их в выборочном массиве, поэтому происходит не корректное присваивание.

..я уигрался уже всяким параметрами, без результатно..
Пробовал убрать условия выборки, что бы попробовать получить id позиции элемента равным с его настоящим id.
Все бы нечего но посреди запроса попросту нет какой-нибудь записи, возможно сам удалил.
То есть записи идут catid=1, catid=2, catid=4, и в массиве они имеют место id=0, id=1, id=3.
Да и присваивание идет не к catid, а к id позиции, т.е. если у потомка parent=1, то он посути наследник элемента id=0 у которого есть колонка catid=1, но идет присвоение к элементу id=1, у которого catid=2.
..надеюсь получилось описать суть проблемы..
И если для вас это как два пальца.. об асфальт, будьте так любезны укажите на ошибки/ткните носом/пните по направлению, я просто хочу уже добить этот пробел.
Возможно еще что то нужно предоставить для разбора полетов? Говорите выложу/предоставлю.
..задача для меня пока не тривиальна..
С этой байдой даже не разбирался, если кто сталкивался буду рад если поделитесь, возможно сам позже сгуглю, но пока не до этого.
borodatych писал(а):
Там есть другая функция mapTree, которая первая, kohana на нее ругается благим матом:
Цитата:
ErrorException [ Fatal Error ]: Maximum function nesting level of '100' reached, aborting!

В этой части кода:
Код:
$node['children'] = mapTree($dataset, $id, $levels+1);

В общем я в тупике рассчитываю на помощь...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дерево категорий
СообщениеДобавлено: 08 сен 2012, 18:08 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Дамп таблицы в которой это дело лежит - в студию :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дерево категорий
СообщениеДобавлено: 09 сен 2012, 19:53 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Доброго времени суток.
Благодарю за отзывчивость. Дамп прикрепил.
С уважением, Роман


Вложения:
wp_term_taxonomy.zip [2.01 КБ]
Скачиваний: 325
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дерево категорий
СообщениеДобавлено: 18 сен 2012, 02:47 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
..дико извиняюсь, но я все же апну..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дерево категорий
СообщениеДобавлено: 09 окт 2012, 21:21 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Sergey, есть результаты? Получилось? Намекните в какую сторону двигаться? Может рекурсия? Или все же этот вариант как то можно заставить работать?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group