Делаю компонент, формирующий прайс товаров из VirtueMart. Ссылка на товар формируется в модели публичной части компонента так: Код (PHP): $prod_url = JURI::root(). JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $product->virtuemart_product_id . '&virtuemart_category_id=' . $product->virtuemart_category_id, true); $prod_url = str_replace(array('//', 'http:/'), array('/', 'http://'), $prod_url); Если обращаться к компоненту из публичной части, то все ок. Если формировать файл прайс-листа из админки компонента, то ссылки принимают такой вид: Понятно, что это происходит из-за того, что роутер в админке не задействован и его надо подключать. Собственно, вопрос: как это сделать, т.к. знаний пока что еще не хватает. Функция, выгружающая прайс в файл, не в админке. В админке, в контроллере она только вызывается, а затем проверяется, создан ли файл и выводится сообщение. /administrator/components/com_component/controllers/objects.php Код (PHP): require_once(JPATH_ROOT.DS.'components'.DS.'com_component'.DS.'models'.DS.'object.php'); public function getFile() { $params = JComponentHelper::getParams('com_component'); $getFile = new ComponentModelObject(); $getFile -> getFile(); if (JFile::exists($params->get('filepath'). 'price.txt')) { JFactory::getApplication()->enqueueMessage(JText::_('COM_COMPONENT_NOTICE_FILE_SAVE_SUCCESS'). '<br /><br />' . JURI::root(). $params->get('filepath'). 'price.txt'); } else { JError::raiseWarning(JText::_('COM_COMPONENT_NOTICE_FILE_SAVE_ERROR')); } $this->setRedirect(JRoute::_('index.php?option=com_component&view=objects', false)); } Сама функция выгрузки в файл лежит в /components/com_component/models/object.php и представляет собой Код (PHP): function getFile() { $params = JComponentHelper::getParams('com_component'); $price = $this->getPrice(); JFile::write((JPATH_ROOT . DS . $params->get('filepath'). 'price.txt'), $price); return true; } Непосредственно сам прайс формируется в функции getPrice(), которая, в свою очередь, вызывает функции, формирующие заголовок прайса, список товаров и т.п.
в общем, разобрался. делюсь решением, может, кому пригодится. в /components/com_component/models/object.php в функции getPrice() (у меня в ней формируется ссылка и остальные параметры выгружаемого товара) подключаем роутер: Код (PHP): $app = JApplicationCms::getInstance("site"); $router = $app::getRouter("site"); ссылку получаем так: Код (PHP): $prod_url = $router->build(JURI::root(). JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $product->virtuemart_product_id . '&virtuemart_category_id=' . $product->virtuemart_category_id, true)); в итоге получаем при вызове функции из админки ссылку вида: при вызове функции из публичной части: вот тут я не понял, почему стало добавляться к ссылке при вызове функции из публичной части вот это: но пока не стал с этим заморачиваться и убрал ненужное с помощью str_replace Код (PHP): $prod_url = str_replace(array('//', 'http:/', '/administrator', '/index.php', '/component/comp_name'), array('/', 'http://', '', '', ''), $prod_url); вот как-то так. буду рад, если кто-то подскажет более оптимальное решение.