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

时间:2011-07-19 11:42:46

标签: php joomla joomla1.6 joomla-sef-urls

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

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

第一部分的工作方式与此相似:

  ?

的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 / helpers / rroute.php');

5 个答案:

答案 0 :(得分:5)

对于那些在谷歌上发现这个并且使用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);

答案 1 :(得分:4)

这是一个适用于Joomla 3.6

的代码片段
<div class="validation_errors hidden"></div>

答案 2 :(得分:1)

我认为这个是一个更容易的解决方案:

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

这将为您提供与前两个答案相同的结果,但编码较少。

希望这有帮助。

答案 3 :(得分:0)

更好的解决方案是创建一个新的路由器实例,因此,代码将是这样的:

$app    = JApplication::getInstance('site');
$router = &$app->getRouter();    

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

$newUrl = $router->build($newUrl);
$parsed_url = $newUrl->toString();
$parsed_url = str_replace('/administrator', '', $parsed_url);

通过这种方式,无论是joomla文章,K2文章等,您都可以获得该项目的正确URL ...

  

**请注意,根据项目的类型(k2,joomla等),应使用随后的方法获取$ newUrl。

答案 4 :(得分:0)

在Joomla 3.9中,他们扩展了JRoute类(现在称为Route类),以包含解决此问题的link()静态方法。

use Joomla\CMS\Router\Route;
$newUrl = ContentHelperRoute::getArticleRoute($import->article_id.':'.$import->alias, $import->catid);
$newUrl = Route::link("site", $newUrl);

Route::link()的工作原理与Route::_()相同,不同之处在于您可以提供附加的第一个参数来指定要为其构建URL的客户端。参见https://api.joomla.org/cms-3/classes/Joomla.CMS.Router.Route.html#method_link