Share this post on:

Как создать дополнительную вкладку в админке в карточке товара? 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 } ?>

Кому была полезна эта информация буду очень благодарен если пожертвуйте на развитие сайта. Спасибо!

Share this post on:

Leave a Comment

Ваш адрес email не будет опубликован.