Для создания дополнительного поля в карточке товара в CMS OpenCart 3.x нужно добавить запись в БД, добавить код в админ-панель (back-end) и на фронтальную часть сайта (front-end).
Создадим поле description2 в БД (с настройками как и поле description)
Далее, откроем файл /admin/view/template/catalog/product_form.twig
после блока
<div class="form-group"> <label class="col-sm-2 control-label" for="input-description{{ language.language_id }}">{{ entry_description }}</label> <div class="col-sm-10"> <textarea name="product_description[{{ language.language_id }}][description]" placeholder="{{ entry_description }}" id="input-description{{ language.language_id }}" data-toggle="summernote" data-lang="{{ summernote }}" class="form-control">{{ product_description[language.language_id] ? product_description[language.language_id].description }}</textarea> </div> </div>
добавим блок
<hr> <div class="form-group"> <label class="col-sm-2 control-label" for="input-description{{ language.language_id }}">Описание товара в карточке 2</label> <div class="col-sm-10"> <textarea name="product_description[{{ language.language_id }}][description2]" placeholder="{{ entry_description }}" id="input-description2{{ language.language_id }}" data-toggle="summernote" data-lang="{{ summernote }}" class="form-control">{{ product_description2[language.language_id] ? product_description[language.language_id].description2 }}</textarea> </div> </div>
Файл /admin/controller/catalog/product.php
После блока
if (isset($this->request->post['product_description'])) { $data['product_description'] = $this->request->post['product_description']; } elseif (isset($this->request->get['product_id'])) { $data['product_description'] = $this->model_catalog_product->getProductDescriptions($this->request->get['product_id']); } else { $data['product_description'] = array(); }
добавим блок
// descr 2 if (isset($this->request->post['product_description2'])) { $data['product_description2'] = $this->request->post['product_description2']; } elseif (isset($this->request->get['product_id'])) { $data['product_description2'] = $this->model_catalog_product->getProductDescriptions($this->request->get['product_id']); } else { $data['product_description2'] = array(); }
Файл /admin/model/catalog/product.php
Запрос к БД в районе 12-13 строки должен выглядеть так (дописали сохранение поля description2):
foreach ($data['product_description'] as $language_id => $value) { $this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', description = '" . $this->db->escape($value['description']) . "', description2 = '" . $this->db->escape($value['description2']) . "', tag = '" . $this->db->escape($value['tag']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'"); }
В районе 147 строки запрос должен выглядеть так (дописали функционал для поля description2):
foreach ($data['product_description'] as $language_id => $value) { $this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', description = '" . $this->db->escape($value['description']) . "', description2 = '" . $this->db->escape($value['description2']) . "', tag = '" . $this->db->escape($value['tag']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'"); }
Далее, в методе getProductDescriptions (433 строка) — дописали строку:
‘description2’ => $result[‘description2’],
Должно выглядеть вот так:
foreach ($query->rows as $result) { $product_description_data[$result['language_id']] = array( 'name' => $result['name'], 'description' => $result['description'], 'description2' => $result['description2'], 'meta_title' => $result['meta_title'], 'meta_description' => $result['meta_description'], 'meta_keyword' => $result['meta_keyword'], 'tag' => $result['tag'] ); }
После этих действий в админ-панели в карточке товара появится новое поле, оно уже сохраняет данные:
Далее выведем описание в карточку товара на сайте.
Откроем файл /catalog/model/catalog/product.php
В районе 14 строки после строки
‘description’ => $query->row[‘description’],
Вставим строку
‘description2’ => $query->row[‘description2’],
Файл /catalog/controller/product/product.php
После строки
$data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8');
Вставим строку
$data['description2'] = html_entity_decode($product_info['description2'], ENT_QUOTES, 'UTF-8');
После строки
‘price’ => $price,
Вставим строку
‘description2’ => html_entity_decode($result[‘description2’]),
В файле /catalog/view/theme/[название_темы]/template/product/product.twig
В нужном месте делаем вывод описания на сайте в карточке товара, вставим строку
{{ description2 }}
Сделал по инструкции, в админке появилось поле, в шаблоне не вылазит. Шаблон дефолтный, может проверите, вдруг чего-то не хватает?
скорее всего не обновили модификаторы
Спасибо ты настоящий друг! ++++++++
Спасибо большое! Очень подробно, всё получилось. Opencart 3.0.3.7
Cool + for the post
very good