2010-08-13 74 views
0

这个问题是特定于joomla的。如何根据名称获取joomla菜单对象?

我知道如果用代码$menu = &JSite::getMenu()我可以得到完整菜单的引用对象。但是,我怎么能得到一个基于名称的特定菜单?我的情景: 我有页脚菜单项目:主页|关于我们|规则|隐私政策。

我需要显示链接到两个菜单项组件中的规则和隐私策略。我无法对链接进行硬编码,因为itemid在开发和生产环境中会有所不同。

我们是否有一些解决方法,如$menu = &JSite::getMenu()->get('footer-menu')->getMenuItem('rules');可以给我一个特定菜单项的引用对象,从中我可以为该特定文章创建链接。

感谢, Tanmay

+0

似乎上周五发烧! :(没有人似乎在线...请帮助我.. atleast星期一:) – jtanmay 2010-08-13 19:29:03

+0

任何提示请!!!! – jtanmay 2010-08-16 15:16:33

回答

2

据我所知,没有一个内置的方式做到这一点。但我感到你的痛苦。

这里是我之前建立的功能的改编。它不是递归的,所以你只能在菜单层次中获得一个深度,但这对我来说已经足够了。

function getMenuItems($parentAlias) { 
    $db =& JFactory::getDBO(); 
    $sql = 'SELECT * FROM #__menu WHERE parent in ' . 
      '(SELECT id FROM #__menu WHERE alias='.$db->Quote($parentAlias).') '. 
      'AND published=1 ORDER BY ordering'; 
    $db->setQuery($sql); 
    $results = $db->loadObjectList(); 
} 

让我知道这是否适合你。

+0

Garrett Bluma,最后我做了一些类似于你的实现的东西,在模型中创建了一个函数,让我反对我想​​要的菜单项。感谢您的回复。至少它证实了我不错过joomla的一个很棒的功能:) – jtanmay 2010-08-19 19:02:24

2

方法1:

$menu = & JSite::getMenu(); 
$item = $menu->getItems('link', 'index.php?option=com_content&view=article&id=1', true); 

方法2:

$menu = & JSite::getMenu(); 
$item = $menu->getItems('alias', 'rules', true);