Дополнительное поле Описания в карточке товара OpenCart 3.x

6
4584

Для создания дополнительного поля в карточке товара в 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 }}

 

 

6 КОММЕНТАРИИ

  1. Сделал по инструкции, в админке появилось поле, в шаблоне не вылазит. Шаблон дефолтный, может проверите, вдруг чего-то не хватает?

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь