Здравствуйте, в этом теме я расскажу как вывести производителя товара на странице корзины. Данный материал предназначен для версии 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!
Чет вы намудрили по моему. Зачем в библиотеки лезть если можно воспользоваться готовым контроллером и моделью товара: 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) {
Причем Vlad написал изначально в аналогичной теме правильный ответ, но почему то вы оба не в ту степь пошли.
лезть в библиотеку может и будет оправдано, когда база будет нагружена итд. Т.е мы разом получаем все данные в одном запросе.
Фиг знает, тут тестировать надо. В первом случае проц будет перенапрягаться, а во втором случае оперативка сервера. Палка о двух концах так сказать...
Вариантов плохих и хороших много не бывает! Пусть будут. Ведь на основании примеров можно еще что то прикрутить другое.
Это у меня только, или картинки товаров в корзине заменило на картинки производителей? Поправила, был немного неправильный запрос. Правильно так Код: $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'");
opencart 2.1.0.2 в файле \system\library\cart.php такой строки нету "$this->data[$key] = array( ... );" Сам массив я нашел, он начинается строкой $product_data[] = array( но все равно не работает этот способ, ругается на строку из самого первого действия.
Не подскажете в файле \catalog\controller\checkout\cart.php куда вставлять данный код ?? И дальнейшие дествия про $product_id ?
Я смотрю любите вы готовые решения копи-пастить. Это соединяем с этим Получаем: Врубаем поисковик (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. пункт...
Большое спасибо!!! Я не то чтобы люблю готовые решения, просто попробовал и не получилось даже не пробовал а полдня провозился. Еще раз огромное спасибо!!!!!!