我正在为Joomla构建一个组件! 2.5和内部我使用JRoute :: _(‘index.php?option = com_myapp& view = cpanel’)来构建我的所有链接.这有效,但它产生的链接看起来像这样:
/component/myapp/cpanel.html
但是在菜单中我已经定义了index.php?option = com_myapp& view = cpanel的别名为“myapp”,所以链接应该是
/myapp/cpanel.html
可以通过此路径访问该组件.如果我这样做,内部生成的所有链接都将具有/ myapp前缀.但是要在模板(特殊登录链接)中使用,如果用户偶然发现/ component / myapp ….我仍然希望所有链接都转到/ myapp前缀.
如何强制JRoute单独使用此菜单项?
解决方法:
//look if there is a menu item set for myapp. if yes, we use that one to redirect
$db = JFactory::getDBO();
$defaultRedirect = 'index.php?option=com_myapp&view=cpanel';
$db->setQuery('SELECT `id` FROM #__menu WHERE `link` LIKE '. $db->Quote($defaultRedirect) .' LIMIT 1' );
$itemId = ($db->getErrorNum())? 0 : intval($db->loadResult());
if($itemId){
$rpath = JRequest::getString('return', base64_encode(JRoute::_('index.php?Itemid='.$itemId)));
}else{
$rpath = JRequest::getString('return', base64_encode(JRoute::_('index.php?option=com_myapp&view=cpanel')));
}
注意:这不是语言安全的.它需要在db中找到第一个菜单项.如果为不同的语言设置不同的菜单别名,则还必须在SQL查询中检查正确的语言.