В одном из проектов потребовалось управлять рекомендациями, которые отображаются на странице товара. Стандартный механизм K2 - это вывод материал по похожим тегам - это очень не удобно.
Выход прост - привязать иденты материалов для вывода рекомендаций.
Пролистав возможные решения (плагины, компоненты) для K2, стало понятно что нужно менять родной механизм, что мы делаем:
Дорабатываем таблицу и запрос выбора тегов
1.Добавляем поле "relateditems" в таблицу #__k2_items . Обязательно указать значение по умолчанию "0" ! Регистр букв важен, пишите все в нижнем, иначе компонент не сможет сопоставить поле.
2.Необходимо изменить файл с функцией выбора тегов "function getRelatedItems($itemID, $tags, $params)":
/components/com_k2/models/itemlist.php
В функции заменить:
$query = "SELECT DISTINCT itemID FROM #__k2_tags_xref WHERE tagID IN ({$sql}) AND itemID!={$itemID}";
На:
$query = "SELECT DISTINCT relateditemsFROM #__k2_items WHERE ID ={$itemID}";
Первый этап готов, достаточно в таблице #__k2_items в поле relatedItems перечислить иденты товаров и они появятся в списке рекомендаций.
В административной части реализуем механизм редактирования колонки relateditems
Редактируем список полей элемента в административной части, добавляем поле для ввода:
administrator\components\com_k2\views\item\tmpl\default.php
Заменить код:
</tr>
<tr>
<td align="right" class="key">
<?php echo JText::_('K2_FINISH_PUBLISHING'); ?>
</td>
<td class="k2ItemFormDateField">
<?php echo $this->lists['publish_down']; ?>
</td>
</tr>
На (строка 847):
</tr>
<tr>
<td align="right" class="key">
<?php echo JText::_('K2_FINISH_PUBLISHING'); ?>
</td>
<td class="k2ItemFormDateField">
<?php echo $this->lists['publish_down']; ?>
</td>
</tr>
<tr>
<td align="right" class="key">
<?php echo 'Иденты похожих товаров' ?>
</td>
<td class="k2RelatedField">
<input class="text_area" type="text" name="relateditems" maxlength="250" value="<?php if ($this->row->relateditems == ''): echo '0'; else : echo $this->row->relateditems; endif; ?>" />
</td>
<tr>
Добавляем поле relatedItems в массив данных, редактируем файл:
\administrator\components\com_k2\models\items.php
Необходимо добавить поле в трех местах, где встречается строка:
$K2Item->created_by_alias = $item->created_by_alias;
Заменить на:
$K2Item->created_by_alias = $item->created_by_alias ;
$K2Item->relateditems = $item->relateditems;
Добавляем глобальную переменную:
\administrator\components\com_k2\tables\k2item.php
Заменить:
var $created_by_alias = null;
На
var $created_by_alias = null;
var $relateditems = null;
Иденты нужно будет вводить как в SQL запросе, через запятую. Следите за правильностью ввода данных, поле не должно быть пустым и содержать некорректные данные(например лишняя запятая), иначе на странице будет ошибка.
Список рекомендаций не появиться, если у товара нет тега. Достаточно добавить 1 тег. Если вы подробно ведете номенклатуру, этот момент вас не смутит, также можно самостоятельно исправить выборку, я не стал трогать этот момент.