php – 强制Joomla JRoute使用菜单项

我正在为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查询中检查正确的语言.

上一篇:Vue路由基础


下一篇:php – 使用可变动作在Symfony 2中定义路由