[Инструкция] Как вывести производителя товара на странице корзины?

Тема в разделе "Инструкции и FAQ", создана пользователем solunski.d, 25 сен 2015.

  1. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    432
    Здравствуйте, в этом теме я расскажу как вывести производителя товара на странице корзины.

    Данный материал предназначен для версии Opencart 2.x, если у вас Opencart 1.5.x, то синтаксис php может быть другим, чтобы понять разницу, ознакомьтесь с данной статьёй и проведите исследование на наличие не схожих моментов в версии Opencart 1.5.x.

    1. Первое что нужно сделать, это получить данные из БД, это идентификатор и имя производителя.
    Идем в папку ...\system\library\ и открываем файл для редактирования cart.php
    Врубаем поисковик (CTRL + F) и ищем строку:
    PHP:
    $product_query $this->db->query("SELECT * FROM " DB_PREFIX "product p LEFT JOIN " DB_PREFIX "product_description pd ON (p.product_id = pd.product_id) WHERE p.product_id = '" . (int)$product_id "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.date_available <= NOW() AND p.status = '1'");

    Заменяем этот запрос на:
    PHP:
    $product_query $this->db->query("SELECT *, pd.name AS name, p.image, m.name AS manufacturer FROM " DB_PREFIX "product p LEFT JOIN " DB_PREFIX "product_description pd ON (p.product_id = pd.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.date_available <= NOW() AND p.status = '1'");
    Теперь когда мы добавили обращение к производителю, можно занести полученные данные в массив
    Врубаем поисковик (CTRL + F) и ищем строку:
    PHP:
    $this->data[$key] = array(
    ...
    );
    Вставляем в этот массив строки:
    PHP:
    'manufacturer'  => $product_query->row['manufacturer'],
    'manufacturer_id'  => $product_query->row['manufacturer_id'],
    Внимание: Обратите внимание на запятые!
    Все, мы закончили работу с обращением к Базе данных.

    2.Теперь приступим к работе над контроллером, тут все просто.
    Идем в папку ...\catalog\controller\checkout\ и открываем файл для редактирования cart.php
    Врубаем поисковик (CTRL + F) и ищем строку:
    PHP:
    $data['products'][] = array(
    ...
    );
    Вставляем в этот массив строки:
    PHP:
    'manufacturer'     => $product['manufacturer'],
    'manufacturers'     => $this->url->link('product/manufacturer/info''manufacturer_id=' $product['manufacturer_id']),
    Внимание: Обратите внимание на запятые!
    Все, мы закончили работу с контроллером.

    3.Теперь выведем производителя товара в шаблоне.
    Идем в папку ...\catalog\view\theme\default\template\checkout и открываем файл для редактирования cart.php
    Тут я просто подскажу php переменные которые позволят вам вывести производителя и ссылку на него
    HTML:
    <a href="<?php echo $product['manufacturers']; ?>"><?php echo $product['manufacturer']; ?><a/>
    Собственно вот и все, удачи!

    Спасибо за помощь Vlad!
     
    Последнее редактирование: 4 фев 2016
    Berto и my2you нравится это.
  2. optimlab

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

    Сообщения:
    922
    Симпатии:
    240
    Чет вы намудрили по моему.
    Зачем в библиотеки лезть если можно воспользоваться готовым контроллером и моделью товара:
    PHP:
    $this->load->model('catalog/product'); //Подключаем модель товара
    $product_info $this->model_catalog_product->getProduct($product_id); // Узнаем инфу о товаре из запроса в БД

    $data['manufacturer'] = $product_info['manufacturer']; // Создаем переменную названия производителя
    $data['manufacturers'] = $this->url->link('product/manufacturer/info''manufacturer_id=' $product_info['manufacturer_id']); // URL производителя.
    Вставляете это всё во второй пункт обходя первый.;)
    $product_id - я думаю догадаетесь как получить в контроллере cart.php уже есть в цикле foreach ($products as $product) {
     
    Последнее редактирование: 25 сен 2015
    my2you и solunski.d нравится это.
  3. my2you

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

    Сообщения:
    281
    Симпатии:
    125
    что то одно тут лишнее ))
     
  4. optimlab

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

    Сообщения:
    922
    Симпатии:
    240
    Причем Vlad написал изначально в аналогичной теме правильный ответ, но почему то вы оба не в ту степь пошли.
     
  5. my2you

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

    Сообщения:
    281
    Симпатии:
    125
    лезть в библиотеку может и будет оправдано, когда база будет нагружена итд.
    Т.е мы разом получаем все данные в одном запросе.
     
  6. optimlab

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

    Сообщения:
    922
    Симпатии:
    240
    Фиг знает, тут тестировать надо. В первом случае проц будет перенапрягаться, а во втором случае оперативка сервера. Палка о двух концах так сказать...
     
  7. my2you

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

    Сообщения:
    281
    Симпатии:
    125
    Вариантов плохих и хороших много не бывает! Пусть будут.
    Ведь на основании примеров можно еще что то прикрутить другое.
     
  8. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    432
    Спасибо за отзывы, я думаю хоть и мудрено, но чем то и кому то, она будет полезна
     
    Сергей А. нравится это.
  9. myideasforsite

    myideasforsite Новичок

    Сообщения:
    1
    Симпатии:
    1
    Это у меня только, или картинки товаров в корзине заменило на картинки производителей?
    Поправила, был немного неправильный запрос. Правильно так

    Код:
     $product_query = $this->db->query("SELECT *, pd.name AS name, p.image, m.name AS manufacturer FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.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.date_available <= NOW() AND p.status = '1'"); 
     
    solunski.d нравится это.
  10. callipso

    callipso Новичок

    Сообщения:
    4
    Симпатии:
    0
    Скажите, пожалуйста в какой файл вставляем:

    "$this->data[$key] = array(
    ...
    );"
     
  11. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    432
    Внимательное читаем! Мы ищем в cart.php
     
    Последнее редактирование: 2 мар 2016
  12. rider76

    rider76 Новичок

    Сообщения:
    7
    Симпатии:
    1
    opencart 2.1.0.2
    в файле \system\library\cart.php
    такой строки нету

    "$this->data[$key] = array(
    ...
    );"

    Сам массив я нашел, он начинается строкой
    $product_data[] = array(

    но все равно не работает этот способ, ругается на строку из самого первого действия.
     
    Последнее редактирование: 13 мар 2016
  13. rider76

    rider76 Новичок

    Сообщения:
    7
    Симпатии:
    1
    Не подскажете в файле \catalog\controller\checkout\cart.php куда вставлять данный код ?? И дальнейшие дествия про $product_id ?
     
  14. optimlab

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

    Сообщения:
    922
    Симпатии:
    240
    Я смотрю любите вы готовые решения копи-пастить. ;)
    Это
    соединяем с этим
    Получаем:
    Врубаем поисковик (CTRL + F) и ищем строку:
    PHP:
    $this->load->model('tool/upload');
    после вставляем:
    PHP:
    $this->load->model('catalog/product'); //Подключаем модель товара
    ищем строку:
    PHP:
    foreach ($products as $product) {
    после вставляем:
    PHP:
    $product_info $this->model_catalog_product->getProduct($product['product_id']); // Узнаем инфу о товаре из запроса в БД
    ищем строку:
    PHP:
    $data['products'][] = array(
    ...
    );
    Вставляем в этот массив строки:
    PHP:
    'manufacturer'     => $product_info['manufacturer'], // Создаем переменную названия производителя
    'manufacturers'    => $this->url->link('product/manufacturer/info''manufacturer_id=' $product_info['manufacturer_id']), // URL производителя
    Далее переходим к первому посту и читаем 3. пункт...
     
    rider76 нравится это.
  15. rider76

    rider76 Новичок

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