Как сделать произвольные title в компоненте k2 joomla — в материалах
Задача: сделать произвольные title в компоненте k2 joomla — в материалах
Красивые title и правильные url всегда были проблемой CMS Joomla, и новые версии j 2.5 и 3 ситуацию не исправляют. Расширений типа sh404 или artio создают дополнительные нагрузки и, порой, не отвечают всем требованиям проекта.
Сторонние sef компоненты дают слишком большую и не оправданную нагрузку, да и проблем прибавляют немало. Поэтому я рассматриваю только варианты «чистого кода». Предлагаемая мной модификация не затрагивает файлов движка, а значит обновления будут проходить безболезненно.
Как сделать произвольные title для материалов k2
Работать с произвольным title будем с помощью дополнительных полей k2.
Стандартный тайтл любого материала одинаков с названием этого материала. Что не есть хорошо с точки зрения seo да и юзабилити в общем.
Создаем группу дополнительных полей и называем её к примеру allseo.
Создаем дополнительное поле в этой группе. Тип текстовый, значение по умолчанию пустое.
Теперь необходимо назначить всем категориям k2, в записях которых требуются произвольные тайтлы, эту группу дополнительных полей. Это делается при редактировании категории в K2.
Далее открываем или создаем материал, в которым мы хотим сделать произвольный title. В вкладке дополнительные поля видимо наше поле titleseok2, заполняем его в соответствии с требуемым запросом и сохраняем материал.
А теперь необходимо внести некоторые изменения в шаблон k2. Работать будем исключительно с шаблоном компонента, (иногда этот файл можно найти в разных местах - все зависит от ядра и фреймворка) Так что места могут быть разные:
например - адресу /templates/ваш_joomla_шаблон/html/com_k2/default/item.php
например - адресу /components/com_k2/templates/default/item.php
Ищите где он у вас.
открываем файл item.php добавляем следующий код, где-то после строки 57 и скрипт заключаем в теги php - это же скрипт :) :
// дополнительные поля материала K2
$extrafields = array();
foreach($this->item->extra_fields as $item)
{
$extrafields[$item->id] = $item->value;
}
$document = & JFactory::getDocument();
$config = & JFactory::getConfig();
if ($extrafields[1]) {
$curtitle = $extrafields[1];
} else {
$curtitle = $document->title;
}
$document->setTitle( $curtitle );
В строке $curtitle = $extrafields[1]; указываем id (у меня оказалось 1) дополнительного поля содержащее наш новый title.
Если для материала не был прописан произвольный тайтл то будет выводится стандартный заголовок. Если прописан — выводится содержимое дополнительного поля.
Узнать id дополнительного поля можно в админке Joomla, в списке дополнительных полей есть специальная колонка показывающая id поля.
Проеверяем - все работает!
Комментарии
сразу выдает ошибку по номеру этой строке в документе ???
К2 версии 2.6
Invalid argument supplied for foreach() in
сайт.ru/templates/тема/html/com_k2/templates/default/item.php on line 548