Многие пользователи компонента Mosets Tree заметили, что у материала отображаются не все категории, в которые он был добавлен, а только основная. К сожалению, стандартными средствами компонента вывести список всех категорий не предусмотрено. Но, покопав в интернете и не найдя ничего, хотелось бы поделиться с Вами небольшой заплаткой. В статье разберемся, как реализовать вывод всех категорий Mosets Tree, присвоенных материалу.
К сведению: в статье рассматривается метод для Mosets Tree 3-ей версии.
Как это работает?
В административной части сайта перейдите в «Компоненты → Mosets Tree». В меню компонента откройте шаблоны, рекомендую сделать копию стандартного шаблона на случай будущих обновлений компонента. Откройте активный шаблон и выберите файл шаблона для редактирования sub_listingDetails.tpl.php, или sub_listingDetailsStyle2.tpl.php, sub_listingDetailsStyle3.tpl.php и т.д. в зависимости от выбранного Вами стиля оформления.
Выберите место (позицию) в коде, где Вы хотите вывести список категорий и добавьте примерно следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 |
<?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 и найти в нем следующие строки:
1 2 3 4 5 6 |
// 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>'; } |
Замените их на следующие:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// 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 и найдите строку
1 |
$html .= '>' . htmlspecialchars( implode(JText::_( 'COM_MTREE_ARROW' ), $cat_names) ) . '</a> '; |
В этой строке после закрывающего тега </a>, если необходимо, Вы можете добавить некоторый разделитель, например запятую (,) или вертикальную черту (|), кому что нравится. Единственный минус, этот разделитель будет добавлен также и к последней категории в списке.
Понятное дело, что лишние запросы в базу данных никому не нужны, но за недолгое время пользования компонентом лучшего решения найти не удалось. Если у кого-то есть другие идеи, как реализовать вывод всех категорий Mosets Tree, оставляйте в комментариях, многим будет полезно.
Комментарии
Здесь еще никто не оставлял комментарии.