vagono
@vagono

Как вывести категории 3-4 уровня в верхнем меню?

Подскажите, как вывести все под категории в верхнем меню?
Будет не больше 4х уровней категорий.
Opencart 3.0.3.2 (Русская сборка)

Искал на форумах , но там информация двухлетней давности и старше
По модулям нашел один подходящий, но не пойму как установить

Вот
пример
5a756f7555d46-resize-710x380.jpg
  • Вопрос задан
  • 534 просмотра
Пригласить эксперта
Ответы на вопрос 2
lazuren
@lazuren
Нужно переписывать контроллер menu.php так как там предусмотрено только 2 уровня.
Ответ написан
@anvanio
пользователь lazuren представил неверное решение. Таким образом, в его логике, при выведении через twig суб-категорий, они каждый раз повторяются первые несколько. Правильный код:
$categories = $this->model_catalog_category->getCategories(0);

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

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

            foreach ($children as $child) {

                // Level 3
                $grandchildren_data = array();

                $grandchildren = $this->model_catalog_category->getCategories($child['category_id']);

                foreach ($grandchildren as $grandchild) {

                    $grandchild_filter_data = array(
                        'filter_category_id'  => $grandchild['category_id'],
                        'filter_sub_category' => true
                    );

                    $grandchildren_data[] = array(
                        'name'  => $grandchild['name'],
                        'href'  => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id'] . '_' . $grandchild['category_id']),
                    );
                }


                $filter_data = array(
                    'filter_category_id'  => $child['category_id'],
                    'filter_sub_category' => true
                );

                $children_data[] = array(
                    'name'  => $child['name'],
                    'href'  => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id']),
                    'children' => $grandchildren_data,
                );
            }

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

в шаблоне:
{% if categories %} 
<ul>
{% for category in categories %}
{% if category.children %}
<li class="dropdown"><a href="{{ category.href }}">{{ category.name }}</a><ul class="sub_level2">
{% for children in category.children|batch(category.children|length / category.column|round(1, 'ceil')) %}
{% for child in children %}
{% if child.children %}
<li><a href="{{ child.href }}">{{ child.name }}</a>
<ul class="sub_level3">
{% for children in child.children %}
<li><a href="{{ children.href }}">{{ children.name }}</a></li>
{% endfor %}
</ul>
</li>
{% else %}
<li><a href="{{ child.href }}">{{ child.name }}</a></li>
{% endif %}
{% endfor %}
</ul>
</li>
{% endfor %}
{% else %}
<li><a href="{{ category.href }}">{{ category.name }}</a></li>
{% endif %}
{% endfor %}
</ul>
{% endif %}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы