Как создать дерево категории?

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 26 марта 2015 в 10:54
Помогите создать дерево категории полученные из таблиц типов контента
Есть такой код
  1. <?php if ($items){ unset($items[1]); //dump($items); ?>
  2. <ul>
  3. <?php $last_level = 0;?>
  4.  
  5. <?php foreach($items as $id=>$item){ ?>
  6.  
  7. <?php
  8. if (!isset($item['ns_level'])) { $item['ns_level'] = 1; }
  9. $item['childs_count'] = ($item['ns_right'] - $item['ns_left']) > 1;
  10. ?>
  11.  
  12. <?php for ($i=0; $i<($last_level - $item['ns_level']); $i++) { ?></li></ul><?php } ?>
  13.  
  14. <?php if ($item['ns_level'] <= $last_level) { ?></li><?php } ?>
  15.  
  16. <li><a href="#"><?php html($item['title']); ?></a>
  17.  
  18. <?php if ($item['childs_count']) { ?><ul><?php } ?>
  19.  
  20. <?php $last_level = $item['ns_level']; ?>
  21.  
  22. <?php } ?>
  23.  
  24. <?php for ($i=0; $i<$last_level; $i++) { ?>
  25. </li></ul>
  26. <?php } ?>
  27.  
  28. <?php } ?>
Генерирует дерево категории, но каждая под-категория не под своей родительской категории, как мне грамотно сделать проверку на parent_id и выводить?
#2 26 марта 2015 в 11:11
Evanescence, у меня в первой ветке используется так
  1. <ul id="<?php echo $menu;?>" class="menu">
  2.  
  3. <?php foreach ($items as $key => $item):?>
  4.  
  5. <?php if ($item['NSLevel'] == $last_level):?></li><?php endif;?>
  6. <?php $tail = $last_level - $item['NSLevel'];?>
  7. <?php for ($i = 0; $i < $tail; $i++):?></li></ul></li><?php endfor;?>
  8. <?php if ($item['NSLevel'] > 1 && $item['NSLevel'] > $last_level):?><ul><?php endif;?>
  9.  
  10. <li<?php if ($menuid == $item['id'] || ($currentmenu['NSLeft'] > $item['NSLeft'] && $currentmenu['NSRight'] < $item['NSRight'])):?> class="selected"<?php endif;?>>
  11. <a href="<?php echo $item['link'];?>" target="<?php echo $item['target'];?>"<?php if ($menuid == $item['id']):?> class="selected"<?php endif;?> title="<?php echo htmlspecialchars($item['title']);?>">
  12. <span>
  13. <?php if ($item['iconurl']):?>
  14. <img src="/images/menuicons/<?php echo $item['iconurl'];?>" alt="<?php echo htmlspecialchars($item['title']);?>" /><?php endif;?>
  15. <?php echo htmlspecialchars($item['title']);?>
  16. </span>
  17. </a>
  18. <?php $last_level = $item['NSLevel'];?>
  19. <?php endforeach;?>
  20. <?php for ($i = 0; $i < $last_level; $i++):?></li><?php endfor;?>
  21. </ul>
может поможет.
#3 26 марта 2015 в 12:33
Loadырь, Спасибо, но проблема оказывается в массиве, так как первый и второй код выводить одинаковый результат, оказывается надо сортировать массив, что бы ключ каждой подкатегории была равна ID родительской...
Вообщем надо создавать функции, обрабатывать результаты запроса и т.д. думаю дело не стоить того😊придется бросить это дело.
#4 26 марта 2015 в 13:00

придется бросить это дело.

Evanescence
как раз это

дело не стоить того smile

Evanescence
Могу позже поковыряться, и более подробно ответить. Выложу очередную запись в блог и посмотрю.
#5 26 марта 2015 в 14:01

Могу позже поковыряться, и более подробно ответить. Выложу очередную запись в блог и посмотрю.

Loadырь
Спасибо :)
#6 28 марта 2015 в 23:18
Evanescence, Вы как получаете массив категорий?
Попробуйте так
  1. $items = cmsCore::getModel('content')->getSubCategoriesTree($ctype_name, $parent_id, false);
Ваш вариант вывода категорий выдаст такую картинку в дефолте скрин Страшно, но со стилями вы справитесь.
#7 29 марта 2015 в 00:09
Loadырь, Спасибо, работает, проблема была в том как я получаю категории из БД (я просто получал с помощью get('категория');
Теперь всё на своих местах :)
Тема закрыта!!!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.