我有一个我正在处理的自定义组件,我正在编写一个在管理区域中运行的导入脚本。我有以下代码:
$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');
答案 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。