получить категорию третьего уровня в opencart

Я хочу foreach третий уровень в модуле категорий OpenCart, вот код, который генерирует только 2-уровневую категорию, пожалуйста, помогите и измените так, чтобы он генерировал третий уровень:

<ul id="menu">
    <?php foreach ($categories as $category) { ?>
    <li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a>
      <?php if ($category['children']) { ?>
        <?php for ($i = 0; $i < count($category['children']);) { ?>
        <ul>
          <?php $j = $i + ceil(count($category['children']) / $category['column']); ?>
          <?php for (; $i < $j; $i++) { ?>
          <?php if (isset($category['children'][$i])) { ?>
          <li><a href="<?php echo $category['children'][$i]['href']; ?>"><?php echo $category['children'][$i]['name']; ?></a></li>
          <?php } ?>
          <?php } ?>
        </ul>
        <?php } ?>
      <?php } ?>
    </li>
    <?php } ?>
  </ul>

person Community    schedule 25.10.2012    source источник


Ответы (5)


Вы можете попробовать это, это не элегантно, но должно работать:

    <ul id="menu">
    <?php foreach ($categories as $category) : 
        echo '<li><a href="'.$category['href'].'">'.$category['name'].'</a>';
        if (!empty($category['children'])) : 
            echo '<ul>';
            foreach ($category['children'] as $category_level2) :
                echo '<li><a href="'.$category_level2['href'].'">'.$category_level2['name'].'</a>';
                if (!empty($category_level2['children'])) :
                    echo '<ul>';
                    foreach ($category_level2['children'] as $category_level3) :
                        echo '<li><a href="'.$category_level3['href'].'">'.$category_level3['name'].'</a></li>';
                    endforeach;
                    echo '</ul>';
                endif;
                echo '</li>';
            endforeach;
            echo '</ul>';
        endif;
        echo '</li>';
    endforeach;
    echo '</ul>';
    ?>
person Nicolas Connault    schedule 25.10.2012
comment
Не за что :-) Меня это радует, так как я не проверял это, прежде чем вставить сюда! - person Nicolas Connault; 30.10.2012

Для этого сначала вам нужно отредактировать контроллер заголовка:

Перейдите в Каталог->контроллер->общий->header.php

Отредактируйте раздел, в котором создается переменная $categories. обновить по следующему скрипту:

$categories = $this->model_catalog_category->getCategories(0);

        foreach ($categories as $category) {
            if ($category['top']) {
                $children_data = array();



                $children = $this->model_catalog_category->getCategories($category['category_id']);

                foreach ($children as $child) {

                    $sec_children_data = array();
                    $sec_children = $this->model_catalog_category->getCategories($child['category_id']);

                    foreach ($sec_children as $sec_child) {
                        $sec_children_data[] = array(
                        'name'  => $sec_child['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),
                        'href'  => $this->url->link('product/category', 'path=' . $child['category_id'] . '_' . $sec_child['category_id'])  
                           );
                        }
                    $data = array(
                        'filter_category_id'  => $child['category_id'],
                        'filter_sub_category' => true
                    );

                    $product_total = $this->model_catalog_product->getTotalProducts($data);

                    $children_data[] = array(
                        'name'  => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),
                        'href'  => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id']), 'children' => $sec_children_data 
                    );                      
                }

                // Level 1
                $this->data['categories'][] = array(
                    'name'     => $category['name'],
                    'children' => $children_data,
                    'column'   => $category['column'] ? $category['column'] : 1,
                    'href'     => $this->url->link('product/category', 'path=' . $category['category_id'])
                );
            }
        }

Затем обновите файл представления для отображения категорий третьего уровня.

person Prasath Albert    schedule 25.10.2012
comment
Я хочу добавить css class в first-level ul, если у него есть меню третьего уровня. пожалуйста помоги - person ; 26.10.2012
comment
код nicholas нуждается в вашей модификации в первую очередь. отличная работа и спасибо - person Nojan; 28.02.2013

Предположим, что у вас уже есть административная сторона, тогда вам следует проверить, есть ли какие-либо категории ниже 2-го уровня. Если да, то сделайте for построение (или foreach) и отобразите их как 3-й уровень.

Вы создадите тройную <ul></ul> конструкцию. Он должен быть стилизован под CSS.

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

Дайте мне знать, если вы не получите его.

person Wojciech Rutkowski    schedule 25.10.2012

Сначала загрузите vqmod из здесь, а затем распакуйте его. Теперь папка vqmod хранится в корне вашего сайта. каталог. Затем перейдите в браузер, напишите URL своего сайта, затем «/vqmod/install» и нажмите Enter, после чего вы получите сообщение о том, что вы можете успешно установить vqmod на свой сайт. Теперь вы загружаете форму расширения здесь и извлекаете ее. и сохраните файл извлечения на своем сайте, укажите файл exm: menu3rdlevel-opencart-2_2\vqmod\xml/Menu3rdLevel.xml на вашем сайте, например: vqmod\xml/Menu3rdLevel.xml, другой файл с папкой «menu3rdlevel». Из папки расширения. "javascript" в папку вашего сайта "javescript", папку расширения "image" в папку сайта "image" папку расширения "stylsheet" в папку сайта "stylsheet". затем обновите свой сайт в браузере, теперь все в порядке.

NB: Перенесите только файл xml и другой файл с папкой.

person Faysal Mahmud    schedule 11.02.2016

Для редактирования меню третьего уровня внесите следующие изменения в файл контроллера header.php.

 foreach ($sec_children as $sec_child) {
                    $sec_children_data[] = array(
                        'name'  => $sec_child['name'] . ($this->config->get('config_product_count') ? '' : ''),
                        'href'  => $this->url->link('product/category', 'path=' . $child['category_id'] . '_' . $sec_child['category_id'])
                    );

                }

А также внесите следующие изменения в файл header.tpl.

?php if (isset($category['children'][$i]['level3'])) {  
          $level3menus = $category['children'][$i]['level3'];
          ?>
          <ul class="level3">
          <?php
                foreach( $level3menus as $level3menu) {
          ?>
                <li><a href="<?php echo $level3menu['href']; ?>" class=""><?php echo $level3menu['name'];?></a></li>
          <?php } ?>

Пожалуйста, обратитесь к моему руководству для пошагового объяснения и демонстрации.

http://www.pearlbells.co.uk/третьих-уровня-категории-меню-opencart/

person Liz Eipe C    schedule 16.12.2016