Компонент K2

Мультикатегории в K2

Давно искал способ для того чтобы присвоить одному материалу в K2 несколько категорий, да и чтоб при этом работа сайта не пострадала. Кажется нашел, мир не без добрых разработчиков.

Итак, что нужно, чтобы один и тот же материал компонента K2 отображался в нескольких категориях, как у компонента ZOO, или другими словами, как добиться мультикатегорий в K2? Давайте разбираться.

От разработчиков мы пока такой возможности не получили (но она обещана в версии 3.0 компонента), поэтому приходится использовать расширения "умельцев" - сторонних разработчиков.

Я перебирал множество расширений, пока не нашел Additional Categories for K2 (в переводе - Дополнительные категории для K2) в каталоге расширений для компонента K2, который как раз и позволяет разместить один и тот же материла в нескольких категориях.

После его установки, он скорее всего откажется работать, как заявлено, но мы исправим =) как всегда, благодаря форуму разработчика мне удалось заставить работать этот компонент мультикатегорий, как надо.

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

По словам разработчика исправить это можно:

Следует несколько поправить файл самого плагина plugins/k2/k2additonalcategories/k2additonalcategories.php.

Где то в районе строки 197:

Заменить

if(K2_JVERSION=='16')

На

if(K2_JVERSION != '15')

Или скачайте уже исправленный плагин с моего сайта

Далее нам нужно несколько поправить шаблоны вывода компонента K2 для правильного отображения материалов в нескольких категориях.

Для этого мы скопируем шаблоны вывода компонента в наш шаблон:

  • Идем в папку /components/com_k2/templates/ и копируем из нее папку default к себе на диск
  • Далее, идем в папку с вашим шаблоном: templates/ПАПКА_ВАШЕГО_ШАБЛОНА/html/
  • Если в папке HTML нет папки com_k2 создаем ее и копируем в нее папку default
  • Все, только что мы создали свой шаблон для компонента K2.
  • ОЙ, чуть не забыл из папки /components/com_k2/ также скопируйте папки CSS и IMAGES.
  • Их, тоже скопируйте в папку вашего шаблона - templates/ПАПКА_ВАШЕГО_ШАБЛОНА/

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

Далее идет инструкция для исправления возникших вопросов при использовании данного плагина мультикатегорий:

1) Материал K2 опубликован в нескольких категориях, но показывает только одну присвоенную категорию.

Если при просмотре сайта у материалов в категории отображается только одна, а вы знаете что присвоили несколько, необходимо внести некоторые правки в ваш шаблон для компонента K2, править будем 2 файла:

Первый: category_item.php, так как ранее мы сделали копию шаблона вывода то идем в templates/ПАПКА_ВАШЕГО_ШАБЛОНА/html/com_k2/default и находим указанный файл

После строки:

<?php echo JText::_('K2_PUBLISHED_IN'); ?>
<a href="/<?php echo $this->item->category->link; ?>"><?php echo $this->item->category->name; ?></a>

Добавляем:

<?php 
$dispatcher = JDispatcher::getInstance();
JPluginHelper::importPlugin ('k2');
$additional_category_links=$dispatcher->trigger('onK2AfterLinkCategoryPublish', array($this->item->id));
echo $additional_category_links[0];
?>

Второй файл в этом же месте - item.php

Ищем строку:

<?php echo JText::_('K2_PUBLISHED_IN'); ?>
<?php echo $this->item->category->link; ?>"><?php echo $this->item->category->name; ?>

После нее вставляем:

<?php
$dispatcher = JDispatcher::getInstance();
JPluginHelper::importPlugin ('k2');
 $additional_category_links=$dispatcher->trigger('onK2AfterLinkCategoryPublish', array($this->item->id));
echo $additional_category_links[0];
?>

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

2) Счетчик в подкатегориях показывает неправильные данные

Чтобы счетчики в названиях категорий отображали правильное число находящихся в нем материалов, при использовании плагина мультикатегорий, нам необходимо модифицировать /components/com_k2/models/itemlist.php в районе строки 771 находим:

return $total;

И прямо перед этой строкой вставляем:

$dispatcher = JDispatcher::getInstance();
JPluginHelper::importPlugin ('k2');
$dispatcher->trigger('onK2BeforeSetCountCategoryQuery', array(&$total, &$id, &$categories));

Данный код заставляет K2 учитывать дополнительные категории при подсчете материалов в категории.

Единственный минус - фактически это "ХАК" самого компонента K2, поэтому при обновлении самого компонента он затирается, имейте это ввиду!!!

3) Подсчет материалов в категории в админке

Если вам хочется чтобы и в админке количество материалов в категории показывалось с учетом ВСЕХ категорий K2(как основных, так и дополнительных), то здесь тоже придется прибегнуть к правке кода файла модели K2 (то есть, опять небольшой "хак"!).

Ищем файл administrator/components/com_k2/models/category.php , где то в конце файла (район строки 163) находим:

$query = "SELECT COUNT(*) FROM #__k2_items WHERE catid={$catid} AND trash = ".(int)$trash;

И сразу после нее вставляем:

$dispatcher = JDispatcher::getInstance();<br />JPluginHelper::importPlugin ('k2');
$additional_category_links=$dispatcher->trigger('onK2BeforeCountCategoryItemsQuery', array(&$query));

Так как это тоже "хак" компонента, то при обновлении он затрется, учитывайте это на своих сайтах!

4) Очистка базы данных при удалении материала K2

Чтобы не захламлять таблицу базы данных при использовании плагина и чтобы при удалении материала K2 все работало без ошибок, разработчик плагина Additional Categories for K2 рекомендует внести следующие изменения в модель работы компонента K2:

В файле administrator/components/com_k2/models/items.php около строки 802 найдите:

$dispatcher->trigger('onFinderAfterDelete', array('com_k2.item', $row));

и сразу после допишите:

JPluginHelper::importPlugin ('k2');
$dispatcher->trigger('onK2AfterDeleteItem', array($row));

Это позволит незахламлять базу и обеспечит правильный учет категорий для компонента и плагина.

Это тоже "хак", учитывайте при обновлении!

О ваших результатах использования плагина и его работе, пишем в комментариях!

Сергей Мочалов

Автор блога.
Веб-разработчик.

Уровень: Новичок
Просмотры: 27333
15 ноября 2020

Похожие статьи которые стоит почитать

Как скрыть пункт меню в Joomla 3

Версии Joomla. Какую версию Joomla выбрать для сайта?

Редирект в Joomla 3