Как создать дополнительную вкладку в админке в карточке товара? OpenCart 2.x
Не так давно передо мной поставили задачу создать в админке в карточке товара новое поле. Поле должно было отвечать за акцию, то есть в админке должно быть поле для ввода информации, а в карточке товара необходимо было вывести эту информацию. В интернете очень мало информации на эту тему, единственное, что я нашел, это бы ла статья для версии Opencart 3.x.
И так, первое что предстоит сделать — добавить в админке поле для ввода. Для этого заходим по следующему пути.
/admin/view/template/catalog/product_form.tpl
Находим место: (В моем случае это 63 строчка)
<div class="form-group">
<label class="col-sm-2 control-label" for="input-description<?php echo $language['language_id']; ?>"><?php echo $entry_description; ?></label>
<div class="col-sm-10">
<textarea name="product_description[<?php echo $language['language_id']; ?>][description]" placeholder="<?php echo $entry_description; ?>" id="input-description<?php echo $language['language_id']; ?>" data-lang="<?php echo $lang; ?>" class="form-control summernote"><?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['description'] : ''; ?></textarea>
</div>
</div>
После этой строчки добавляем новое поле, вставляя следующий код.
<div class="form-group">
<label class="col-sm-2 control-label" for="input-sostav<?php echo $language['language_id']; ?>">Акция</label>
<div class="col-sm-10">
<textarea name="product_description[<?php echo $language['language_id']; ?>][sostav]" placeholder="Введите подарок" id="input-sostav<?php echo $language['language_id']; ?>" data-lang="<?php echo $lang; ?>" class="form-control summernote"><?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['sostav'] : ''; ?></textarea>
</div>
</div>
Далее заходим в контролер этого файла, по такому пути:
/admin/controller/catalog/product.php
Находим вот такой код, в моем случае это 821 строчка и ниже вставляем код, который ниже
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();
}
if (isset($this->request->post['sostav'])) {
$data['sostav'] = $this->request->post['sostav'];
} elseif (isset($this->request->get['product_id'])) {
$data['sostav'] = $this->model_catalog_product->getProductDescriptions($this->request->get['product_id']);
} else {
$data['sostav'] = array();
}
Заходим в модель этого файла по пути:
/admin/model/catalog/product.php
Находим такой код:
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']) . "', 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']) . "'");
}
В моем случае это 12 строчка.
Меняем полностью 13 строчку на:
$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']) . "', sostav = '" . $this->db->escape($value['sostav']) . "', description = '" . $this->db->escape($value['description']) . "', tag = '" . $this->db->escape($value['tag']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_h1 = '" . $this->db->escape($value['meta_h1']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
Теперь в админке в карточке товара должно появиться новое поле.
Пол дела уже сделано. Осталось сделать вывод данных из этого поля в карточке товара, пользовательской части.
Для этого заходим в кантролер карточки товара по пути:
/catalog/controller/product/product.php
Находим вот это место в моем случае 298 строчка
$data['points'] = $product_info['points'];
Добавляем ниже
$data['sostav'] = html_entity_decode($product_info['sostav'], ENT_QUOTES, 'UTF-8');
Заходим в модель карточки товара по пути:
catalog/model/product/product.php
Ищем условие —
if ($query->num_rows) {
Ниже добавляем следующий код:
$newtabcontent_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_description WHERE product_id = '" . (int)$product_id . "' AND language_id = '" . (int)$this->config->get('config_language_id') . "'");
if($newtabcontent_query->num_rows) {
$sostav = $newtabcontent_query->row['sostav'];
} else {
$sostav = "";
}
Ниже находим строчку
'product_id' => $query->row['product_id'],
Ниже добавляем
'sostav' => $sostav,
Теперь заходим в сам шаблон карточки товара по пути:
/catalog/view/theme/ВАША ТЕМА/template/product/product.tpl
И здесь уже решать вам в каком месте вы хотите выводить текст)
В нужном месте вставляем вот такой код
<?php if ($sostav) { ?>
<div>
<p><?php echo $sostav; ?></p>
</div>
<?php } ?>
Кому была полезна эта информация буду очень благодарен если пожертвуйте на развитие сайта. Спасибо!