всем привет была поставлена задача по генерации SEF ссылок для YML файла долго мучился... в конце концов было найдено решение (спасибо @OlegM случайно наткнулся jArticle.php - joom-article-abstraction - A abstract class for Joomla) были взяты три функции и подпилиныдоделаны заточены для правильной работы собственно, пользуйтесь - не обляпайтесь Код (PHP): function _joomlaSefUrlFromRoute($link) { require_once(JPATH_SITE . DS . 'components' . DS . 'com_content' . DS . 'helpers' . DS . 'route.php'); $siteURL = substr(JURI::root(), 0, -1); if (JPATH_BASE == JPATH_ADMINISTRATOR) { // In the back end we need to set the application to the site app instead JFactory::$application = JApplication::getInstance('site'); } $isSh404SefExtensionEnabled = JComponentHelper::isEnabled('com_sh404sef', true); if ($isSh404SefExtensionEnabled && JPATH_BASE == JPATH_ADMINISTRATOR) { $this->_initSh404SefUrls(); } $productSlug = $link->productSlug; $catSlug = $link->productCatSlug; // $articleRoute = JRoute::_(ContentHelperRoute::getArticleRoute($articleSlug, $catSlug)); $jhr = JoomlakassaHelperRoute::getProductRoute($productSlug, $catSlug); // сюда надо ставить роутер нужного компонента в моём случае это была JoomlaKassa $linkRoute = JRoute::_($jhr); // получили почти готовую SEF ссылку $sefURI = str_replace(JURI::base(true), '', $linkRoute); if (JPATH_BASE == JPATH_ADMINISTRATOR) { $siteURL = str_replace($siteURL . DS . 'administrator', '', $siteURL); JFactory::$application = JApplication::getInstance('administrator'); } $sefURL = $siteURL . $sefURI; return $sefURL; } function _initSh404SefUrls() { $app = JFactory::getApplication(); require_once(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_sh404sef' . DS . 'sh404sef.class.php'); // что бы $sefConfig не пересоздавался, определяем как STATIC static $sefConfig; if (!isset($sefConfig)) { $sefConfig = Sh404sefFactory::getConfig(); } // hook to be able to install other SEF extension plugins Sh404sefHelperExtplugins::loadInstallAdapters(); // another hook to allow other SEF extensions language file to be loaded Sh404sefHelperExtplugins::loadLanguageFiles(); if (!$sefConfig->Enabled) { // go away if not enabled return; } $joomlaRouter = $app->getRouter(); // что бы $pageInfo не пересоздавался, определяем как STATIC static $pageInfo; if (!isset($pageInfo)) { $pageInfo = Sh404sefFactory::getPageInfo(); $pageInfo->router = new Sh404sefClassRouter(); $joomlaRouter->attachParseRule(array($pageInfo->router, 'parseRule')); $joomlaRouter->attachBuildRule(array($pageInfo->router, 'buildRule')); } } /** * объект с полями Slug категории и Slug материала/продукта или ещё чего либо * $link->productSlug = $product->id . ':' . $product->alias; * $link->productCatSlug = $product->catid . ':' . $product->category_alias; */ function url($link) { return $this->_joomlaSefUrlFromRoute($link); } P.S. весь прикол в том что если не внести мои изменения к функцию _initSh404SefUrls получится, что только первое добавление правил роутинга (две последние строки функции) сработает и будет получатся правильная SEF ссылка, а остальные правила будут пустыми и будут затирать созданные ссылки первыми правилами P.P.S. данный вариант был разработал для вставки в CLASS, но если убрать $this перед вызовом функций то можно вставлять в безCLASSовые файлы за сим, позвольте откланятся