Категории Производителя

Тема в разделе "Модули и дополнения", создана пользователем Anastasiya, 29 мар 2017.

  1. TopicStarter Overlay
    Offline

    Anastasiya Пользователь

    Сообщения:
    206
    Симпатии:
    370
    Репутация:
    5
    Доброго времени суток,ищю модуль Категории производителя с меню.
     
  2. Offline

    Dark Angell Пользователь

    Сообщения:
    18
    Симпатии:
    11
    Репутация:
    0
    ссылочку бы,а то неизвестно что ищем
     
    FintMax нравится это.
  3. Offline

    Faraon Команда форума

    Сообщения:
    902
    Симпатии:
    2.503
    Репутация:
    58
    http://lowenet.biz/resources/modul-bokovoe-menju-opencart-2-x.621/ возможно это вам подойдет, но он только для vip plus
    Если хотите вывести как на скрине то этот модуль для вас simenu3.JPG
     
  4. Offline

    фдлщк

    Сообщения:
    599
    Симпатии:
    2.906
    Репутация:
    123
    1. Открываем файл модели, и добавляем функцию для выборки категорий товара (всех тех категорий в которых присутствует товар) по адресу: /catalog/model/catalog/category.php Находим строку:

    Код:
    public function getCategoryFilters($category_id) {
    Перед! этой строкой вставляем нашу функцию:

    Код:
        public function getProductCategories($product_id) {
            $query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "'");
         
            return $query->rows;
        }
    2. Вставляем в контроллер код, который получая массив из id продуктов данного производителя делает по циклу, перебирая все id, выборку категорий каждого товара и добавляет уникальные значения id категорий в массив всех категорий в которых есть товар этого производителя. Далее мы циклом делаем выборку всех данных категории и записываем нужные (изображение, ссылка, имя) данные в массив категорий.

    Для добавления этого кода переходим по адресу: /catalog/controller/product/manufacturer.php Находим строку:

    Код:
    $manufacturer_info = $this->model_catalog_manufacturer->getManufacturer($manufacturer_id);
    Перед! этой строкой вставляем наш код::

    Код:
    $this->load->model('catalog/category');
    
    $categories = array();
    
    $products_ids = $this->model_catalog_product->getProducts(array('filter_manufacturer_id' => $manufacturer_id));     
    foreach ($products_ids as $id) {
        $manufacturer_products[] = array('product_id'  => $id['product_id']);
        $product_categories = $this->model_catalog_category->getProductCategories($id['product_id']); 
    
        foreach ($product_categories as $product_category){
            if (!in_array($product_category['category_id'], $categories)) {
                $categories[] = $product_category['category_id'];
            }
        }
    }
    
    $this->data['manufacturer_categories'] = array();
    
    foreach ($categories as $value) {
        $categories_data = $this->model_catalog_category->getCategory($value); 
     
        if ($categories_data['image']) {
            $image = $this->model_tool_image->resize($categories_data['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
        } else {
            $image = false;
        }
     
        $this->data['manufacturer_categories'][] = array(
            'category_id' => $categories_data['category_id'],
            'name'  => $categories_data['name'],
            'thumb' => $image,
            'href'  => $this->url->link('product/category', '&path=' . $categories_data['category_id'])
    
        );     
    }
    3. После добавления всего программного кода, нам необходимо сделать вывод категорий производителя на страницу информации о производителе и его товарах. Для этого открываем файл шаблона по адресу: /catalog/view/theme/default/template/product/manufacturer_info.tpl Находим строку:

    Код:
    <?php if ($products) { ?>
    Перед! этой строкой вставляем код вывода всех категорий производителя::

    Код:
      <?php if ($manufacturer_categories) { ?>
      <div class="category-list">
          <?php foreach ($manufacturer_categories as $category) { ?>
         <div>
           <?php if ($category['thumb']) { ?>
                 <a href="<?php echo $category['href']; ?>">
            <img src="<?php echo $category['thumb']; ?>">
             </a>
           <?php } ?>
          </div>
          <a href="<?php echo $category['href']; ?>">
            <?php echo $category['name']; ?>
          </a>
          <?php } ?>
      </div>
      <?php } ?>
    После несложных манипуляций с кодом, мы получаем категории производителя, которые формируеются автоматически.

    ———- UPD ———-

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

    Мы открыли страницу производителя Apple. С помощью этой доработки, у нас, помимо товаров, вывелись еще и категории, в которых есть товары этого бренда. Категории будут: Телефоны, Планшеты, Ноутбуки. При переходе в Телефоны у нас будет стандартный вывод всех телефонов, и Apple и Samsung и других производителей.

    Так вот, требуется сделать, при заходе в категории Apple, вывод только продуктов этого производителя. Для этого нам надо как-то передать на категорию параметр фильтрации по производителю. Будем использовать старый добрый, может не такой эстетичный, но рабочий, прием с GET переменной.

    Для формирования ссылки на категории с параметром фильтрации нам надо открыть контроллер производителя catalog/controller/product/manufacturer.php и перед:

    Код:
    $this->data['manufacturer_categories'] = array();
    Добавить:

    Код:
    $this->data['manufacturer_id'] = $manufacturer_id;
    После этого переходим в файл шаблона catalog/view/theme/default/template/product/manufacturer_info.tpl и ищем цикл вывода категорий производителя:

    Код:
    <?php foreach ($manufacturer_categories as $category) { ?>
    Все ссылки вида:

    Код:
    <a href="<?php echo $category['href'];">
    Делаем такими:

    Код:
    <a href="<?php echo $category['href']; ?>?m=<?php echo $manufacturer_id; ?>">
    То есть мы добавляем параметр GET к ссылке. Этот метод будет работать, если у вас включено ЧПУ, если нет, то знак ? надо поменять на знак &.

    После таких изменений у нас переходя в категорию бренда, будет передаваться данные для фильтрации по производителю. Но что бы стандартный вывод товаров в категории понял этот параметр, нам надо открыть контроллер категории catalog/controller/category.php и найти строку:

    Код:
    'filter_category_id' => $category_id,
    После нее вставляем:

    Код:
    'filter_manufacturer_id' => isset($this->request->get['m'])?$this->request->get['m']:false,
    После этих изменений ссылки у нас будут в конце с параметром производителя вида site.com/category/?m=11, что не совсем красиво, но оно не мешает и прекрасно выполняет поставленную функцию.
     
    admin нравится это.
  5. Offline

    фдлщк

    Сообщения:
    599
    Симпатии:
    2.906
    Репутация:
    123