Помощь Решено!!! Выводить логотипы брендов в списке товара opencart 2

ihos

Участник
Регистрация
13 Май 2012
Сообщения
213
Реакции
3
Подскажите как вывести логотип бренда к товару в category.tpl
Поробывал способом 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'])
);
}

А в category.tpl
Код:
<?php foreach ($manufacturers as $manufacturer) { ?>
<img src="<?php echo $manufacturer['manufacturer_image']; ?>" />
<?php } ?>

Выводит логотипы, только все в каждом блоке, как я понял нужно category_id определить, но не доходит как?

Или может кто-то знает легче способ

Может кто подскажет как все таки выводить логотипы производителей в список товаров
 
Последнее редактирование модератором:
Уточните. Вы хотите лого отдельно к каждому товару как в этом Для просмотра ссылки Войди или Зарегистрируйся (Для просмотра ссылки Войди или Зарегистрируйся) ?
А то с кодом делаете совсем другое и не понятно чего хотите получить.
 
Да так нужно как на демо, Для просмотра ссылки Войди или Зарегистрируйсятолько не получается логотип кликабельным сделать, чтобы при клике переходило на карточку производителя.
 
Да так нужно как на демо, Для просмотра ссылки Войди или Зарегистрируйсятолько не получается логотип кликабельным сделать, чтобы при клике переходило на карточку производителя.
Найденная статья вредная, автор по скудоумию либо намерено реализует получение картинок ценой добавления кучки не нужных SQL запросов. Подобные решения приводят к тому, что Опенкарт начинает тормозить.
Всё необходимое для вывода картинок брендов в листингах товаров в базовом Опенкарте уже реализовано. Нужно только имеющиеся данные связать.
Использую OC 2.3.0.2.
Берем /catalog/model/catalog/product.php и в метод getProduct() добавляем два фрагмента (добавленное отметил красным цветом) :
Скрытое содержимое доступно для зарегистрированных пользователей!

Берём контроллер /catalog/controller/product/category.php и дополняем код:
Скрытое содержимое доступно для зарегистрированных пользователей!

Теперь в шаблоне *.tpl через переменные $product['thumb_manufacturer'], $product['name_manufacturer'], $product['href_manufacturer'] имеем доступ к картинке, имени и линку производителя соответственно.
Аналогично можно модифицировать и другие контроллеры special.php, search.php ...
И нет доп. запросов к БД. На рабочем Опенкарте не проверял, писал просто по тексту кода.
 
Последнее редактирование:
  • Нравится
Реакции: inmy
Не получается так, вот мои коды вставки
/catalog/model/catalog/product.php и в метод getProduct()
Код:
public function getProduct($product_id) {
        $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, m.image AS image_manufacturer, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "') AS reward, (SELECT ss.name FROM " . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "') AS stock_status, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");

        if ($query->num_rows) {
            return array(
                'product_id'       => $query->row['product_id'],
                'name'             => $query->row['name'],
                'description'      => $query->row['description'],
                'meta_title'       => $query->row['meta_title'],
                'meta_description' => $query->row['meta_description'],
                'meta_keyword'     => $query->row['meta_keyword'],
                'tag'              => $query->row['tag'],
                'model'            => $query->row['model'],
                'sku'              => $query->row['sku'],
                'upc'              => $query->row['upc'],
                'ean'              => $query->row['ean'],
                'jan'              => $query->row['jan'],
                'isbn'             => $query->row['isbn'],
                'mpn'              => $query->row['mpn'],
                'location'         => $query->row['location'],
                'quantity'         => $query->row['quantity'],
                'stock_status'     => $query->row['stock_status'],
                'image'            => $query->row['image'],
                'manufacturer_id'  => $query->row['manufacturer_id'],
                'manufacturer'     => $query->row['manufacturer'],
                'image_manufacturer' => $query->row['image_manufacturer'],
                'price'            => ($query->row['discount'] ? $query->row['discount'] : $query->row['price']),
                'special'          => $query->row['special'],
                'reward'           => $query->row['reward'],
                'points'           => $query->row['points'],
                'tax_class_id'     => $query->row['tax_class_id'],
                'date_available'   => $query->row['date_available'],
                'weight'           => $query->row['weight'],
                'weight_class_id'  => $query->row['weight_class_id'],
                'length'           => $query->row['length'],
                'width'            => $query->row['width'],
                'height'           => $query->row['height'],
                'length_class_id'  => $query->row['length_class_id'],
                'subtract'         => $query->row['subtract'],
                'rating'           => round($query->row['rating']),
                'reviews'          => $query->row['reviews'] ? $query->row['reviews'] : 0,
                'minimum'          => $query->row['minimum'],
                'sort_order'       => $query->row['sort_order'],
                'status'           => $query->row['status'],
                'date_added'       => $query->row['date_added'],
                'date_modified'    => $query->row['date_modified'],
                'viewed'           => $query->row['viewed']
            );
        } else {
            return false;
        }

и то же ж /catalog/controller/product/category.php
Код:
foreach ($results as $result) {
                if ($result['image']) {
                    $image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
                } else {
                    $image = $this->model_tool_image->resize('placeholder.png', $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
                }

                if ($result['image_manufacturer']) {
                 $image_manufacturer = $this->model_tool_image->resize($result['image_manufacturer'], 33, 33));
                  } else {
                 $image =false;
                  }
               
                
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
                    $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
                } else {
                    $price = false;
                }

                if ((float)$result['special']) {
                    $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
                } else {
                    $special = false;
                }

                if ($this->config->get('config_tax')) {
                    $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price']);
                } else {
                    $tax = false;
                }

                if ($this->config->get('config_review_status')) {
                    $rating = (int)$result['rating'];
                } else {
                    $rating = false;
                }

               
                $data['products'][] = array(
                    'product_id'  => $result['product_id'],
                    'thumb'       => $image,
                    'model'       => $result['model'],
                    'name'        => $result['name'],
                    'manufacturer'=>  $result['manufacturer'],
                    'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..',
                    'attribute_groups' => $this->model_catalog_product->getProductAttributes($result['product_id']),
                    //'price'       => $price,                   
                    'price'       => ($price=='0 грн.' ? '<span style="display: block;font-size: 13px; color: #777; padding-top: 15px; padding-left: 10px; font-weight: normal;">Цену уточняйте</span>' : $price),
                    'special'     => $special,
                    'thumb_manufacturer' => $image_manufacturer,
                    'name_manufacturer' => $result['manufacturer'],
                    'href_manufacturer' => $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $result('manufacturer_id')),
                    'tax'         => $tax,
                    'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
                    'rating'      => $result['rating'],
                    'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
                );
            }
                }

и код
Код:
<div class="logo-manufakturess col-sm-6">
               
                <div class="logo"><a href="<?php echo $product['href_manufacturer'] ?>"><img src="<?php echo $product['thumb_manufacturer'] ?>" alt="<?php echo $product['name_manufacturer']; ?>" title="<?php echo $product['name_manufacturer']; ?>"><?php echo $product['name_manufacturer']; ?></a></div>

Но в результате выбило ошибку "Хост farb.goldweb.in.ua сейчас не может обработать этот запрос. HTTP ERROR 500"
 
Но в результате выбило ошибку "Хост farb.goldweb.in.ua сейчас не может обработать этот запрос. HTTP ERROR 500"
Правки делаете в кеше модификаций? Если в исходниках, то обновляете модификаторы?
При HTTP ERROR 500 нужно смотреть серверный лог ошибок.
 
Правки делаете в кеше модификаций? Если в исходниках, то обновляете модификаторы?
При HTTP ERROR 500 нужно смотреть серверный лог ошибок.
в исходнике, та й модификатор обновлял уже и кеш чистил ничего.

Правки делаете в кеше модификаций? Если в исходниках, то обновляете модификаторы?
При HTTP ERROR 500 нужно смотреть серверный лог ошибок.

Вот ошибка в логе: PHP Fatal error: Call to a member function getManufacturer() on a non-object in /home/h25949/data/www/farb.goldweb.in.ua/system/storage/modification/catalog/controller/product/category.php on line 345
 
Последнее редактирование модератором:
Это скорее всего не убранные хвосты от предыдущих экспериментов на контроллере. Я настаивал не использовать getManufacturer()
Откройте /system/storage/modification/catalog/controller/product/category.php и посмотрите почему там в строке 345 вызов getManufacturer .
Ну или сюда киньте этот файл.
 
Вернул бекап, сделал все заново. Сейчас лог показывает ошибку в строке
PHP Parse error: syntax error, unexpected ')' in /system/storage/modification/catalog/controller/product/category.php on line 323
Ссылается на вот эту строку, я подумал что может одна скобка лишняя, выделил красным
if ($result['image_manufacturer']) {
$image_manufacturer = $this->model_tool_image->resize($result['image_manufacturer'], 33, 33));
} else {
$image =false;
}
После того как забрал скобку то выбило ошибку в логе
PHP Fatal error: Function name must be a string in /system/storage/modification/catalog/controller/product/category.php on line 371
тоесть
Код:
'href_manufacturer' => $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $result('manufacturer_id')),
Файл прикрепил.
 

Вложения

  • category.zip
    4,5 KB · Просмотры: 5
Виноват, со скобками накосячил. В стр. 371 нужно так:
Код:
'href_manufacturer' => $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $result['manufacturer_id']),
Upd. Исправил в Для просмотра ссылки Войди или Зарегистрируйся с кодом.
 
Последнее редактирование:
Назад
Сверху