Вывод всех категорий Mosets Tree, присвоенных материалу

Многие пользователи компонента 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, оставляйте в комментариях, многим будет полезно.

Комментарии

Здесь еще никто не оставлял комментарии.

Добавить комментарий