joomla组件菜单itemID

时间:2010-11-23 13:23:53

标签: joomla

如果我的组件列在菜单下,并且如果链接不包含例如,则将模块分配给该菜单。 itemID = 63比模块没有显示。

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

4 个答案:

答案 0 :(得分:4)

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

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

所以你会以这种方式使用它(例如):

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

单击菜单项后,此var将存在。如果视图以分层方式放置,其中一个视图链接到下一个视图,则需要通过组件中的每个视图进行传递。

<强> [编辑]

您可以创建一个辅助函数,对于上面的示例,自动将ItemId添加到您生成的每个链接,例如

function genLink($link) {
    return JRoute::_($link.'&amp;Itemid='.JRequest::getint( 'Itemid' ));
}

答案 1 :(得分:0)

我的经验这个问题出现在你将某个模块(例如,virtmart产品列表)放置在某个地方而不是链接应该带到的部分的情况下。 假设您在菜单中使用Itemid === 731设置了VM(com_virtuemart),并在主页(com_content)中插入了产品列表模块。当您点击产品进入产品页面时,您希望模块设置链接,使得您的VM Itemid包含在链接中([linkl]&amp; Itemid = 731) - 但在大多数情况下如果没有发生,你的Itemid不会被添加到网址。

此外,您不能总是期望(例如在这种情况下)在您的网址参数中包含正确的Itemid。所以JRequest::getint( 'Itemid' )内容无法按预期工作。

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

这仍然是w \ J!2.5。

的情况

我没有你的解决方案,但我可以告诉你我是如何克服这个问题的。

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

我所做的是使用语言覆盖(J!2.5 - 语言管理器:语言覆盖),注册类似VM_ITEMID === 731的覆盖,然后在模块中创建自定义模板并更改链接: / p>

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。 希望这有帮助

答案 2 :(得分:0)

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

<?php 
$currentMenuId = JSite::getMenu()->getActive()->id ;
echo "Your menu item ID is: $currentMenuId"; 
?>

答案 3 :(得分:0)

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

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

然后在任何需要的地方打印出来:

<?php echo $itemid; ?>

最糟糕的情况,请使用此hack:

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