Помощь Вывод количества подкатегорий в категории

KoNnY

Постоялец
Регистрация
14 Дек 2014
Сообщения
64
Реакции
7
Добрый день!
Есть задача вывести в родительской категории ("Каталог") список ее категорий, у которых помимо изображения и названия еще и выводить количество категорий (не товаров!), которые уже они включают. Для наглядности задумки прилагаю скрин: Для просмотра ссылки Войди или Зарегистрируйся . Например, к разделу "Спальни" привязано 46 категорий, значит на странице Каталог напротив спален будет указано: 46 коллекций.
Пытался самостоятельно реализовать и в качестве примера брал контроллер модуля категории (catalog - controller - module - category.php), но при всё время выдает ошибку "Undefined index: children".

Подскажите, пожалуйста, решение данной задумки. Может кто сталкивался с подобной задачей. Спасибо.
 
В модели category.php есть getTotalCategoriesByCategoryId($parent_id = 0).
Если для примера (catalog - controller - module - category.php), можно вместо количества товаров заменить на кол. подкатегорий. Строчку:
Код:
$product_total = $this->model_catalog_product->getTotalProducts($data);
меняем на
Код:
$product_total = $this->model_catalog_category->getTotalCategoriesByCategoryId($child['category_id']);
 
Спасибо! Воспользовался Вашим советом, в контроллере категории добавил следующий код:
Код:
 $cat_total =  $this->model_catalog_category->getTotalCategoriesByCategoryId($parent_id = $result['category_id']);

Заменил строку:
PHP:
'name'  => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),
на:
PHP:
'name'  => $result['name'] ."<br />Всего коллекций: ". $cat_total,
тем самым убрав проверку на наличие чекбокса вывода количества товаров в настройках магазина.

Код пока что сырой, но направление верное. Как теперь добавить сюда проверку, чтобы не везде показывалось количество коллекций, а только на странице категории 1-го уровня (это и есть страница Каталог)? Там по структуре у последующих категорий есть свои категории, но не нужно уже отображать эту фразу.
 
Если правильно понял Вашу структуру категорий, то нужно подняться выше по структуре. Например код
Код:
            $this->data['categories'][] = array(
                'category_id' => $category['category_id'],
                'name'        => $category['name'] . ($this->config->get('config_product_count') ? ' (' . $total . ')' : ''),
                'children'    => $children_data,
                'href'        => $this->url->link('product/category', 'path=' . $category['category_id'])
            );
меняем на код (как пример)
Код:
            $cat_total =  $this->model_catalog_category->getTotalCategoriesByCategoryId($category['category_id']);
            $this->data['categories'][] = array(
                'category_id' => $category['category_id'],
                'name'        => $category['name'] . ($this->config->get('config_product_count') ? ' (' . $cat_total . ')' : ''),
                'children'    => $children_data,
                'href'        => $this->url->link('product/category', 'path=' . $category['category_id'])
            );
 
Долго пытался разобраться что к чему, и понял, что я, по всей видимости, Вас запутал своим примером с модулем category. Прошу прощения.

Я пытаюсь вывести количество подкатегорий ни в модуле, а именно на странице категории (catalog - view - product - category.tpl). Продублирую еще раз ссылку с примером: Для просмотра ссылки Войди или Зарегистрируйся (изображение "Каталог.png")
Поэтому здесь надо работать с контроллером (catalog - controller - product - category.php).

Пока что весь код выглядит следующим образом:
1) в контроллере
PHP:
foreach ($results as $result) {
         $data = array(
           'filter_category_id'  => $result['category_id'],
           'filter_sub_category' => true
         );

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

  $cat_total =  $this->model_catalog_category->getTotalCategoriesByCategoryId($parent_id = $result['category_id']);

         $this->data['categories'][] = array(
           'name'  => $result['name']. ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),
           'amount' => $cat_total,
           'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url)
         );
       }

2) в шаблоне
PHP:
<div class="name subcatname"><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a><br />Количество коллекций: <?php echo $category['amount']; ?></div>


$category['amount'] выводит количество подкатегорий в категорий. Осталось только разрешить показ этих данных только на странице категории первого уровня. Как пример, сделать проверку: не является ли данная категория дочерней относительно другой, и если она не является, то выводить у нее данную подпись, а если эта категория является дочерней по отношению к какой либо другой - то не выводить надпись. Вот как это можно сделать?
 
Если выводите не на главной, то проще в контроллере работать с проверкой по полю 'parent_id' самой категории. Например
Код:
$cat_total = 0;
if ($category_info['parent_id'] == 0) {
$cat_total = $this->model_catalog_category->getTotalCategoriesByCategoryId($parent_id = $result['category_id']);
}
а в шабе приблизительно такую проверку
Код:
 <div class="name subcatname"><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a>
<?php if ($category['amount'])  != 0) { ?>
<br />Количество коллекций: <?php echo $category['amount']; ?>
<?php } ?>
</div>
 
Отлично, спасибо! Всё работает как и задумывалось))

Скажите, Вы так свободно ориентируетесь в коде, потому что какие-то курсы по разработке на OpenCart проходили или все с практикой пришло? Я пытался найти книги/документации/видеокурсы по разработке на данной cms, но безуспешно. Все что я встретил, так это руководство разработчика (если так можно назвать пару обзацев) по ocStore.
 
Последнее редактирование:
Иногда приходится допиливать самому свои проекты (так дешевле и чаще быстрее) не будучи проф. программером, немного практики доведения пары шопов до реальной торговли оказалось вполне достаточно. Основная помощь - поиск по профильным форумам.
OpenCart - одна из наиболее простых в освоении систем, для которой чаще всего достаточно краткого руководства по структуре и поверхностного знания программинга. Попробуйте решить задачу по оптимизации конкретного шопа, например уменьшение на 20-30% времени выполнения запросов к БД, и будете легко ориентироваться в OpenCart.
 
требуется аналогичное, но немного наобороот. Нужно вывести количество товаров только для подкатегорий, а для главных категорий убрать вывод количества. Может кто подскажет? (создавать дубль темы незахотел, пишу в этой, аналогичной)
 
Нужно вывести количество товаров только для подкатегорий, а для главных категорий убрать вывод количества. Может кто подскажет?
Подсказать может и получится, но уточните версию OpenCart. Речь идет только о первом уровне модуля category (боковое меню)? Горизонтальное меню устраивает?
 
Назад
Сверху