Для создания дополнительного поля в карточке товара в CMS OpenCart 3.x нужно добавить запись в БД, добавить код в админ-панель (back-end) и на фронтальную часть сайта (front-end).
Создадим поле description2 в БД (с настройками как и поле description)
Далее, откроем файл /admin/view/template/catalog/product_form.twig
после блока
1 2 3 4 5 6 |
<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> |
добавим блок
1 2 3 4 5 6 7 |
<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
После блока
1 2 3 4 5 6 7 |
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(); } |
добавим блок
1 2 3 4 5 6 7 8 |
// 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):
1 2 3 |
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):
1 2 3 |
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’],
Должно выглядеть вот так:
1 2 3 4 5 6 7 8 9 10 11 |
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
После строки
1 |
$data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8'); |
Вставим строку
1 |
$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
В нужном месте делаем вывод описания на сайте в карточке товара, вставим строку
1 |
{{ description2 }} |