Как вывести список производителей в меню. Ответ

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

  1. Джо

    Джо Новичок

    Сообщения:
    24
    Симпатии:
    0
    дефолтный, но есть некоторые изменения.
     
  2. Джо

    Джо Новичок

    Сообщения:
    24
    Симпатии:
    0
    Допиливал вывод подкатегорий третего уровня:
    Код:
    // Menu
    $this->load->model('catalog/category');
    $this->load->model('catalog/product');
    $data['categories'] = array();
      $categories = $this->model_catalog_category->getCategories(0);
      foreach ($categories as $category) {
        if ($category['top']) {
       // Level 2
       $children_data = array();
       $children = $this->model_catalog_category->getCategories($category['category_id']);
       foreach ($children as $child) {
         $filter_data = array(
           'filter_category_id'  => $child['category_id'],
           'filter_sub_category' => true
         );
       //level 3
       $subchildren_data = array();
       $subchildren = $this->model_catalog_category->getCategories($child['category_id']);
       foreach ($subchildren as $subchild) {
         $filter_data = array(
           'filter_category_id'  => $subchild['category_id'],
           'filter_sub_category' => true
         );
       $subchildren_data[] = array(
         'name'  => $subchild['name'] . ($this->config->get('config_product_count') ? ' <span class="menu_summ">' . $this->model_catalog_product->getTotalProducts($filter_data) . '</span>' : ''),
         'href'  => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id']. '_' . $subchild['category_id']),
       );
    }
                     
      $children_data[] = array(
        'name'        => $child['name'] . ($this->config->get('config_product_count') ? ' <span class="menu_summ">' . $this->model_catalog_product->getTotalProducts($filter_data) . '</span>' : ''),
        'href'        => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id']),
        'subchildren' => $subchildren_data
        );
    }
                     
    // Level 1
      $data['categories'][] = array(
        'name'     => $category['name'],
        'children' => $children_data,
        'column'   => $category['column'] ? $category['column'] : 1,
        'href'     => $this->url->link('product/category', 'path=' . $category['category_id'])
      );
    }
    }
    и в шаблоне:
    Код:
    <?php if($child['subchildren']) { ?>
     
        <ul class="list-unstyled">
         <?php foreach ($child['subchildren'] as $subchild) { ?> 
           <li><a class="pull-left" href="<?php echo $subchild['href']; ?>"><?php echo $subchild['name']; ?></a></li>
         <?php } ?>
        </ul>
    <?php } ?>
     
  3. DiMoss

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

    Сообщения:
    862
    Симпатии:
    236
    А попробуйте так...
    Код:
    <?php if(isset($child['subchildren'])) { ?>
    
        <ul class="list-unstyled">
         <?php foreach ($child['subchildren'] as $subchild) { ?>
           <li><a class="pull-left" href="<?php echo $subchild['href']; ?>"><?php echo $subchild['name']; ?></a></li>
         <?php } ?>
        </ul>
    <?php } ?>
    Получается что надо либо добавить в массив производителей этот элемент, либо как то обходить его, т.е. для начала проверять существует ли он вообще.
     
    Джо нравится это.
  4. Джо

    Джо Новичок

    Сообщения:
    24
    Симпатии:
    0
    Так получилось)) А как ещё можно прописать только определённых производителей по id выводить?
     
  5. DiMoss

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

    Сообщения:
    862
    Симпатии:
    236
    Фильтровать в шаблоне видимо не получится, т.к. он отвечает не только за вывод производителей, но и всего меню в целом.
    Разве что исключать в цикле ненужные айдишники.

    Либо можно попробовать создать свою функцию запроса к БД в модели.....
    PHP:
    public function getManufacturerID($manufacturer_id) {
      
    $query $this->db->query("SELECT * FROM " DB_PREFIX "manufacturer m LEFT JOIN " DB_PREFIX "manufacturer_description md ON (m.manufacturer_id = md.manufacturer_id) LEFT JOIN " DB_PREFIX "manufacturer_to_store m2s ON (m.manufacturer_id = m2s.manufacturer_id) WHERE md.language_id = '" . (int)$this->config->get('config_language_id') . "' && m.manufacturer_id IN ('" $manufacturer_id "') AND m2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");

      return 
    $query->row;
    }
    И в контроллере сделать так....
    PHP:
    $filter_id '1, 4, 5';

    $manufacturers $this->model_catalog_manufacturer->getManufacturerID($filter_id);
    В общем надо пробовать и тестить. Я в этих делах не силён))).
     
  6. Fruit_Fellow

    Fruit_Fellow Новичок

    Сообщения:
    10
    Симпатии:
    0
    А как реализовать всё это на оксторе 2.1х ?
     
  7. DiMoss

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

    Сообщения:
    862
    Симпатии:
    236
    Ни больше ни меньше, а ровно так, как этого требует оксторе 2.1.х ;)
    Быть может и данный способ будет весьма уместен. Однако точно знать не могу, ибо все мы здесь практикуем Opencart.
     
  8. Fruit_Fellow

    Fruit_Fellow Новичок

    Сообщения:
    10
    Симпатии:
    0
    В поисковике нашёл только эту тему на свой вопрос, и только на этом форуме, поэтому и интересуюсь, мало ли, вдруг кто сталкивался или реализовывал данную вещь.
     
  9. DiMoss

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

    Сообщения:
    862
    Симпатии:
    236
    Так а Вы пробовали сделать это на оксторе? Если да, то быть может система ругается и показывает какие то ошибки? Покажите их нам и тогда нам проще будет помочь Вам.
     
  10. CorvinVasa

    CorvinVasa Новичок

    Сообщения:
    3
    Симпатии:
    0

    Сделал как вы писали, но у меня ошибка /www/catalog/view/theme/razborka/template/common/content_top.tpl on line 2
    Opencart 2.3
    Подскажите как исправить?
     
  11. DiMoss

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

    Сообщения:
    862
    Симпатии:
    236
    А на что ругается?
     
  12. CorvinVasa

    CorvinVasa Новичок

    Сообщения:
    3
    Симпатии:
    0
    Undefined variable: manufacturers in /www/catalog/view/theme/razborka/template/common/content_top.tpl on line 2
    Там у меня
    <?php if ($manufacturers) { ?>
     
  13. DiMoss

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

    Сообщения:
    862
    Симпатии:
    236
    А вы в какой контроллер вставляли код?
    Вы хотите разместить производителей в верхней области для модулей? Они же тогда будут отображаться всегда и везде!
     
  14. CorvinVasa

    CorvinVasa Новичок

    Сообщения:
    3
    Симпатии:
    0
    Я только повинуюсь желанию заказщика виводить производителей после каждого модуля(
    Проблема решена, не стандартный шаблон, где пути не как у вас в примере а сам не заметил етого.
     
  15. Vipsaler

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

    Сообщения:
    77
    Симпатии:
    1
    Приветствую!
    Подскажите, плиз, в чем может быть ошибка.

    Вставил в файл /catalog/controller/common/header.php код от DiMoss ($this->load->model('catalog/manufacturer');... и т.д.)
    Вставил в /www/catalog/view/theme/mytheme/template/common/header.tpl код от DiMoss (<?php if ($manufacturers) { ?>... и т.д.)

    Но в результате получаю ошибку:
    Undefined variable: manufacturers in /www/catalog/view/theme/mytheme/template/common/header.tpl

    Пытаюсь вывести список производителей в самом верху страницы (на всех страницах).
    Спасибо!
     
  16. karpov

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

    Сообщения:
    1.519
    Симпатии:
    241
    Читайте что написано в ошибки. Не определенная переменная manufacturers в указанном файле. Это значит вы ее пытаетесь вывести, но в контроллере не прописали. Возможно просто не обновили кеш модификатора.
     
    Vipsaler нравится это.