OpenCart. Добавить новое поле на страницу категории

Например, необходимо добавить поле, которое будет выводить произвольный заголовок на странице категории, взамен штатному. За основу возмем название переменной heading_user_title.

1. Добавляем запрос в базу данных для создания нового поля:

ALTER TABLE `oc_category_description` ADD `heading_user_title` varchar(255) NOT NULL;

2. В шаблоне вывода категории /catalog/view/theme/тема/template/product/category.tpl заменяем строку:

<h1><?php echo $heading_user_title; ?></h1>

на

<?php if ($heading_user_title) { ?>
<h1><?php echo $heading_user_title; ?></h1>
<?php } ?>

3. В языковом файле /admin/language/russian/catalog/category.php добавляем поле:

$_['entry_heading_user_title'] = 'Произвольный заголовок';

4. В шаблоне админки редактирования категории /admin/view/template/catalog/category_form.tpl после:

<tr>
<td><?php echo $entry_description; ?></td>
<td><textarea name="category_description[<?php echo $language['language_id']; ?>][description]" id="description<?php echo $language['language_id']; ?>"><?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['description'] : ''; ?></textarea></td>
</tr>

добавляем поле

<tr>
<td><?php echo $entry_heading_user_title; ?></td>
<td><input type="text" name="category_description[<?php echo $language['language_id']; ?>][heading_user_title]" maxlength="255" size="100" value="<?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['heading_user_title'] : ''; ?>" /></td>
</tr>

5. В /admin/model/catalog/category.php в строку:

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']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "', seo_title = '" . $this->db->escape($value['seo_title']) . "', seo_h1 = '" . $this->db->escape($value['seo_h1']) . "'");
}

добавляем

heading_user_title = '" . $this->db->escape($value['heading_user_title']) . "',

код полностью будет выглядеть так:

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']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', description = '" . $this->db->escape($value['description']) . "', heading_user_title = '" . $this->db->escape($value['heading_user_title']) . "', seo_title = '" . $this->db->escape($value['seo_title']) . "', seo_h1 = '" . $this->db->escape($value['seo_h1']) . "'");
}

Аналогичные изменения делаем в строке ниже, примерно 66 строка.

Далее в функции:

foreach ($query->rows as $result) {
$category_description_data[$result['language_id']] = array(
'seo_title' => $result['seo_title'],
'seo_h1' => $result['seo_h1'],
'name' => $result['name'],
'meta_keyword' => $result['meta_keyword'],
'meta_description' => $result['meta_description'],
'description' => $result['description'],


);
}

добавляем строку:

'heading_user_title' => $result['heading_user_title']

и получаем такой код:

foreach ($query->rows as $result) {
$category_description_data[$result['language_id']] = array(
'seo_title' => $result['seo_title'],
'seo_h1' => $result['seo_h1'],
'name' => $result['name'],
'meta_keyword' => $result['meta_keyword'],
'meta_description' => $result['meta_description'],
'description' => $result['description'],
'heading_user_title' => $result['heading_user_title']

);
}

6. В файле /admin/controller/catalog/category.php после:

$this->data['entry_description'] = $this->language->get('entry_description');

добавляем

$this->data['entry_heading_user_title'] = $this->language->get('entry_heading_user_title');

7. В файле /catalog/controller/product/category.php после:

$this->data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8');

добавляем

$this->data['heading_user_title'] = html_entity_decode($category_info['heading_user_title'], ENT_QUOTES, 'UTF-8');

и после:

'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 300) . '..',

добавляем

'heading_user_title' => utf8_substr(strip_tags(html_entity_decode($result['heading_user_title'], ENT_QUOTES, 'UTF-8')), 0, 300) . '..',

 

 First maniac| 13.08.2015 10:23
Рейтинг
1 комментарий
22.11.2015 01:51
Все работает, но одновременно с этим появилась ошибка: «PHP Notice: Undefined index: heading_user_title ». В чем может быть причина?
Для написания комментария необходимо Войти или Зарегистрироваться
Войти на сайт