Использование категории товаров в качестве статьи

Появилась интересная задача: нужна возможность использовать категории продуктов в качестве статей. Это нужно для того, чтобы информационную статью можно было разместить в главном меню. По идее это можно сделать сразу в стандартном Opencart. Проблему представляют лишь кнопка "Продолжить", текст "В данной категории нет товаров", помимо этого нужно скрыть такой пункт из бокового меню категорий.

Статьи Opencart

1. Для начала решим первые две проблемы, открываем: /catalog/view/theme/default/template/product/category.tpl

Находим код:

      <?php if (!$categories && !$products) { ?>
      <p><?php echo $text_empty; ?></p>
      <div class="buttons">
        <div class="pull-right"><a href="<?php echo $continue; ?>" class="btn btn-primary"><?php echo $button_continue; ?></a></div>
      </div>
      <?php } ?>

И удаляем его.

2. Открываем контроллер модуля "Категории": /catalog/controller/module/category.php, находим вот такой большой кусочек кода:

					$children_data[] = array(
						'category_id' => $child['category_id'],
						'name' => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
						'href' => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id'])
					);
				}
			}

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

			$data['categories'][] = array(
				'category_id' => $category['category_id'],
				'name'        => $category['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
				'children'    => $children_data,
				'href'        => $this->url->link('product/category', 'path=' . $category['category_id'])
			);

В каждую запись о категории нужно добавить информацию о количестве товаров, в каждый элемент массива добавляется строчка:

'products' => $this->model_catalog_product->getTotalProducts($filter_data)
В итоге этот большой кусочек кода превращается в:
					$children_data[] = array(
						'category_id' => $child['category_id'],
						'products' => $this->model_catalog_product->getTotalProducts($filter_data), 
						'name' => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
						'href' => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id'])
					);
				}
			}

			$filter_data = array(
				'filter_category_id'  => $category['category_id'],
				'filter_sub_category' => true
			);
				
			$data['categories'][] = array(
				'category_id' => $category['category_id'],
				'products' => $this->model_catalog_product->getTotalProducts($filter_data), 
				'name'        => $category['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
				'children'    => $children_data,
				'href'        => $this->url->link('product/category', 'path=' . $category['category_id'])
			);

3. Теперь, открываем шаблон модуля "Категории": /catalog/view/theme/default/template/module/category.tpl

Добавляем проверку, есть ли дочерние категории или товары у каждой категории. Если их нет, скрываем её. Меняем:

<?php foreach ($categories as $category) { ?>

На:

  <?php foreach ($categories as $category) 
    if($category['products'] || $category['children']){ ?>

И делаем такую же проверку для дочерних категорий, меняем:

<?php foreach ($category['children'] as $child) { ?>

На:

  <?php foreach ($category['children'] as $child) 
    if($child['products']){ ?>

В итоге, если у категории первого уровня нет ни продуктов, ни дочерних категорий, она скроется из бокового меню. Если у дочерней категории нет продуктов, она также скроется из бокового меню. Теперь чтобы использовать категорию в качестве статьи,, достаточно лишь не заносить в неё товары.

Использование категории в качестве статьи

Результат можно посмотреть на живом сайте: http://art-ptitsa.ru



Переделка карточки товаров в админке Opencart

Большинство интернет-магазинов не использует все возможности CMS. Не всем нужно учитывать UPC, EAN, JAN, расположение и т. д. Но, между тем, при большом количестве полей в товаре и большом потоке товаров у контент-менеджера, неизбежны ошибки. Например, можно на автомате перепутать артикул с моделью.

Обновление Opencart 2.2.0

2 марта вышло большое обновление Opencart. В этот раз изменения глобальные.


(2) Комментариев

Михаил - 24.05.2016 20:50:32
- 0    + 0
Здравствуйте!!!
А можно сделать что бы еще и фото добавлялись с текстом как у товара с предосмотром?
К примеру текст и ниже как бы маленькая галерея что ты не вставлять картинки в редактор.
У меня проблема встала нужна категория сертификаты и лицензии с текстом и картинками кликая на которые всплывала бы большое изображение сертификата или лицензии. Думаю не мне одному это надо жаль что такой функции не в движке.
Илья - 31.05.2016 08:22:32
- 0    + 0
Готового функционала под подобную разметку нет. Но можно сверстать обычную страничку на основе категории и для изображений использовать галерею, которая идёт в комплекте: http://allwebstuff.info/opencart-фотогалерея/