OpenCart: мета-теги description и keywords для раздела «статьи» (information)

В данной статье рассмотрим  как добавить возможность редактировать мета-теги «description» и «keywords» для модуля «статьи» (information для англ. версии) CMS OpenCart.

CMS OpenCart — это бесплатный открытый движок для создания интернет магазина. Углубляться в подробности работы этой системы управления контентом в данной статье я не буду. Скажу только, что разобраться с принципом его работы и процессом добавления нового функционала можно довольно быстро, т.к. он построен по шаблону MVC.

Зачем нужны мета-теги «description» и «keywords» для сайта?

Мета-теги являются частью языка разметки HTML. Конкретно description и keywords предназначен для поисковых систем, чтобы они приняли во внимание конкретную тематику интернет страницы и соответствующие ключевые слова.

Принимают ли поисковики во внимание содержание мета-тегов «description» и «keywords«?

Тут я лучше воздержусь от конкретики, т.к. «сколько людей, столько и мнений».
Лично я являюсь приверженцем данных тегов. Знаю случаи, когда доказывают «они никак не влияют на результат выдачи в поисковых системах». Я больше доверяю SEO-специалистам, а они ОБЯЗАТЕЛЬНО требуют возможности редактирования тегов description и keywords. 

Почему возможности редактирования description и keywords для статей нет в OpenCart?

Я был удивлен когда узнал, что для товаров и категорий есть возможность редактировать мета-теги description и keywords, а раздел «статьи» остался обделен вниманием. Это касалось CMS OpenCart версий 1.5.1.3 — 1.5.4.1 и как оно будет дальше неизвестно.

Приступим к самому процессу, который я проводил на версии 1.5.4.1 (думаю, подойдет и к другим версиям 1.5.*)

Нам понадобятся прямые руки, голова, текстовый редактор, php и клиент mysql.

1-Этап

Разберемся для начала с административной частью, чтобы мы могли нормально вносить значения description и keywords (далее DK). В административной части правок коснутся 4 файла (контроллер, модель, представление, языковый файл) и база данных.

  1. База данных. Заходим в любимый mysql-client (кто в командной строке, кто в phpMyAdmin и др.) и выполняем в контексте БД OpenCart скрипт:
    ALTER TABLE `oc_information_description` ADD `meta_description` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL ,
    ADD `meta_keyword` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

    Не забываем поменять приставку «oc_», если вы ее меняли при установке.
  2. Представление. Надо отредактировать файл «admin/view/template/catalog/information_form.tpl«. После 27 строки вставляем следующий текст (он должен получится в блоке <table class=»form»>)
    <tr>
    <td><?php echo $entry_meta_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><?php echo $entry_meta_keyword; ?></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>
  3. Контроллер. Надо отредактировать файл «admin/controller/catalog/information.php» . После 270 строки вставить текст (он должен получиться быть в методе getForm)
    $this->data['entry_meta_keyword'] = $this->language->get('entry_meta_keyword');
    $this->data['entry_meta_description'] = $this->language->get('entry_meta_description');
  4. Модель. Надо отредактировать файл «admin/model/catalog/information.php». После 142 строки вставить следующий текст
    'meta_keyword' => $result['meta_keyword'],
    'meta_description' => $result['meta_description'],

    В 39й строке после слова SET (не забыть пробел) вставить текст

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

    В 9й строке произвести аналогичную операцию.
    (Делаем с конца файла, чтобы не сбить порядок строк)
  5. Редактируем языковый файл. Необходимо в файл «admin/language/english/catalog/information.php» внести следующие строки после  14й строки
    $_['entry_meta_keyword'] = 'Meta Tag Keywords:';
    $_['entry_meta_description'] = 'Meta Tag Description:';

    Если у Вас есть другой языковый файл, сделайте по аналогии.

     

Административная часть закончена и мы уже можем редактировать данные поля через «админку». Осталось закончить второй этап для вывода нужной информации.

2-Этап

Тут все будет намного проще. Нужно будет отредактировать ОДИН файл

  1. Контроллер. Редактируем файл «catalog/controller/information/information.php».
    После 24й строки в блок «if» вставляем строки
    $this->document->setDescription($information_info['meta_description']);
    $this->document->setKeywords($information_info['meta_keyword']);
  2. Вот и все)

vQmod напишу, если кому-то это будет необходимо.

Жду комментариев и отзывов по результатам модификаций.

OpenCart: мета-теги description и keywords для раздела «статьи» (information): 30 комментариев

    • Согласен, похоже на правду.
      Именно сейчас и попробую, т.к. собираюсь обновить OpenCart, а работы «руцями» уже сделано много).
      Следовательно, написание своего vqmod для мета-тегов description и keywords откладывается.
      Буду надеяться, что статья будет позновательна для начинающих разработчиков модулей OpenCart.

    • Имя БД изменено на мою.
      Запрос в БД прошел успешно.
      В админке меню появилоь,
      но на странице описание не появляется.

      При попытке зайти по ссылке на любую статью, в VQMod Менеджере появляется ошибка на фаил
      vqmod_meta_description_for_information_pages.xml :

      SEARCH NOT FOUND (ABORTING MOD): $this->document->setTitle($information_info[‘title’]);

  1. Не работает в 1.5.5.1 , почему-то не добавляет в базу. Все сделал как надо, но не работает.
    Помогите плиз!

    p.s. У вас опечатка в коде, в последнем шаге: meta_keyword[S]

    • Здравствуйте, Sanek. А что говорят лог файлы? И как именно «не работает»? Вы выполняли мои действия, либо установили vqmod из ссылки указанной выше?
      «p.s. У вас опечатка в коде, в последнем шаге: meta_keyword[S]»
      Вы, наверное, сравниваете с файлом из ссылки на vqmod выше? Он не мой, и у меня по всему коду идет «meta_keyword» без [s], чтобы не путать.

    • Всегда пожалуйста!
      Сам не знаю почему, но opencart мне очень понравился с первого знакомства: легкий в обучении, скорость работы, простой код движка и возможность легко расширить функционал своими модулями, стандартный набор функций очень объемный, большое количество дополнительных модулей, большое сообщество.
      Вот так.

  2. Добрый день.
    Имя БД изменено на мою.
    Запрос в БД прошел успешно.
    В админке меню появилоь,
    но на странице описание не появляется.

    При попытке зайти по ссылке на любую статью, в VQMod Менеджере появляется ошибка на фаил
    vqmod_meta_description_for_information_pages.xml :

    SEARCH NOT FOUND (ABORTING MOD): $this->document->setTitle($information_info[‘title’]);

    • Здравствуйте, Vad.
      К сожалению, в этой статье я совсем не описывал процедуру работы с VQMod.
      Скорее всего, Вы проследовали по ссылке Юрия (и «мопед не мой»=)).
      Попробуйте просмотреть файл vqmod_meta_description_for_information_pages.xml. Там найдите в каком файле он ищет эту строку. Дальше по обстоятельствам.

      • Приношу извинения, не внимателен. Оставил комментарии для Юрия.
        PS
        Кстати по данному вопросу, я не супер программист, куда все же копать в файле vqmod_meta_description_for_information_pages.xml.

        И еще если мой запрос БД
        был вот такой:

        ALTER TABLE `oc_information_description` ADD `meta_keywords` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;
        ALTER TABLE `oc_information_description` ADD `meta_description` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;

        Могули я воспользоваться вашим методом!
        Спасибо.

        • Конечно, но тогда замените все упоминания meta_keyword на meta_keywords. Проще было бы разобраться, что vqmod ищет и дать ему правильную строку.

  3. Vad, убедитесь, что в Вашем файле «catalog/controller/information/information.php» есть строка «$this->document->setTitle($information_info[‘title’]);». (Вот как здесь)

    • Все проверил, строка на месте.
      Что за фигня с файлом vqmod от
      горе разработчика Юрия (maurotto).
      Написал ему, ни ответа ни привета

    • Пишу вам в третий раз.
      Почему удаляете комментарии!
      Строка
      «$this->document->setTitle($information_info[‘title’]);

      наместе!!!

      • =) Я не удаляю. У меня нет времени «Одобрить» комментарий. До тех пор, пока комментарий не будет «Одобрен», он не появится на блоге. Это, по большей степени, борьба против спама.

  4. Здравствуйте, я пытаюсь добавить мета-теги «description» и «keywords» для ocStore 0.2.0. Дохожу до пункта 4, но у меня в файле admin/model/catalog/information.php в 39 строке нет SET. У меня она выглядит так с 36 по 40 строку:
    if (isset($data[‘information_store’])) {
    foreach ($data[‘information_store’] as $store_id) {
    $this->db->query(«INSERT INTO » . DB_PREFIX . «information_to_store (information_id, store_id) VALUES (‘» . (int)$information_id . «‘, ‘» . (int)$store_id . «‘)»);
    }
    }
    Подскажите, куда мне добавить meta_keyword = ‘» . $this->db->escape($value[‘meta_keyword’]) . «‘, meta_description = ‘» . $this->db->escape($value[‘meta_description’]) . «‘,

    • Добрый день, Krir.
      Нам нужно что-то похожее на это, т.е. что-то рядом с «information_description».
      Дайте ссылку на Ваш файл, я постараюсь помочь.

  5. Здравствуйте! После сохранения статьи c новыми мета-тегами вылазит ошибка:

    Warning: Cannot modify header information — headers already sent by (output started at /home/user1144136/www/demo25860.atservers.net/admin/language/russian/catalog/information.php:1) in /home/user1144136/www/demo25860.atservers.net/system/engine/controller.php on line 28Warning: Cannot modify header information — headers already sent by (output started at /home/user1144136/www/demo25860.atservers.net/admin/language/russian/catalog/information.php:1) in /home/user1144136/www/demo25860.atservers.net/system/engine/controller.php on line 29

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

    • Здравствуйте, Виталий. Если еще актуально, скорее всего, у вас в файле information.php пустая строка перед < ?php . Проверьте.

  6. Вопрос немножко не по теме, но больше не знаю к кому обратиться.

    На главной странице отсутствует мета-тег дескрипшн, хотя в админке поле заполнено…В чем может быть ошибка ?

    Хотя бы какие файлы проверить ?

    Спасибо.

  7. Спасибо автору статьи. Все сделал как в инструкции, шаг за шагом. все работает все получилось. Огромное спасибо

  8. Модифицировал сайт на OcStore 1.5.6.1 и… отлично всё заработало. Сразу. Только шаг 5 можно пропустить, метки к полям формы уже есть.
    Огромное спасибо автору!

    Хорошо бы еще сделать разные TITLE и H1. Они одинаковые на всех страницах. Это конечно ловкий ход разработчиков движка, но несколько нелепый с точки зрения поисковиков.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *