这个问题对Joomla来说有点具体。
我有一个主菜单包括:
主页|关于我们|隐私政策|投资组合|联系我们。
每个菜单项都链接到一篇文章。
现在在完整的网站上,我需要在组件和模块中有许多地方显示两个链接:隐私政策&投资组合。
有人可以指导我吗?我不想硬编码链接,因为项目ID在生产中会有所不同。
答案 0 :(得分:31)
有两种方法可以做到:
选项1:
Joomla每次加载页面时都会加载菜单。您可以通过调用以下方法来访问菜单。
// Get default menu - JMenu object, look at JMenu api docs
$menu = JFactory::getApplication()->getMenu();
// Get menu items - array with menu items
$items = $menu->getMenu();
// Look through the menu structure, once you understand it
// do a loop and find the link that you need.
var_dump($items);
此方法更快,因为您不需要查询数据库。在内存中操作简单。
选项2:
从数据库中获取它。根据别名或其他内容获取jos_menu
的菜单链接,或者通过文章别名从jos_content
获取文章#,然后创建链接
$db = JFactory::getDBO();
// Load by menu alias
$query = "SELECT link FROM #__menu WHERE alias = 'privacy-policy'";
$db->setQuery($query);
$url = $db->loadResult();
$url = JRoute::_($url);
// Load by article alias
$query = "SELECT id FROM #__content WHERE alias = 'privacy-policy'";
$db->setQuery($query);
$articleId = (int) $db->loadResult();
$url = JRoute::_("index.php?option=com_content&view=article&id=$articleId");
答案 1 :(得分:16)
在2.5+中完成此操作的最简单方法是:
$app = JFactory::getApplication();
$menu = $app->getMenu();
$menu_items = $menu->getItems('menutype', 'mainmenu');
只需将'mainmenu'替换为您想要提取的类型。这相当于菜单的系统名称,与在菜单模块中选择的名称相同。
编辑以回应@ betweenbrain的问题: 以与上面相同的方式获取菜单对象,然后:
// To get menu items filtered by access level of current user.
$filtered_menu_items = $menu->getItems(null, null);
// To get all menu items, unfiltered.
$all_menu_items = $menu->getMenu();
答案 2 :(得分:2)
在Joomla中,有一个选项可以链接任何带有特定超链接选项的菜单。从您放置文章链接的后端菜单结构,您可以从那里选择其他链接。
答案 3 :(得分:1)
这样做的标准方法是: http://docs.joomla.org/Help32:Menus_Menu_Item_Menu_Item_Alias
只需制作第二个菜单,只需使用隐私政策&作为菜单项类型的投资组合选择系统链接>菜单别名项目。 然后,您可以选择将其链接到您已创建的菜单中的菜单项。
这样您就可以随时更改原始文章链接,并且所有别名都会更新。
答案 4 :(得分:0)
<?php
$menuitemid = JRequest::getInt( 'Itemid' );
if ($menuitemid)
{
$menu = JSite::getMenu();
$menuparams = $menu->getParams( $menuitemid );
$params->merge( $menuparams );
}
$propvalue= $params->get('property_name');
?>
答案 5 :(得分:0)
是否更容易创建一个包含两个别名的菜单,然后使用{loadposition}
或其他任何内容将它们加载到网站的任何位置?
答案 6 :(得分:0)
我认为您应该在joomla中创建一个新菜单然后创建别名类型的菜单项,您应该这样做以确保您不会出现重复的内容问题。 我认为亚历克斯的答案是可以的,如果你想用代码来做,但更难维护,有人知道谁出现。因为它是一个菜单项,我认为它不属于组件或模块。
答案 7 :(得分:0)
获取joomla后端/管理员中的所有菜单项。测试Joomla 3.3 +
<?php
// Create JApplicationSite instance to get all menu
$site = new JApplicationSite;
$menu = $site->getMenu();
// Get menu items - array filtered by access level of current user. Replace with `getMenu` to get all items or check @don-gilbert's answer.
$menuItems = $menu->getItems(null, null);
// Build please select option for no itemid
$selectOption = array();
$selectOption[] = JHTML::_(
'select.option',
'',
JText::_('COM_REDSHOP_PLEASE_SELECT'),
'id',
'title'
);
// Merge items to build select list.
$items = array_merge($selectOption, $menuItems);
// Just print array to understand the structure
echo "<pre>";
print_r($items);
echo "</pre>";
// Or create a select list directly using array.
echo JHtml::_(
'select.genericlist',
$items,
'menu_item_id',
'',
'id',
'title',
$this->detail->menu_item_id
);
答案 8 :(得分:-1)
$app = JFactory::getApplication();
$menu = $app->getMenu();
$items = $menu->getItems('menutype', 'mainmenu');