Title, description и keywords для категорий и "информации"

Рассмотрим, как в cms Opencart добавить мета описание, ключевые слова для информационных страниц, а так же title для этих же страниц и страниц категорий. 

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

Метатеги в Opencart выводятся через контроллер, в данном случае "/catalog/controller/product/category.php". Открываем файл и ищем здесь следующее:

if ($category_info) { $this->document->setTitle($category_info['name']); 
$this->document->setDescription($category_info['meta_description']);
 $this->document->setKeywords($category_info['meta_keyword']);
........

Пока что нас интересует только первое - Title. Изначально в тайтле дублируется название категории "name", соответственно что бы вывести в тайтл что-то другое, необходимо добавить возможность записать нужные данные в БД, а затем их вывести в контроллер. 

Часть 1 - админка. 

1. добавляем новое поле в шаблон формы категории (/admin/view/template/catalog/category_form.tpl) - находим:

<tr>
<td><?php echo $entry_meta_description; ?></td>
..........

И перед этим вставляем:

<tr>
 <td>Title (тайтл)</td>
<td><input type="text" name="category_description[<?php echo $language['language_id']; ?>][meta_title]" size="100" value="<?php echo isset($category_description[$language['language_id']]) ? $category_description[$language['language_id']]['meta_title'] : ''; ?>" />
<?php if (isset($error_name[$language['language_id']])) { ?>
<span class="error"><?php echo $error_name[$language['language_id']]; ?></span>
<?php } ?></td>
</tr>

Поле есть, теперь необходимо добавить запись значений данного поля в БД и вывод обратно для редактирования, открываем "/admin/model/catalog/category.php"

2. Находим:

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

Добавляем сюда:

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

Получаем:

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

Будет две в которых необходимо сделать данную замену, у меня это 13 и 67

Далее в этом же файле - "public function getCategoryDescriptions", после 

'name'             => $result['name'],

добавляем

'meta_title'             => $result['meta_title'],

​Теперь в админке появилось новое поле для добавления Title страницы категории, но при попытке сохранения данных в этом поле получим ошибку, т.к. нет соответствующего столбца в таблице БД. Добавить можно либо вручную, либо добавив запись в контроллере.

3.1. Добавляем вручную, через phpmyadmin:

скриншот из phpmyadmin

3.2. Во втором случае (если решили добавить вручную, это можно пропустить.. пару раз были ошибки с этим вариантом.. как-нибудь посмотрю в чем дело. лучше phpmyadmin), в "admin/controller/catalog/category.php" находим:

 

public function index() {

и сразу за открывающей скобкой добавляем:

$query = $this->db->query("DESC ".DB_PREFIX."category_description meta_title");
if (!$query->num_rows) {
$this->db->query("ALTER TABLE `" . DB_PREFIX . "category_description` ADD `meta_title` varchar(255) NOT NULL COMMENT '' COLLATE utf8_bin AFTER name;");
}

Это добавит соответствующий столбец при первом обращении к файлу, затем данную запись можно удалить. Теперь данные в поле "title" должны добавляться в БД.

Теперь осталось вывести тайтл в <head>

Часть 2 - сайт

Открываем "/catalog/controller/product/category.php", находим "if ($category_info) {" и далее: 

$this->document->setTitle($category_info['name']);

Меняем на:

if ($category_info['meta_title']) {
	$this->document->setTitle($category_info['meta_title']);
} else {
	$this->document->setTitle($category_info['name']);}

Теперь "информация". Делаем по аналогии.

Открываем "/admin/view/template/catalog/information_form.tpl", находим:

<tr>
<td><span class="required">*</span> <?php echo $entry_description; ?></td>
<td><textarea name="information_description[<?php echo $language['language_id']; ?>][description]" id="description<?php echo $language['language_id']; ?>"><?php echo isset($information_description[$language['language_id']]) ? $information_description[$language['language_id']]['description'] : ''; ?></textarea>
<?php if (isset($error_description[$language['language_id']])) { ?>
<span class="error"><?php echo $error_description[$language['language_id']]; ?></span>
<?php } ?></td>
</tr>

Сразу после добавляем:

<tr>
<td>Title (тайтл)</td>
<td><input type="text" name="information_description[<?php echo $language['language_id']; ?>][meta_title]" size="100" value="<?php echo isset($information_description[$language['language_id']]) ? $information_description[$language['language_id']]['meta_title'] : ''; ?>" />
<?php if (isset($error_name[$language['language_id']])) { ?>
<span class="error"><?php echo $error_name[$language['language_id']]; ?></span>
<?php } ?></td>
</tr>
<tr>
<td>Description (мета описание)</td>
<td><textarea name="information_description[<?php echo $language['language_id']; ?>][meta_description]" cols="40" rows="5"><?php echo isset($information_description[$language['language_id']]) ? $information_description[$language['language_id']]['meta_description'] : ''; ?></textarea></td>
</tr>
<tr>
<td>Keywords (Мета ключевые слова)</td>
<td><textarea name="information_description[<?php echo $language['language_id']; ?>][meta_keyword]" cols="40" rows="5"><?php echo isset($information_description[$language['language_id']]) ? $information_description[$language['language_id']]['meta_keyword'] : ''; ?></textarea></td>
</tr>

Открываем /admin/model/catalog/information.php, находим description = '" . $this->db->escape($value['description'])

Добавляем перед этим (в двух строках):

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

Находим: 

'description' => $result['description']

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

'meta_title'  => $result['meta_title'],
'meta_keyword'     => $result['meta_keyword'],
'meta_description' => $result['meta_description'],

Теперь добавим столбцы в таблицу information_description (по аналогии с тайтлом для категории) и вывод в контроллере - /catalog/controller/information/information.php, меняем:

if ($information_info) {
$this->document->setTitle($information_info['title']);

на

if ($information_info['meta_title']) {
$this->document->setTitle($information_info['meta_title']);
$title_cat = $information_info['meta_title'];
} else {
$title_cat = $information_info['name'];
}if ($information_info) {
$this->document->setTitle($title_cat);
$this->document->setDescription($information_info['meta_description']);
$this->document->setKeywords($information_info['meta_keyword']);

 

скачать (vqmod)

Еще 4 материала, которые возможно Вам понравятся:

Добавить комментарий

Комментарии (6)

  1. Лекс 03 июня 2016, 08:52
    Здравствуйте! Подскажите есть ли подобный способ выводить H1 в карточке товара? Я их заполняю, а в коде их нет. OcStore 2.1.x
    1. Александр 25 декабря 2015, 12:05
      В самом последнем коде в последней строке фиг.скобочку закройте
      1. Владимир 25 декабря 2015, 12:13(Комментарий был изменён)
        Хм… так все же верно — вверху — код который нужно заменить, там так же скобки закрывающей нет, дальше еще есть код внутри.
      2. Андрей 02 июня 2014, 23:57
        Здравствуйте.
        Ваше решение у меня заработало только после мелких изменений, а именно - изменил "title" на "meta_title":
        Часть 1, пункт 1 ( (/admin/view/template/catalog/category_form.tpl) ):

        [quote] Title (тайтл)[/quote]

        С уважением.
        1. Владимир 03 июня 2014, 06:34
          Да, действительно. спасибо. Исправил, так же немного подправил изменения в контроллере каталога
        2. Андрей 02 июня 2014, 23:56
          Здравствуйте.
          Ваше решение у меня заработало только после мелких изменений, а именно - изменил "title" на "meta_title":
          Часть 1, пункт 1 ( (/admin/view/template/catalog/category_form.tpl) ):

          Title (тайтл)

          С уважением.