Задать вопрос
@Mileon

Как в opencart 3 добавить поле в описание категории?

Версия движка 3.0.2.0
Есть необходимость добавить второе описание для категории, условно пусть оно называется description_short
Так вот, я добавил поле в базу данных в таблицу oc_category_description "description_short" аналогично "description"

Добавил в admin/views/template/category_form.twig
<div class="form-group">
                    <label class="col-sm-2 control-label" for="input-description-short{{ language.language_id }}">{{ entry_description_short }}</label>
                    <div class="col-sm-10">
                      <textarea name="category_description[{{ language.language_id }}][description_short]" placeholder="{{ entry_description }}" id="input-description-short{{ language.language_id }}" data-toggle="summernote" data-lang="{{ summernote }}" class="form-control">{{ category_description[language.language_id] ? category_description[language.language_id].description_short }}</textarea>
                    </div>
                  </div>


Этот отрезок кода работает правильно, он отправляет правильную form data

Добавил в catalog/controller/product/category.php:
$data['description_short'] = html_entity_decode($category_info['description_short'], ENT_QUOTES, 'UTF-8');
// под подобной записью


В admin/model/catalog/category.php
Изменил следующие методы.

// в методе addCategory в первом фориче и в методе editCaterogy соответственно, так же в первом фориче

foreach ($data['category_description'] as $language_id => $value) {
			$this->db->query("INSERT INTO " . DB_PREFIX . "category_description SET category_id = '" . (int)$category_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', description = '" . $this->db->escape($value['description']) . "', description_short = '" . $this->db->escape($value['description_short']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
		}

// editCategory
foreach ($data['category_description'] as $language_id => $value) {
			$this->db->query("INSERT INTO " . DB_PREFIX . "category_description SET category_id = '" . (int)$category_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', description = '" . $this->db->escape($value['description']) . "', description_short = '" . $this->db->escape($value['description_short']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
		}


Что происходит?
В админке отображается вьюха правильно, данные с бд не приходят/не отображаются, то есть если я внесу изменения в бд вручную, то они не придут на клиент, там просто будет пустая строка

Далее, если я внесу в базу в эти поля какие то данные, то их по прежнему нигде не будет, но при этом если я отредактирую категорию, где есть запись в этом поле, то это поле станет пустой строкой

В чем может быть проблема??
  • Вопрос задан
  • 673 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
@VVCh
есть еще метод getProductDescriptions
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@martusya
Нужно еще в admin/controller/catalog/category.php примерно на 366 строке после кода
if (isset($this->request->post['category_description'])) {
$data['category_description'] = $this->request->post['category_description'];
} elseif (isset($this->request->get['category_id'])) {
$data['category_description'] = $this->model_catalog_category->getCategoryDescriptions($this->request->get['category_id']);
} else {
$data['category_description'] = array();
}
добавить (у меня переменная descript) следующий код:
if (isset($this->request->post['category_descript'])) {
$data['descript'] = $this->request->post['category_descript'];
} elseif (isset($this->request->get['category_id'])) {
$data['category_descript'] = $this->model_catalog_category->getCategoryDescriptions($this->request->get['category_id']);
} else {
$data['category_descript'] = array();
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы