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

Тема в разделе "Opencart", создана пользователем KoNnY, 26 фев 2015.

Информация :
Внимание форумчане! При создании тем, или выкладывании какой-либо информации проверьте в какой ветке форума вы находитесь! Не путайте Opencart и Opencart2. При несоблюдении данного условия выносится соответствующее наказание! И потом не говорите что вас НЕ ПРЕДУПРЕЖДАЛИ! По возможности используйте обменники mail, yandex, google, dropbox, rghost Дабы избежать просьб перезалить и проблем с рекламой!
Модераторы: ZiX
  1. KoNnY

    KoNnY Постоялец

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

    Подскажите, пожалуйста, решение данной задумки. Может кто сталкивался с подобной задачей. Спасибо.
     
  2. drozd22

    drozd22

    Регистр.:
    17 июн 2011
    Сообщения:
    317
    Симпатии:
    172
    В модели 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']);
     
    KoNnY нравится это.
  3. KoNnY

    KoNnY Постоялец

    Регистр.:
    14 дек 2014
    Сообщения:
    68
    Симпатии:
    5
    Спасибо! Воспользовался Вашим советом, в контроллере категории добавил следующий код:
    Код:
     $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-го уровня (это и есть страница Каталог)? Там по структуре у последующих категорий есть свои категории, но не нужно уже отображать эту фразу.
     
  4. drozd22

    drozd22

    Регистр.:
    17 июн 2011
    Сообщения:
    317
    Симпатии:
    172
    Если правильно понял Вашу структуру категорий, то нужно подняться выше по структуре. Например код
    Код:
                $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'])
                );   
    
     
  5. KoNnY

    KoNnY Постоялец

    Регистр.:
    14 дек 2014
    Сообщения:
    68
    Симпатии:
    5
    Долго пытался разобраться что к чему, и понял, что я, по всей видимости, Вас запутал своим примером с модулем category. Прошу прощения.

    Я пытаюсь вывести количество подкатегорий ни в модуле, а именно на странице категории (catalog - view - product - category.tpl). Продублирую еще раз ссылку с примером: http://file.karelia.ru/tvzngq/ (изображение "Каталог.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'] выводит количество подкатегорий в категорий. Осталось только разрешить показ этих данных только на странице категории первого уровня. Как пример, сделать проверку: не является ли данная категория дочерней относительно другой, и если она не является, то выводить у нее данную подпись, а если эта категория является дочерней по отношению к какой либо другой - то не выводить надпись. Вот как это можно сделать?
     
  6. drozd22

    drozd22

    Регистр.:
    17 июн 2011
    Сообщения:
    317
    Симпатии:
    172
    Если выводите не на главной, то проще в контроллере работать с проверкой по полю '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> 
     
    KoNnY нравится это.
  7. KoNnY

    KoNnY Постоялец

    Регистр.:
    14 дек 2014
    Сообщения:
    68
    Симпатии:
    5
    Отлично, спасибо! Всё работает как и задумывалось))

    Скажите, Вы так свободно ориентируетесь в коде, потому что какие-то курсы по разработке на OpenCart проходили или все с практикой пришло? Я пытался найти книги/документации/видеокурсы по разработке на данной cms, но безуспешно. Все что я встретил, так это руководство разработчика (если так можно назвать пару обзацев) по ocStore.
     
    Последнее редактирование: 27 фев 2015
  8. drozd22

    drozd22

    Регистр.:
    17 июн 2011
    Сообщения:
    317
    Симпатии:
    172
    Иногда приходится допиливать самому свои проекты (так дешевле и чаще быстрее) не будучи проф. программером, немного практики доведения пары шопов до реальной торговли оказалось вполне достаточно. Основная помощь - поиск по профильным форумам.
    OpenCart - одна из наиболее простых в освоении систем, для которой чаще всего достаточно краткого руководства по структуре и поверхностного знания программинга. Попробуйте решить задачу по оптимизации конкретного шопа, например уменьшение на 20-30% времени выполнения запросов к БД, и будете легко ориентироваться в OpenCart.
     
    KoNnY нравится это.
  9. 13zone

    13zone

    Регистр.:
    22 ноя 2008
    Сообщения:
    190
    Симпатии:
    45
    требуется аналогичное, но немного наобороот. Нужно вывести количество товаров только для подкатегорий, а для главных категорий убрать вывод количества. Может кто подскажет? (создавать дубль темы незахотел, пишу в этой, аналогичной)
     
  10. drozd22

    drozd22

    Регистр.:
    17 июн 2011
    Сообщения:
    317
    Симпатии:
    172
    Подсказать может и получится, но уточните версию OpenCart. Речь идет только о первом уровне модуля category (боковое меню)? Горизонтальное меню устраивает?