【问题标题】:Joomla: get active menu itemJoomla:获取活动菜单项
【发布时间】:2012-01-01 23:25:56
【问题描述】:

我正在尝试在我的 joomla 模板中实现自定义菜单。我在index.php的所需位置添加了这一行@

<?php include(dirname(__FILE__).DS.'/navi.php'); ?>

navi.php 看起来像这样

<?php
defined( '_JEXEC' ) or die( 'Restricted access');

$db = &JFactory::getDBO();

$query = "SELECT * FROM jos_menu WHERE menutype='mainmenu' AND published='1' AND sublevel='0' AND access='0' ORDER BY ordering ASC;";
$db->setQuery($query);
$navi = $db->loadAssocList();

$menu   = &JSite::getMenu();
$active = $menu->getActive();

foreach ($navi as $item) {
    if ($item['id'] == $active->id) {
        $open = ' class="open"';
    } else {
        $open = '';
    }
    echo '<li'.$open.'><a href="'.$item['link'].'">'.$item['name'].'</a></li>';
}

?>

问题在于$active 变量仅在首页打开时才包含数据。这段代码有什么问题?

谢谢!

【问题讨论】:

  • 不相关但代码中有两个小问题: 1 - 包含不是函数 - 它不需要括号。 2 - 您已经在 sql 中硬编码了 'jos_' 表前缀。我意识到这可能完全是供您自己使用的,但最好至少意识到这个问题。使用 #__(哈希和两个下划线)代替 jos_ 并让 Joomla 为您进行替换。

标签: php menu joomla


【解决方案1】:

发现bug:需要另一种方法来确定菜单项的url:

$url = JRoute::_($item['link'].'&Itemid='.$item['id']);
echo '<li'.$open.'><a href="'.$url.'">'.$item['name'].'</a></li>';

谢谢!

【讨论】:

    猜你喜欢
    • 2013-10-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 2011-07-09
    • 1970-01-01
    • 2011-07-11
    • 2013-08-12
    相关资源
    最近更新 更多