Подкатегории 3 и 4-го уровня на странице Категории

Тема в разделе "Инструкции и FAQ", создана пользователем Ravilr, 1 дек 2020.

  1. Ravilr

    Ravilr Специалист

    Сообщения:
    3.879
    Симпатии:
    1.065
    2020-12-01_12-29-37.png


    Решение именно для списка подкатегорий, а не модуль Категорий который слева и не меню которое сверху. Просьба не путать.

    \catalog\controller\product\category.php

    вместо этого
    Код:
                $results = $this->model_catalog_category->getCategories($category_id);
    
                foreach ($results as $result) {
                    $filter_data = array(
                        'filter_category_id'  => $result['category_id'],
                        'filter_sub_category' => true
                    );
    
                    $data['categories'][] = array(
                        'name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
                        'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url)
                    );
                }
    Вставить это

    PHP:
            $categories_1 $this->model_catalog_category->getCategories($category_id);

            foreach (
    $categories_1 as $category_1) {
                
    $level_2_data = array();

                
    $categories_2 $this->model_catalog_category->getCategories($category_1['category_id']);

                foreach (
    $categories_2 as $category_2) {
                    
    $level_3_data = array();

                    
    $categories_3 $this->model_catalog_category->getCategories($category_2['category_id']);

                    foreach (
    $categories_3 as $category_3) {
                        
    $level_3_data[] = array(
                            
    'name' => $category_3['name'],
                            
    'href' => $this->url->link('product/category''path=' $category_1['category_id'] . '_' $category_2['category_id'] . '_' $category_3['category_id'])
                        );
                    }

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

                
    $data['categories'][] = array(
                    
    'name'     => $category_1['name'],
                    
    'child' => $level_2_data,
                    
    'href'     => $this->url->link('product/category''path=' $category_1['category_id'])
                );
            }

    в шаблоне \catalog\view\theme\default\template\product\category.twig

    вместо этого
    Код:
          {% if categories %}
          <h3>{{ text_refine }}</h3>
          {% if categories|length <= 5 %}
          <div class="row">
            <div class="col-sm-3">
              <ul>
                {% for category in categories %}
                <li><a href="{{ category.href }}">{{ category.name }}</a></li>
                {% endfor %}
              </ul>
            </div>
          </div>
          {% else %}
          <div class="row">{% for category in categories|batch((categories|length / 4)|round(1, 'ceil')) %}
            <div class="col-sm-3">
              <ul>
                {% for child in category %}
                <li><a href="{{ child.href }}">{{ child.name }}</a></li>
                {% endfor %}
              </ul>
            </div>
            {% endfor %}</div>
          <br />
          {% endif %}
          {% endif %}
    вставить это
    PHP:
          {% if categories %}
          <
    h3>{{ text_refine }}</h3>
          {% if 
    categories|length <= %}
          <
    div class="row">
            <
    div class="col-sm-3">
              <
    ul>
                {% for 
    category in categories %}
                <
    li><a href="{{ category.href }}">{{ category.name }}</a></li>
              <
    ul>
                {% for 
    child1 in category.child %}
                <
    li><a href="{{ child1.href }}">{{ child1.name }}</a></li>
              <
    ul>
                {% for 
    child2 in child1.child %}
                <
    li><a href="{{ child2.href }}">{{ child2.name }}</a></li>
                {% endfor %}
              </
    ul>
                {% endfor %}
              </
    ul>
                {% endfor %}
              </
    ul>
            </
    div>
          </
    div>
          {% else %}
          <
    div class="row">{% for category in categories|batch((categories|length 4)|round(1'ceil')) %}
            <
    div class="col-sm-3">
              <
    ul>
                {% for 
    child in category %}
                <
    li><a href="{{ child.href }}">{{ child.name }}</a></li>
              <
    ul>
                {% for 
    child1 in child.child %}
                <
    li><a href="{{ child1.href }}">{{ child1.name }}</a></li>
              <
    ul>
                {% for 
    child2 in child1.child %}
                <
    li><a href="{{ child2.href }}">{{ child2.name }}</a></li>
                {% endfor %}
              </
    ul>
                {% endfor %}
              </
    ul>
                {% endfor %}
              </
    ul>
            </
    div>
            {% endfor %}</
    div>
          <
    br />
          {% endif %}
          {% endif %}

    Решение конечно для OpenCart 3x. В решение не учитывается кол-во товара в подкатегориях. Для других версий и хотелки, сами :)
     
    RoS нравится это.