Вывод всего списка подкатегорий в категориях

Тема в разделе "OpenCart", создана пользователем ingenerks, 7 янв 2015.

  1. ingenerks

    ingenerks

    Регистрация:
    25 окт 2012
    Сообщения:
    254
    Симпатии:
    79
    Хочу вывести список всех подкатегорий. Есть модуль, https://opencartforum.com/files/file/924-стена-категорий-в-категориях/ но не хочется ставить полноценное дополнение.
    Нужно когда находишся в категории, например компьютера, что бы вывелись все подкатегории этой категории.
    В контроллере category.php прописал
    $this->data['subcategories'] = array();
    $results = $this->model_catalog_category->getCategories($category_info['parent_id']);
    foreach ($results as $result) {
    $data = array(
    'filter_category_id' => $result['category_id'],
    'filter_sub_category' => true
    );
    $product_total = $this->model_catalog_product->getTotalProducts($data);
    $this->data['subcategories'][] = array(
    'name' => $result['name'] . ' (' . $product_total . ')',
    'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url)
    );
    }
    в tpl вынес
    <?php foreach ($subcategories as $category) { ?>
    <li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a></li>
    <?php } ?>
    но вываливаются все категории этого же уровня, а нужно все под категории родителя. Может кто то уже делал подобное?
     
  2. Дмитрич

    Дмитрич

    Регистрация:
    10 апр 2014
    Сообщения:
    182
    Симпатии:
    23
  3. ingenerks

    ingenerks

    Регистрация:
    25 окт 2012
    Сообщения:
    254
    Симпатии:
    79
    Мне не нужно выносить в модуле категории, а именно как в этом модуле https://opencartforum.com/files/file/924-стена-категорий-в-категориях/ это не для меню категорий, а именно для самих категорий на странице.

    Необходимо вывести список подкатегорий родительской категории.
    Например если мы находимся в категории Компьютера:
    Компьютера
    -Десктопы
    -Неттопы
    -Моноблоки
     
  4. Дмитрич

    Дмитрич

    Регистрация:
    10 апр 2014
    Сообщения:
    182
    Симпатии:
    23
    Я не знаю как Вам исправить тот модуль, потому предложил альтернативное решение. Там, вроде, при выводе в определённой категории, отображаются все её подкатегории.
    Вот описание:
    Это модуль является модификацией встроенного в OpenCart модуля категорий с той лишь разницей, что модуль предназначен для отображения подкатегорий отдельным независимым блоком. Если модуль будет установлен в категориях, то он будет отображать именно те подкатегории, которые относятся к данной родительской категории.

    Заходим в настройки модуля и указываем расположение модуля.

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

    Модуль имеет две версии, вторая версия имеет отличие от первой в том, что заголовок модуля будет не стандартным, например, «Категории», а будет принимать название той категории, которой принадлежат подкатегории.
     
  5. ingenerks

    ingenerks

    Регистрация:
    25 окт 2012
    Сообщения:
    254
    Симпатии:
    79
    Опять о том же, мы о разном говорим. Я все пересмотрел на офиц сайте опенкарт. Я уже и для примера скинул модуль. Я не хочу еще отдельно ставить дополнение. А нужно просто допилить категории, что бы выносилось вот так http://prntscr.com/5pqclk
     
  6. Grek

    Grek

    Регистрация:
    18 янв 2013
    Сообщения:
    172
    Симпатии:
    18
    Решил проблему. У вас не получается, потому что вы обращаетесь не к тому id категорий (к родительскому, а нужно к дочерним). Вот как я решил - прописал:
    category.php (контрол)
    Перед private function getStickers инициализируем функцию формирований подкатегорий:
    PHP:
    public function getSubcategories($category_id) {
                 
    $subcategories $this->model_catalog_category->getCategories($category_id);
                 for (
    $i 0$i count($subcategories); $i++) {
                     
    $subcategories[$i]['href'] = $this->url->link('product/category''path=' $this->request->get['path'] . '_' $subcategories[$i]['category_id']);     //Добавляем в массив подкатегории ссылку
                 
    }
                 return 
    $subcategories;
            }
    Добавляем 'subcategories'=>$this->getSubcategories($result['category_id'] в массив $this->data['categories'][], то есть:
    PHP:
    $this->data['categories'][] = array(
                        
    'name'  => $result['name'] . ($this->config->get('config_product_count') ? ' (' $product_total ')' ''),
                        
    'count' => $product_total,
                         
    'subcategories'=>$this->getSubcategories($result['category_id']),      //Обращаемся к методу модели получения подкатегорий с id родительской категории
                        
    'href'  => $this->url->link('product/category''path=' $this->request->get['path'] . '_' $result['category_id'] . $url)
                    );
    В шаблоне category.tpl выводим:
    Код:
    <div class="box-product box-subcat">
                <ul class="row"><?php $i=0;?>
                    <?php foreach ($categories as $category) { $i++; ?>
                    <?php
                            if ($i%3==1) {
                                $a='first-in-line';
                            }
                            elseif ($i%3==0) {
                                $a='last-in-line';
                            }
                            else {
                                $a='';
                            }
                        ?>
                    <li class="cat-height  span2">
                        <?php if ($category['thumb']) { ?>
                        <div class="image"><a href="<?php echo $category['href']; ?>"><img src="<?php echo $category['thumb']; ?>" alt="<?php echo $category['name']; ?>" /></a></div>
                        <?php } ?>
                        <div class="name subcatname"><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a></div>
                                            <ul>
                                                <?php foreach($category['subcategories'] as $subcategory) { ?>
                                                <li><a href="<?php echo $subcategory['href']; ?>"><?php echo $subcategory['name']; ?></a></li>
                                                <?php } ?>
                                            </ul>
                    </li>
                    <?php } ?>
                </ul>
            </div>

    И все, задача решена. Стоило покопаться несколько часов в коде, поиски решений по форумам и разных модулей/хаков ни к чему не привели.
     
  7. goshavis

    goshavis

    Регистрация:
    18 май 2015
    Сообщения:
    3
    Симпатии:
    0

    Извеняюсь, но я не совсем понял куда нужно вставлять последний блок? У меня ОпенКарт 2, подойдет ли данное решение?? Можно поподробней?
     
  8. Joni-Jo

    Joni-Jo

    Регистрация:
    4 апр 2016
    Сообщения:
    6
    Симпатии:
    0
    Судя по коду:
    Код:
    $this->data['categories']
    вместо $data['categories']
    Это для старой версии!

    Ищю что-то подобное, хотя не совсем понял что тут за код :Smile:
    Мне нужно что-бы в под категориях показывались соседние категории (или проще говоря подкатегории родителской категории - но нечего не могу найти для 2й версии :()