Описание производителя в OpenCart
|в OpenCart можно добавить описание практически ко всему, начиная от товара, заканчивая категориями. Но, к сожалению, в новых версиях OpenCart не предусмотрен вывод описания производителя. В этой статье мы рассмотрим как сделать вывод описания производителя на любой шаблон в OpenCart. Само собой рассмотрим ошибки и как это устранить.
Что надо знать перед любой работой.
- Желательно сделать резервную копию всех файлов которые лежат на FTP
- Желательно сделать резервную копию SQL базы сайта
- Обязательно, перед тем как менять файл сделайте его копию прямо на FTP ( evitahost ), к примеру как на картинке ниже. Файл manufacturer_info.tpl над которым мы работаем, и его копия «manufacturer_info_2.tpl» на случай если что-то пойдет не так.
- После того как мы добились того что хотели, обязательно переименуйте копию файла в нормальное описание, чтобы вы знали какая именно в них разница. К примеру, на картинке выше это файлы «category-bez-cartinok-vo-vlogenih-categoriyah.tpl» и «product_s_bonysnimi-balami.tpl»
Если вы будете придерживаться инструкции выше, то шансы что вы навредите сайту минимальные.
Как добавить описание производителя в OpenCart. Панель администратора
Поскольку описание мы будем вводить в панели администратор, как и в случае с другими описаниями, то сначала давайте разберемся как добавить в панель администратора описание производителя. Шаг 1 в файле admin/controller/catalog/manufacturer.php Найдите функцию :
private function getForm() { |
И еще чуть ниже строчки:
$this->data['button_save'] = $this->language->get('button_save'); $this->data['button_cancel'] = $this->language->get('button_cancel'); |
Добавьте сразу после них такой код:
$this->data['entry_meta_keywords'] = $this->language->get('entry_meta_keywords'); $this->data['entry_meta_description'] = $this->language->get('entry_meta_description'); $this->data['entry_description'] = $this->language->get('entry_description'); $this->data['tab_general'] = $this->language->get('tab_general'); $this->data['tab_wdata'] = $this->language->get('tab_data'); |
Шаг 2 в том же файле найдите код.
if (isset($this->request->get['manufacturer_id']) && ($this->request->server['REQUEST_METHOD'] != 'POST')) { $manufacturer_info =$this->model_catalog_manufacturer->getManufacturer($this->request->get['manufacturer_id']);} |
Скорее всего вы не сможете найти его целиком, поэтому попробуйте найти только первую его часть:
if (isset($this->request->get['manufacturer_id']) && ($this->request-> |
и сразу после него вставьте. (После всего кода, который в начале шага, а не после его части. Пункт с частью, был приведен чтобы вы быстрее нашли нужный участок!)
$this->model_catalog_manufacturer->w_manufacturerDescriptionInstall(); /* create database table */ $this->load->model('localisation/language'); $this->data['languages'] = $this->model_localisation_language->getLanguages(); if (isset($this->request->post['manufacturer_description'])) { $this->data['manufacturer_description'] = $this->request->post['manufacturer_description']; } else if (isset($manufacturer_info)) { $this->data['manufacturer_description'] = $this->model_catalog_manufacturer->getManufacturerDescriptions($this->request->get['manufacturer_id']); } else { $this->data['manufacturer_description'] = array(); } |
Шаг 3 в файле
admin/language/russian/catalog/manufacturer.php |
В самом конце, перед закрывающимся тегом
?> |
добавьте код:
$_['entry_meta_keywords'] = 'Meta Tag Keywords:'; $_['entry_meta_description'] = 'Meta Tag Description:'; $_['entry_description'] = 'Description:'; |
Шаг 4 в файле admin/model/catalog/manufacturer.php
Найдите функцию
public function addManufacturer($data) { |
В ней найдите строчку
if (isset($data['manufacturer_store'])) { |
И перед этой строчкой вставьте код:
foreach ($data['manufacturer_description'] as $language_id => $value) { $this->db->query("INSERT INTO " . DB_PREFIX . "manufacturer_description SET manufacturer_id = '" . (int)$manufacturer_id . "', language_id = '" . (int)$language_id . "', meta_keywords = '" . $this->db->escape($value['meta_keywords']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "'"); } |
Шаг 5 в этом же файле Найдите функцию:
public function editManufacturer($manufacturer_id, $data) { |
После нее найдите код:
$this->db->query("DELETE FROM " . DB_PREFIX . "manufacturer_to_store WHERE manufacturer_id = '" . (int)$manufacturer_id . "'"); |
Перед этим кодом вставьте такие строки:
$this->db->query("DELETE FROM " . DB_PREFIX . "manufacturer_description WHERE manufacturer_id = '" . (int)$manufacturer_id . "'"); foreach ($data['manufacturer_description'] as $language_id => $value) { $this->db->query("INSERT INTO " . DB_PREFIX . "manufacturer_description SET manufacturer_id = '" . (int)$manufacturer_id . "', language_id = '" . (int)$language_id . "', meta_keywords = '" . $this->db->escape($value['meta_keywords']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "'"); } |
Шаг 6 в этом же файле Найдите код:
public function getTotalManufacturers() { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "manufacturer"); return $query->row['total']; } |
После него вставьте:
public function getManufacturerDescriptions($manufacturer_id) { $manufacturer_description_data = array(); $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "manufacturer_description WHERE manufacturer_id = '" . (int)$manufacturer_id . "'"); foreach ($query->rows as $result) { $manufacturer_description_data[$result['language_id']] = array( 'meta_keywords' => $result['meta_keywords'], 'meta_description' => $result['meta_description'], 'description' => $result['description'] ); } return $manufacturer_description_data; } public function w_manufacturerDescriptionInstall() { $sql = " CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "manufacturer_description` ( `manufacturer_id` int(11) NOT NULL, `language_id` int(11) NOT NULL, `meta_keywords` varchar(255) NOT NULL, `meta_description` varchar(255) NOT NULL, `description` text NOT NULL, PRIMARY KEY (`manufacturer_id`,`language_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; "; $query = $this->db->query($sql); } <span style="line-height: 1.5em;"> </span> |
Шаг 7 замените
admin/view/template/catalog/manufacturer_form.tpl |
файлом по ссылке. Обязательно сделайте резервную копию старого файла. Все. административную часть мы закончили. Теперь вы можете зайти в Каталог->Производители и внести пробные описания.
Вывести описание производителя в OpenCart. Выводим на сайт
После того как мы внесли все правки в панель администратора. Теперь надо внести правки в файлы сайта, чтобы собственно выводилось описание. Шаг 8 в файле
catalog/controller/product/manufacturer.php |
После строки:
$this->document->title = $manufacturer_info['name']; |
Если у вас этой строчки нет, то найдите:
$this->document->setTitle($manufacturer_info['name']); |
Добавьте код:
$this->model_catalog_manufacturer->w_manufacturerDescriptionInstall(); /* create database table */ $w_manufacturerDescription = $this->model_catalog_manufacturer->getManufacturerDescription($this->request->get['manufacturer_id']); if ($w_manufacturerDescription) { $this->document->keywords = $w_manufacturerDescription['meta_keywords']; $this->document->description = $w_manufacturerDescription['meta_description']; $this->data['description'] = html_entity_decode($w_manufacturerDescription['description'], ENT_QUOTES, 'UTF-8'); } |
Шаг 9 в файле
catalog/controller/product/manufacturer.php |
В конце файла найдите строки:
} ?> |
И перед ним добавьте код
$this->model_catalog_manufacturer->w_manufacturerDescriptionInstall(); /* create database table */ <span style="line-height: 1.5em;">$w_manufacturerDescription = $this->model_catalog_manufacturer->getManufacturerDescription($this->request->get['manufacturer_id']);</span> if ($w_manufacturerDescription) { $this->document->keywords = $w_manufacturerDescription['meta_keywords']; $this->document->description = $w_manufacturerDescription['meta_description']; <span style="line-height: 1.5em;">$this->data['description'] = html_entity_decode($w_manufacturerDescription['description'], ENT_QUOTES, 'UTF-8');</span> } |
Шаг 10 в файле
catalog/view/theme/Ваша-Тема/template/product/manufacturer.tpl |
Если у вас такого файла нет, ищите
catalog/view/theme/Ваша-Тема/template/product/manufacturer_info.tpl |
Перед строчкой
<div_class="sort" > |
(Когда будете искать, поставьте скобку в начале < и в конце > без пробелов)
Добавьте код
<?php if (isset($description) || isset($thumb)) { ?> <table style="padding-bottom:10px;"> <tr> <?php if (isset($thumb)) { ?> <td><img src="<?php echo $thumb; ?>" alt="<?php echo $heading_title; ?>" /></td> <?php } ?> <?php if (isset($description)) { ?> <td><?php echo $description; ?></td> <?php } ?> </tr> </table> <?php } ?> |
Работа над возможными ошибками. Ошибка №1 Если у вас после всех изменений не грузиться страница с производителем вам надо, в файле catalog/controller/product/manufacturer.php удалить строчки
$this->document->keywords = $w_manufacturerDescription['meta_keywords']; $this->document->description = $w_manufacturerDescription['meta_description']; |
Они отвечают за вывод ключевых слов, и описания для Google. Ошибка №2 Если у вас описание производителя выводится сразу после «Вид: Список / Сетка» и вы хотите перенести его ниже, вам надо: Код в шаге 10 разместить перед строчками
<div class="product-compare"><a href="<?php echo $compare; ?>" id="compare-total"><?php echo $text_compare; ?></a></div> <div class="product-list"> |
Если вы не найдете строчки выше (в зависимости от шаблона), то разместите после
<?php } ?> <?php } ?> </select> </div> </div> |
Ошибка №3 Если у вас описание выводиться и сверху, и снизу, как показано на картинке снизу: То в том же файле catalog/controller/product/manufacturer.php удалите строчку
<div><?php echo $description; ?></div> |
На этом все. Если вы все сделали по инструкции, то у вас все должно получится. Если у вас возникли какие либо проблемы и вопросы, пишите в комментариях, попробую помочь.
Здравствуйте, Спасибо за статью!
Посмотрите, пожалуйста, в конце шага 6 в коде, который нужно вставить, у Вас там span приписался в самом конце. И так же в шаге 9.
В шаге 9, вероятно, путь нужного файла не тот указан. Судя по изображению этот файл должен быть — catalog/model/catalog/manufacturer.php
С изменениями в админке все прошло удачно (в шаге 7 корректировала свой файл в соответствии с Вашим, т.к. при замене Вашим файлом чуток ломалась верстка и переставала работать загрузка изображения). Описание производителя сохраняется.
Проблема с отображением на сайте (OpenCart 1.5.6):
Страница производителя не грузится, белый экран с ошибкой (строки с keywords и description закомментированы) (есть два варианта):
1 вариант. После добавления кода перед «} ?>» в файле /catalog/model/catalog/manufacturer.php
Ошибка «Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in /home/user/www/dashka.webmedia.by/catalog/model/catalog/manufacturer.php on line 59»
Привожу кусок кода из этого файла (строка 59 помечена):
$this->cache->set(‘manufacturer.’ . (int)$this->config->get(‘config_store_id’), $manufacturer_data);
}
return $manufacturer_data;
}
}
$this->model_catalog_manufacturer->w_manufacturerDescriptionInstall();
$w_manufacturerDescription = $this->model_catalog_manufacturer->getManufacturerDescription($this->request->get[‘manufacturer_id’]);
if ($w_manufacturerDescription) {
//$this->document->keywords = $w_manufacturerDescription[‘meta_keywords’];
//$this->document->description = $w_manufacturerDescription[‘meta_description’];
$this->data[‘description’] = html_entity_decode($w_manufacturerDescription[‘description’], ENT_QUOTES, ‘UTF-8’);
}
}
?>
2 вариант. Если закомментировать вставленные строки в первом варианте, то вылазит ошибка такая:
Fatal error: Call to undefined method ModelCatalogManufacturer::w_manufacturerDescriptionInstall() in /home/user17551013402/www/dashka.webmedia.by/catalog/controller/product/manufacturer.php on line 133
if ($manufacturer_info) {
$this->document->setTitle($manufacturer_info[‘name’]);
$this->document->addScript(‘catalog/view/javascript/jquery/jquery.total-storage.min.js’);
$this->model_catalog_manufacturer->w_manufacturerDescriptionInstall(); /* create database table */
$w_manufacturerDescription = $this->model_catalog_manufacturer->getManufacturerDescription($this->request->get[‘manufacturer_id’]);
if ($w_manufacturerDescription) {
//$this->document->keywords = $w_manufacturerDescription[‘meta_keywords’];
//$this->document->description = $w_manufacturerDescription[‘meta_description’];
$this->data[‘description’] = html_entity_decode($w_manufacturerDescription[‘description’], ENT_QUOTES, ‘UTF-8’);
}
$url = »;
Буду рада, если подскажите как быть!
В самом начале у меня загвостка, нет private function getForm() {
Но 2 строчки, что у вас ниже, которые нужно найти есть, но они в контейнере protected function getForm() {