在Joomla管理员中使用JRoute :: _()

udj*_*lip 4 php joomla joomla-sef-urls joomla1.6

我有一个我正在处理的自定义组件,我正在编写一个在管理区域中运行的导入脚本.我有以下代码:

$newUrl = ContentHelperRoute::getArticleRoute($import->article_id.':'.$import->alias, $import->catid);
$newUrl = JRoute::_($newUrl);
Run Code Online (Sandbox Code Playgroud)

第一部分工作返回类似于此:

?的index.php选项= com_content&视图=文章&ID = 45:的Joomla-交际和 - sharethis模块&CATID = 18

第二部分显示如下:

/administrator/index.php?option=com_content&view=article&id=45:joomla-sociable-and-sharethis-module&catid=18

以上两个网址都是您希望组件com_content呈现这些网址,就好像我想在管理区域中使用它们一样.

知道如何强制JRoute像在前端使用时那样工作吗?

注意:这是在我的组件的控制器中使用,如果它有任何区别,我包括require_once(JPATH_SITE.'/ component/com_content/help /route.php');

udj*_*lip 7

对于那些在谷歌上发现这一点并且使用JRoute :: _()和contentHelper :: getArticleRoute()的人.

$newUrl = ContentHelperRoute::getArticleRoute($import->article_id.':'.$import->alias, $import->catid);

// better will be check if SEF option is enable!
$router = new JRouterSite(array('mode'=>JROUTER_MODE_SEF));
$newUrl = $router->build($newUrl)->toString(array('path', 'query', 'fragment'));
// SEF URL !
$newUrl = str_replace('/administrator/', '', $newUrl);
//and now the tidying, as Joomlas JRoute makes a cockup of the urls.
$newUrl = str_replace('component/content/article/', '', $newUrl);
Run Code Online (Sandbox Code Playgroud)


Val*_*ery 5

这是一个适用于 Joomla 3.6 的片段

$routerOptions = [];
if (JFactory::getConfig()->get('sef')) {
    $routerOptions['mode'] = JROUTER_MODE_SEF;
}
$siteRouter = JRouter::getInstance('site', $routerOptions);
$link = $siteRouter->build($yourRoute)->toString();
$link = preg_replace('#^/administrator#', '', $link);
Run Code Online (Sandbox Code Playgroud)