2010-11-23 89 views
1

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

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

回答

4

在生成组件中链接的代码中,需要将ItemId附加到该URL。您可以使用获得项目Id:

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

所以,你会以这样的方式使用它(作为一个例子):一旦菜单项已被点击

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

该变种会存在。然后,如果视图以分层方式存在,那么需要在组件中的每个视图中执行视图,其中一个视图链接到下一个视图。

[编辑]

您可以创建一个辅助函数,对于上面的例子,会自动将项目Id到每一个环节,你产生如

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

是的,我知道我可以手动添加,但Joomla应该处理它 – miojamo 2010-11-23 13:42:23

0

我我的经验,在此情况下出现问题时,你有一个模块(例如:virtuemart产品列表)的地方放置NOT在你的链接应引起部分。 假设您在Itemid === 731的菜单中设置了VM(com_virtuemart),并且在主页(com_content)中插入了产品列表模块。当您点击产品页面时,您会希望模块设置链接,使您的VM Itemid包含在链接中([linkl] & Itemid = 731) - 但在大多数情况下它不会发生,您的Itemid不会添加到网址中。

此外,你不能总是期望(像在这种情况下)在你的url params中拥有正确的Itemid。所以JRequest::getint('Itemid')的东西将无法按预期工作。

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

这仍然是w \ J!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。 希望这有助于

0

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

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

这是旧的,但如果有人需要它,这里的答案是。从参数检索您的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; 
?>