Вывод категорий в карточке производителя

Тема в разделе "Общие вопросы", создана пользователем InMix, 28 авг 2015.

  1. InMix

    InMix Новичок

    Сообщения:
    5
    Симпатии:
    0
    Здравствуйте,

    Стоит задача вывести в карточку производителя "коллекции" (категории) с товарами данного производителя, бесплатных модульных решений я не нашел, но нашел мануал (ссылка) в нем описывается как это сделать, но возникли сложности, возможно там описывается метод для более ранней версии движка (у меня стоит Opencart 2.0.3.1 (rs.2)) и возникают ошибки.

    При выполнении всех действий представленных в мануале, на странице производителя в вверху страницы выводится ошибка:

    Notice: Indirect modification of overloaded property ControllerProductManufacturer::$data has no effect in /home/i/***/***/public_html/system/modification/catalog/controller/product/manufacturer.php on line 136Notice: Indirect modification of overloaded property ControllerProductManufacturer::$data has no effect in /home/i/***/***/public_html/system/modification/catalog/controller/product/manufacturer.php on line 138Notice: Indirect modification of overloaded property ControllerProductManufacturer::$data has no effect in /home/i/***/***/public_html/system/modification/catalog/controller/product/manufacturer.php on line 149

    Ругается на строчки

    Код:
    136: $this->data['manufacturer_id'] = $manufacturer_id;
    138: $this->data['manufacturer_categories'] = array();
    149: $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'])
    
        );   
    }
    
    И на месте где должны быть категории, выводится ошибка:

    Notice: Undefined variable: manufacturer_categories in /home/i/***/***/public_html/system/modification/catalog/view/theme/default/template/product/manufacturer_info.tpl on line 24

    Код:
    24: <a href="<?php echo $category['href']; ?>?m=<?php echo $manufacturer_id; ?>">
            <img src="<?php echo $category['thumb']; ?>">
            </a>
    
    Подскажите пожалуйста, может там не полная инструкция и нужно дополнительно что-то, куда-то дописать или изменить для моей версии Opencart, может кто-то сталкивался с этим уже.

    Или возможно вы знаете аналогичные способы для решения данной задачи,

    Заранее спасибо, очень жду ваших советов
     
    Последнее редактирование: 28 авг 2015
  2. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    /catalog/model/catalog/category.php

    Находите:
    PHP:
    public function getCategoryFilters($category_id) {
    Перед ней вставляете
    PHP:
    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;
        }
    Тут изменений нет ни каких.


    /catalog/controller/product/manufacturer.php

    Находите
    PHP:
    $manufacturer_info $this->model_catalog_manufacturer->getManufacturer($manufacturer_id);
    перед ней вставляете:

    PHP:
    $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'];
                    }
                }
            }

            
    $data['manufacturer_id'] = $manufacturer_id;
          
            
    $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;
                }
              
                
    $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'])

                );      
            }
    Изменялись:
    1.
    PHP:
    $this->data['manufacturer_id'] = $manufacturer_id;
    2.
    PHP:
    $this->data['manufacturer_categories'] = array();
    3.
    PHP:
    $this->data['manufacturer_categories'][] = array(

    на

    1.
    PHP:
    $data['manufacturer_id'] = $manufacturer_id;
    2.
    PHP:
    $data['manufacturer_categories'] = array();
    3.
    PHP:
    $data['manufacturer_categories'][] = array(

    /catalog/view/theme/default/template/product/manufacturer_info.tpl

    Находите:
    PHP:
    <?php if ($products) { ?>
    Перед ней вставляете БЕЗ ВКЛЮЧЕННОГО ЧПУ:
    PHP:
    <?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']; ?>&m=<?php echo $manufacturer_id?>">
            <img src="<?php echo $category['thumb']; ?>">
             </a>
           <?php ?>
          </div>
          <a href="<?php echo $category['href']; ?>&m=<?php echo $manufacturer_id?>">
            <?php echo $category['name']; ?>
          </a>
          <?php ?>
      </div>
      <?php ?>
    С ВКЛЮЧЕННЫМ ЧПУ
    PHP:
    <?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']; ?>?m=<?php echo $manufacturer_id?>">
            <img src="<?php echo $category['thumb']; ?>">
             </a>
           <?php ?>
          </div>
          <a href="<?php echo $category['href']; ?>?m=<?php echo $manufacturer_id?>">
            <?php echo $category['name']; ?>
          </a>
          <?php ?>
      </div>
      <?php ?> 
     
    Romans, Ален, tsap и ещё 1-му нравится это.
  3. InMix

    InMix Новичок

    Сообщения:
    5
    Симпатии:
    0
    Наигромнейшее вам спасибо, отредактировал/добавил все как вы написали, все заработало, еще раз спасибо!
     
  4. Vipsaler

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

    Сообщения:
    77
    Симпатии:
    1
    Не стал создавать новую тему, т.к. вопрос - продолжение этого же решения)
    Как изменить вышеуказанный код, чтобы вывести не категории, а только подкатегории, в которых есть товары производителя (opencart 2.3)?
     
  5. karpov

    karpov Продвинутый пользователь

    Сообщения:
    1.518
    Симпатии:
    241
    Странная затея конечно. В теории можно. Дополните код перебором основных категорий до их подкатегорий..