Php OpenCart-在类别页面中显示制造商徽标

Php OpenCart-在类别页面中显示制造商徽标,php,mysql,opencart,Php,Mysql,Opencart,好的,我想显示每个类别的制造商徽标。制造商徽标应与类别相关,即手机类别应仅显示属于该类别的制造商徽标,如Microsoft或Sony的徽标不应显示在此处(手机类别),而应显示在游戏机类别中 catalog/controller/product/category.php $this->load->model('catalog/manufacturer'); $this->data['manufacturers'] = array(); $results = $this-&

好的,我想显示每个类别的制造商徽标。制造商徽标应与类别相关,即手机类别应仅显示属于该类别的制造商徽标,如Microsoft或Sony的徽标不应显示在此处(手机类别),而应显示在游戏机类别中

catalog/controller/product/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'])
);
} 
类别.第三方物流

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

" />

目前,它显示所有类别中的所有制造商徽标。

OpenCart的库存制造商模型没有提供此类功能,因此您需要创建一个新方法。在
/catalog/model/product/manufacturer.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查询,但它应该可以正常工作。

你需要通过传递一个
category\u id
来过滤
getManufacture
的结果,此时函数不知道类别上下文。只是想知道为什么Sony不应该显示在超薄手机(正如我们在2012年之前拥有索尼爱立信,现在它是唯一一款索尼品牌手机)…你使用的是什么版本的OC?2.你如何指定类别制造商之间的关系?我想你应该能够将制造商与一个类别关联起来,然后选择所有相关的…或者你认为有人可以创建这样一个智能算法,让PHP知道微软生产Xbox-让我们来看看在游戏机类别上显示它???