Как стать автором
Поиск
Написать публикацию
Обновить

Проблемы работы модулей в Joomla 1.5 с использованием двух и более шаблонов и компонента Joomfish

Время на прочтение2 мин
Количество просмотров575
В моей практике часто случалось использовать два и более шаблона для Жумла сайтов. В Joomla 1.5 это вполне удобно реализовано, один шаблон выбирается default (применяемый ко всем новосозданным пунктам меню), а второй «выборочный».Обычно само содержимое в этом случае публикуется именно на default шаблоне. Делается это все довольно просто и быстро, но есть и свои минусы. Об одном из них я хотел рассказать в этом посте.

Дело в том, что при публикации модуля (поиск, новости) на главной, и в случае если она же является у нас «выборочной», т.е. содержимое вызывается в другом шаблоне, происходит интересная штука. Каждой из новостей присваивается Itemid соответствующий меню в котором опубликован модуль, а для главной это «1». Тем самым Жумла пытается открыть этот урл под этим Itemid, а так как он не содержит вызова содержимого, то перехода на внутреннюю страницу не происходит, новость не выводится, т.е все остается без изменений. Я не знаком, тесно, с Жумлавским АПИ, но для меня это стало очень неприятным сюрпризом. Гибкость Жумлы в плане независимости элементов структуры от элементов содержимого была одним из тех факторов за которым я и взялся за изучение движка. Причем, данный процесс стал проявляться только после установки компонента Joomfish. Тем не менее выход необходимо было находить. Выход я нашел возможно не самый правильный, но рабочий. Долго мучаясь над этим Itemid=1, я решил избавиться от него. Дабы не вызвать конфликтов приравнял Itemid к «0» (Дело в том что приравнивая Itemid к другим значениям не равным нулю я рисковал присвоить его существующему элементу структуры (меню), а единица является самым первым элементом, т.е
«0» абсолютно свободен.) Ниже я приведу изменения сделанные в файле mod_newsflash/helper.php
Оригинальный код:

$item->linkOn = JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catslug, $item->sectionid));


В данной строчке и происходит «сборка» УРЛА новости (порядковый номер статьи id, название статьи, порядковый номер категории catid, а так же порядковый номер элемента структуры(меню) Itemid).

Все что я сделал, это «насильно» присвоил «0» Itemid всех элементов. Таким образом моя новость перестала принадлежать какому-либо меню.
Код:

$item->linkOn = JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catslug.'&Itemid=0', $item->sectionid));


После этого изменения, все новости стали переходить по своим внутренним ссылкам, т.е стали вызываться default шаблоном.

Похожее изменение удалось сделать и модулю поиска, только на этот раз пришлось править компонент.
Открыв файл components/com_search/controller.php сделал изменения в этой строчке:

$this->setRedirect(JRoute::_('index.php'.$uri->toString(array('query', 'fragment')), false));


Заменил на:

$this->setRedirect(JRoute::_('index.php'.$uri->toString(array('query', 'fragment')).'&Itemid=0', false));


Опять же насильственно присвоив ей Itemid=0

Много деталей при написании поста я упустил, но суть передать удалось. Возможно этот метод не является грамотным, но своего я добился, а для меня это главное.

Спасибо!
Теги:
Хабы:
Всего голосов 6: ↑4 и ↓2+2
Комментарии3

Публикации

Ближайшие события