Joomla 3.3.0 (в 3.3.3 проверил, возник бы тот же вопрос).
Переделывал под свои нужды дефолтный плагин "Пользователь-Профиль". Также понадобилось существующее там поле "Условия предоставления услуг", вывод статьи в модальном окне.
Выводилась статья некорректно. На нее есть пункт меню. Все, что надо было, - указать в ссылке Itemid.
Было (\plugins\user\profile\fields\tos.php):
$link = '<a class="modal" title="" href="index.php?option=com_content&view=article&layout=modal&id=' . $tosarticle . '&tmpl=component" rel="{handler: \'iframe\', size: {x:800, y:500}}">' . $text . '</a>';
, где $tosarticle - id статьи.
Добавлять хардкодом Itemid недопустимо. Программно все решается проще - ContentHelperRoute::getArticleRoute($tosarticle).
В public static function getArticleRoute($id, $catid = 0, $language = 0) предусмотрено обращение к другому protected методу этого класса - _findItem:
if ($item = self::_findItem($needles))
{
$link .= '&Itemid='.$item;
}
Вот только мне надо в ссылке еще доп.параметр - &tmpl=component . Возможность получения доп.параметров для добавления их к ссылке в getArticleRoute отсутствует. А хотелось бы, вопрос бы не возник.
Сделал в плагине так:
require_once JPATH_SITE . DS . 'components' . DS . 'com_content' . DS . 'helpers' . DS . 'route.php';
$article_link = JRoute::_(ContentHelperRoute::getArticleRoute($tosarticle));
$and = JFactory::getConfig()->get('sef')? "?" : "&" ;
$link = '<a class="modal" title="'.$title.'" href="'.$article_link.$and.'tmpl=component" rel="{handler: \'iframe\', size: {x:800, y:500}}">'.$text.'</a>';
Все работает, как надо. Но такой подход для решения подобных задач не нравится,
особенно варианты с проверкой sef.
На J>=2.5 первый раз встала такая задача, торопился, возможно, упустил какую-то существующую стандартную возможность, предусмотренную в API. Поэтому:
как вы при формировании в одном расширении ссылки на страницу другого расширения передаете в этой ссылке доп.параметры?