代码之家  ›  专栏  ›  技术社区  ›  miojamo

joomla组件菜单项ID

  •  1
  • miojamo  · 技术社区  · 15 年前

    如果菜单下列出了我的组件,如果链接不包含例如.itemID=63 than模块未显示。

    有没有办法自动将ItemId添加到每个链接并在组件内部重定向?

    4 回复  |  直到 15 年前
        1
  •  4
  •   Martin    15 年前

    在生成组件链接的代码中,您需要将ItemId附加到url。您可以使用以下方法获取ItemId:

    $itemid = JRequest::getint( 'Itemid' );
    

    因此,您可以这样使用它(作为示例):

    $link = JRoute::_('index.php?option=com_component&task=list&Itemid='.$itemid);
    

    单击菜单项后,此变量将存在。如果视图以层次结构的方式存在,其中一个视图链接到下一个视图,则需要在组件中的每个视图中执行该操作。

    [编辑]

    您可以创建一个helper函数,在上面的示例中,它会自动将ItemId添加到您生成的每个链接中,例如。

    function genLink($link) {
        return JRoute::_($link.'&Itemid='.JRequest::getint( 'Itemid' ));
    }
    
        2
  •  0
  •   jakabadambalazs    13 年前

    我的经验是,当你有一个模块(例如virtuemart产品列表)放在某个不在链接应该指向的部分时,这个问题就会出现。 假设您在菜单中设置了VM(com_virtuemart),Itemid===731,并在主页(com_content)中插入了一个产品列表模块。当您单击将您带到产品页的产品时,您希望模块设置链接的方式使您的VM Itemid包含在链接中([linkl]&Itemid=731)-但在大多数情况下,不会发生这种情况,您的Itemid不会添加到url。

    此外,您不能总是期望(在本例中)在url参数中具有正确的Itemid。所以 JRequest::getint( 'Itemid' ) 东西不会按预期工作。

    我不知道为什么JRoute::“方法(可以用额外的参数“$searchForItemid”轻松完成)在您不在组件中时不在菜单表中搜索您的Itemid!这就是说,如果您将相同的产品列表模块放在VM首页(com_virtuemart)中,您将看到Itemid出现在您的链接上。但在大多数情况下,该模块需要在其他地方。

    情况仍然如此!2.5条。

    我没有办法解决你的问题,但我可以告诉你我是如何克服的。

    显然,您可以打开模块并硬编码Itemid。这在意大利被称为“PORCATA”(翻译:猪式编码),我真的建议不要这样做,原因很明显

    我所做的是使用语言覆盖(J!2.5条-语言管理器:语言重写),注册一个类似VM_ITEMID===731的重写,然后在模块中创建一个自定义模板并从以下位置更改链接:

    JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id...')
    

    致:

    JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id...'.'&Itemid='.JText::_("VM_ITEMID"))
    

    我重复一遍,这不是问题的解决方案,这应该由核心负责,但它是有效的,这样您就可以更改绑定到组件的Itemid。

        3
  •  0
  •   Kathir    13 年前

    当需要在Joomla中获取活动菜单项ID以仅显示该菜单项的某些特定内容或仅显示该菜单项的ID时,请在希望显示活动菜单项ID的位置插入以下代码:

    <?php 
    $currentMenuId = JSite::getMenu()->getActive()->id ;
    echo "Your menu item ID is: $currentMenuId"; 
    ?>
    
        4
  •  0
  •   LizardKG    10 年前

    这是旧的,但如果有人需要它这里的答案。从参数中检索itemid:

    <!--ITEMID FROM MENU-->
    <?
    $params =JComponentHelper::getParams( 'com_lobotoradio' );
    $itemid = $params->get('itemid');
    ?>
    <!--END ITEMID FROM MENU-->
    

    <?php echo $itemid; ?>
    

    最坏情况下,使用此黑客:

    <?php 
    $itemid = X;
    echo $itemid;
    ?>