Многие пользователи компонента Mosets Tree заметили, что у материала отображаются не все категории, в которые он был добавлен, а только основная. К сожалению, стандартными средствами компонента вывести список всех категорий не предусмотрено. Но, покопав в интернете и не найдя ничего, хотелось бы поделиться с Вами небольшой заплаткой. В статье разберемся, как реализовать вывод всех категорий Mosets Tree, присвоенных материалу.
К сведению: в статье рассматривается метод для Mosets Tree 3-ей версии.
Как это работает?
В административной части сайта перейдите в «Компоненты → Mosets Tree». В меню компонента откройте шаблоны, рекомендую сделать копию стандартного шаблона на случай будущих обновлений компонента. Откройте активный шаблон и выберите файл шаблона для редактирования sub_listingDetails.tpl.php, или sub_listingDetailsStyle2.tpl.php, sub_listingDetailsStyle3.tpl.php и т.д. в зависимости от выбранного Вами стиля оформления.
Выберите место (позицию) в коде, где Вы хотите вывести список категорий и добавьте примерно следующий код:
<?php
$db =& JFactory::getDBO();
$sql = "SELECT `cat_id` FROM #__mt_cl WHERE `link_id` = {$this->link_id}";
$db->setQuery($sql);
$result = $db->loadObjectList();
echo '<div class="caption">' . JText::_( 'COM_MTREE_CATEGORY' ) . '</div><div class="output">';
foreach ($result as $element) {
$this->plugin( 'mtpath', $element->cat_id, '' );
}
unset ($element);
echo '</div>';
?>
Таким образом мы вывели список категорий на странице материалов. Давайте попробуем вывести категории в списке материалов. Для этого Вам необходимо открыть файл шаблона для редактирования sub_listingSummary.tpl.php и найти в нем следующие строки:
// Listing's category
if($this->task <> 'listcats' && $this->task <> '' ) {
echo '<div class="category"><span>' . JText::_( 'COM_MTREE_CATEGORY' ) . ':</span>';
$this->plugin( 'mtpath', $link->cat_id, '' );
echo '</div>';
}
Замените их на следующие:
// Listing's category
if($this->task <> 'listcats' && $this->task <> '' ) {
echo '<div class="category"><span>' . JText::_( 'COM_MTREE_CATEGORY' ) . ':</span>';
//$this->plugin( 'mtpath', $link->cat_id, '' );
$db =& JFactory::getDBO();
$sql = "SELECT `cat_id` FROM #__mt_cl WHERE `link_id` = {$link->link_id}";
$db->setQuery($sql);
$result = $db->loadObjectList();
foreach ($result as $element) {
$this->plugin( 'mtpath', $element->cat_id, '' );
}
unset ($element);
echo '</div>';
}
И последний штрих, откройте файл /components/com_mtree/Savant2/Savant2_Plugin_mtpath.php и найдите строку
$html .= '>' . htmlspecialchars( implode(JText::_( 'COM_MTREE_ARROW' ), $cat_names) ) . '</a> ';
В этой строке после закрывающего тега </a>, если необходимо, Вы можете добавить некоторый разделитель, например запятую (,) или вертикальную черту (|), кому что нравится. Единственный минус, этот разделитель будет добавлен также и к последней категории в списке.
Понятное дело, что лишние запросы в базу данных никому не нужны, но за недолгое время пользования компонентом лучшего решения найти не удалось. Если у кого-то есть другие идеи, как реализовать вывод всех категорий Mosets Tree, оставляйте в комментариях, многим будет полезно.
Комментарии
Здесь еще никто не оставлял комментарии.