2013-06-21 4 views
-1

ОК, поэтому я хочу отображать логотипы производителей для каждой категории. Логотипы изготовителя должны относиться к категории, то есть категория мобильных телефонов должна отображать только те логотипы изготовителя, которые относятся к категории Мобильные телефоны, такие как логотип для Microsoft или Sony, не должны отображаться здесь (категория мобильных телефонов), но вместо этого она должна отображаться в категории Игровые консоли.OpenCart - Отображение логотипов изготовителя на странице категории

каталог/контроллер/продукта/category.php

$this->load->model('catalog/manufacturer'); 

$this->data['manufacturers'] = array(); 

    $results = $this->model_catalog_manufacturer->getManufacturers(); 
    foreach ($results as $result) { 
     $this->data['manufacturers'][] = array(
     'manufacturer_image' => $this->model_tool_image->resize($result['image'],80,80), 
     'name' => $result['name'], 
     'href' => $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $result['manufacturer_id']) 
); 
} 

category.tpl

<?php foreach ($manufacturers as $manufacturer) { ?> 
<img src="<?php echo $manufacturer['manufacturer_image']; ?>" /> 
<?php } ?> 

В настоящее время он показывает все логотипы производителя во всех категориях.

+0

вам нужно будет отфильтровать результаты из 'getManufacture', передав ему' category_id', в тот момент, когда функция не знает контекста категории. – DevZer0

+0

Просто интересно, почему * Sony * не должна отображаться на мобильных телефонах (так как у нас был * Sony Ericsson * до 2012 года, и теперь это просто и только * Sony * заклеймен) ...^_^ – shadyyx

+0

1. Какая версия OC ты используешь? 2. Как вы определяете связь между ** категорией ** <=> ** производитель **? Я думаю, вы должны иметь возможность связать производителей с категорией, а затем просто подбирать все те, которые связаны ... Или вы можете кому-то создать такой интеллектуальный алгоритм, что PHP будет знать, что * Microsoft делает Xbox - давайте отобразим его на Категория игровых консолей! * ??? – shadyyx

ответ

1

Модель производителя запасных частей OpenCart не предоставляет такого рода функциональные возможности, поэтому вам необходимо создать новый метод. В /catalog/model/product/manufactuer.php добавить

public function getManufacturersByCatgoryId($category_id) { 


    $query = $this->db->query(" 
     SELECT 
      m.* 
     FROM 
      " . DB_PREFIX . "product_to_category p2c 
      LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id) 
      LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) 
      LEFT JOIN " . DB_PREFIX . "manufacturer m ON (m.manufacturer_id = p.manufacturer_id) 
      LEFT JOIN " . DB_PREFIX . "manufacturer_to_store m2s ON (m2s.manufacturer_id = p.manufacturer_id) 
     WHERE 
      p2c.category_id = '" . (int) $category_id . "' 
      AND m2s.store_id = '" . (int) $this->config->get('config_store_id') . "' 
      AND p.status = 1 
      AND p2s.store_id = '" . (int) $this->config->get('config_store_id') . "' 
     GROUP BY 
      m.manufacturer_id 
    "); 

    return $query->rows; 

} 

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

$this->load->model('product/manufactuer'); 
$manufacturers = $this->model_product_manufacturer->getManufacturersByCategoryId($category_id); 

$this->data['manufacturers'] = array(); 

foreach ($manufacturers as $manufacturer) { 
    $image = $manufacturer['image']; 
    $this->data['manufacturers'][] = array(
      'manufacturer_image' => $this->model_tool_image->resize($result['image'],80,80), 
      'name' => $result['name'], 
      'href' => $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $result['manufacturer_id']) 
    ); 

} 

Я не испытанной приведенный выше код, и вы можете, вероятно, оптимизировать SQL-запрос, если хотите, но он должен работать нормально.

Смежные вопросы