强制 Joomla JRoute 使用菜单项

Mar*_*ler 5 php joomla routes url-routing joomla2.5

我正在为 Joomla 构建一个组件!2.5 和里面我JRoute::_('index.php?option=com_myapp&view=cpanel')用来建立我的所有链接。这有效,但它会产生如下所示的链接:

/component/myapp/cpanel.html
Run Code Online (Sandbox Code Playgroud)

但是在菜单中,我定义了index.php?option=com_myapp&view=cpanel一个别名为“myapp”的链接,所以链接应该是

/myapp/cpanel.html
Run Code Online (Sandbox Code Playgroud)

该组件可通过此路径访问。如果我这样做,内部生成的所有链接也将具有/myapp前缀。但是用于模板(特殊登录链接),如果用户偶然发现/component/myapp......我仍然希望所有链接都转到/myapp前缀。

如何强制 JRoute 自行使用此菜单项条目?

Mar*_*ler 2

//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')));
}
Run Code Online (Sandbox Code Playgroud)

请注意:这不是语言安全的。它采用在数据库中找到的第一个菜单条目。如果您为不同的语言设置不同的菜单别名,您还必须在 SQL 查询中检查语言是否正确。