如果我的组件列在菜单下,并且如果链接不包含例如,则将模块分配给该菜单。 itemID = 63比模块没有显示。
有没有办法自动将ItemId添加到每个链接并在组件内重定向?
答案 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.'&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;
?>