Вывод всех категорий 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>, если необходимо, Вы можете добавить некоторый разделитель, например запятую (,) или вертикальную черту (|), кому что нравится. Единственный минус, этот разделитель будет добавлен также и к последней категории в списке.

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


Оставьте свой комментарий

Оставить комментарий от имени гостя

0 / 2500 Ограничение символов
Ваш текст должен быть в пределах 10-2500 символов
4 Комментарии | Добавить свои
  • Здравствуйте! Вижу, Вы разбираетесь в MTREE. Неделю бьюсь, ничего не могу понять. Не работает WidgetKit 2 в контенте MTREE. В категориях MTREE - работает. В статьях - не хочет. Тупо выводит шорткод [widgetkit id="1"] и всё. шаблон - самый примитивный. Проблема в Mtree. Подскажите как победить это. Все возможные варианты с jQuery прелопатил. Ошибок сайт не выдайт (ошибки по максимуму включены) И попробовал вставить шорткод в модуль HTML - тоже не работает. Я понимаю, что WidgetKit создан для контента Joomla, но может его можно "прикрутить" к Mtree ?

    Нравится 0 Короткий URL:
  • Добрый день. Так понимаю, Вы используете стандартное поле описания материала MTree? Тогда Вам необходимо перейти в редактирование пользовательских (кастомных) полей MTree, в списке найти это поле описания, я пользуюсь английской версией, у меня это "Description", у вас возможно "Описание" или еще как-то. Откройте его для редактирования, и найдите блок справа "Параметры (Parameters)", там будет надстройка "Parse Mambots" (Обрабатывать мамботы, плагины или еще как-то). Вам нужно включить в положение "Да (Yes)". После этого все вставленные модули или шорткоды должны начать обрабатываться в описании материала (но далеко не все, к сожалению), по крайней мере сейчас протестил, всё отлично работает.

    С модулем html-кода аналогичная ситуация, в настройках модуля на вкладке "Основные параметры" есть настройка "Обрабатывать плагинами", включаем в положение "Да" и пользуемся.

    Нравится 0 Короткий URL:
  • Гость - White Wolf

    Приветствую всех!
    Вот так отображается у меня заголовок страницы.
    Root: Все категории
    Каталог: Все материалы
    Каталог: Недавно добавленные материалы
    Каталог: Недавно обновлённые материалы
    Скажите можно ли как то удалить слова Root и Каталог из заголовка.
    И еще можно ли список категорий разбить на колонки. Список материалов я разбил, а категории идут одной колонкой.

    Нравится 0 Короткий URL:
  • Можно узнать версию MTree, тип выбранного меню и ссылку на Ваш сайт.
    Вообще Вы можете распаковать архив с компонентом и сделать поиск по файлам по словам 'Root' и 'Каталог', скорей всего будут найдены языковые константы, сделаете поиск по этим константам и найдете файлы, где они выводятся, соответственно удалите и больше не будет отображаться.
    По поводу списка категорий, в настройках шаблона компонента MTree есть стандартная настройка.

    Нравится 0 Короткий URL: