Матвей Земсков

Заметки веб-мастера

Среда, 01 ноября 2017 20:53

Добавляем meta-теги на странице со списком элементов по тегам в компоненте K2

Оцените материал
(4 голосов)

Компонент K2 обладает богатым функционалом, связанным с организацией контента на сайте под управлением Joomla. Но на ряду с этим, в нем есть довольно серьезные недоработки. Некоторое время назад я обнаружил одну из них: почему-то на страницах тегов в административной части нет возможности указать содержимое мета-тегов (description и keywords).

Сейчас я расскажу вам, как можно исправить это упущение разработчиков компонента.

Для начала добавим в базу данных в таблицу #__k2_tags 2 поля: meta_description и meta_keywords.

Символы «#__» нужно заменить на префикс таблиц БД Joomla.

SQL

ALTER TABLE `#__k2_tags` ADD `meta_keywords` VARCHAR(255) NOT NULL;
ALTER TABLE `#__k2_tags` ADD `meta_description` VARCHAR(255) NOT NULL;

Для исправления нужно будет отредактировать некоторые файлы, входящие в состав K2. Причем, файлы эти расположены и административной части (/administrator/components/com_K2) и в публичной (/components/com_K2).

Давайте начнем с правок в административной части.

Шаг первый (админка)

Редактируем языковой файл /administrator/language/ru-RU/ru-RU.com_k2.ini. Добавляем в него новые элементы:

INI

K2_TAG_PAGE_META_DESCRIPTION="Описание (meta description) для страницы тега"
K2_TAG_PAGE_META_KEYWORDS="Ключевые слова (meta keywords) для страницы тега"
K2_META_DESCRIPTION_TOO_LARGE="Длина описания страницы (meta description) не должна превышать 150 символов"

Первые 2 будут заголовками полей, которые мы добавим для мета-тегов. Значение третьего параметра – это сообщение об ошибке, которое будет появляться в случае если длина строки будет больше допустимого значения.

Шаг второй (админка)

Изменяем шаблоны компонента в админке. У тегов в административной части K2 существует 2 шаблона: для списка тегов и для редактирования конкретного тега. Сначала предлагаю поправить шаблон списка: /administrator/components/com_k2/views/tags/tmpl/default.php. Добавим новые столбцы в таблицу.

PHP

<th class="center">Meta-Description</th>
 <th class="center">Meta-Keywords</th>
 …
<td class="k2Center center"><?php echo $row->meta_keywords; ?></td>
<td class="k2Center center"><?php echo $row->status; ?></td>

Затем шаблон для добавления и редактирования отдельного тега (/administrator/components/com_k2/views/tag/tmpl/default.php):

PHP

<li>
<div class="paramLabel">
<label for=""><?php echo JText::_('K2_TAG_PAGE_META_DESCRIPTION'); ?></label>
</div>
<div class="paramValue">
<textarea cols="50" rows="5" style="width:100%;" class="text_area K2TitleBox" name="meta_description" id="meta_description"><?php echo $this->row->meta_description; ?></textarea>
</div>
</li>
<li>
<div class="paramLabel">
<label for=""><?php echo JText::_('K2_TAG_PAGE_META_KEYWORDS'); ?></label>
</div>
<div class="paramValue">
<textarea cols="50" rows="5" style="width:100%;" class="text_area K2TitleBox" name="meta_keywords" id="meta_keywords"><?php echo $this->row->meta_keywords; ?></textarea>
</div>
</li>

На данный момент на странице появились поля для добавления мета-тегов к тегу, а в списке место для вывода их содержимого. Пока там пусто, да и добавить мы ничего не можем, потому что мы еще не поправили код в файле, который в конечном итоге обрабатывает данные перед добавлением их в Базу данных.

Шаг третий (админка)

Правим файл /administrator/components/com_k2/tables/k2tag.php. В этом файле код класса для работы с таблицей #__k2_tags.

В начале файла добавляем 2 свойства:

PHP

var $meta_description = null;
var $meta_keywords = null;

Далее «очищаем» их от HTML-кода и проверяем длину.

PHP

$this->meta_description = strip_tags(trim($this->meta_description));

if(mb_strlen($this->meta_description) > $params->get('metaDescLimit', 150)){
$this->setError(JText::_('K2_META_DESCRIPTION_TOO_LARGE'));
return false;
}
$this->meta_keywords = strip_tags(trim($this->meta_keywords));

На этом изменения в административной части компонента завершены. Переходим к публичной части. Сначала также изменим языковой файл.

Шаг первый (публичная часть)

Редактируем файл /language/ru-RU/ru-RU.com_k2.ini.

INI

K2_DISPLAYING_ITEMS_BY_TAG_METADESCRIPTION="На странице представлены материалы, помеченные тегом "

Сейчас немного опишем механизм работы. Тегов может быть довольно много и не у всех могут быть заполнены поля с описанием и ключевыми словами. Поэтому если они пустые, то мета тег description будет формироваться из указанной выше фразы и значения тега.

Шаг второй (публичная часть)

Изменяем содержимое с кодом логической части шаблона /components/com_k2/views/itemlist/view.html.php

Находим в файле строку case 'tag':. В этом блоке сначала заменяем строку, формирующую запрос к БД следующей:

PHP

$db->setQuery('SELECT id, name, meta_description, meta_keywords FROM #__k2_tags WHERE name = '.$db->quote($tag));

Под строкой, устанавливающей заголовок страницы $title = JText::_('K2_DISPLAYING_ITEMS_BY_TAG').' '.$tag->name; вставляем следующий блок кода:

PHP

$document = JFactory::getDocument();                                
// Set meta-description
$metaDescription = (!empty($tag->meta_description)) ? $tag->meta_description : JText::_('K2_DISPLAYING_ITEMS_BY_TAG_METADESCRIPTION').' '.$tag->name;
// Set meta-keywords
$metaKeywords = (!empty($tag->meta_keywords)) ? $tag->meta_keywords : $tag->name;

$metaDescription = preg_replace("#{(.*?)}(.*?){/(.*?)}#s", '', $metaDescription);
$metaDescription = strip_tags($metaDescription);
$metaDescription = K2HelperUtilities::characterLimit($metaDescription, $params->get('metaDescLimit', 150));

$document->setDescription($metaDescription);
$document->setMetadata('keywords', $metaKeywords); 

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

Прочитано 13642 раз
Мои услуги

Предлагаю следующие услуги:

  • Верстка шаблона сайта из дизайн-макета для CMS «1С-Битрикс Управление сайтом» и CMS “Joomla”
  • Создание форм различной сложности (обратная связь, анкеты и тп) для указанных CMS
  • Настройка и кастомизация компонентов и модулей для указанных CMS
  • Доработка модулей и компонентов для указанных CMS, добавление нестандартного функционала
  • Разработка лендингов (landing-pages)

По все вопросам обращайтесь через форму обратной связи

Скачать

Предлагаю вашему вниманию:

Наверх