这个问题对Joomla来说有点具体.
我有一个主菜单包括:
主页|关于我们|隐私政策|投资组合|联系我们.
每个菜单项都链接到一篇文章.
现在在完整的站点上,组件和模块中有许多地方需要显示两个链接:隐私策略和组合.
有人可以指导我吗?我不想硬编码链接,因为项目ID在生产中会有所不同.
Ale*_*lex 32
有两种方法可以做到:
选项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);
Run Code Online (Sandbox Code Playgroud)
此方法更快,因为您不需要查询数据库.在内存中操作简单.
选项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");
Run Code Online (Sandbox Code Playgroud)
Don*_*ert 16
在2.5+中完成此操作的最简单方法是:
$app = JFactory::getApplication();
$menu = $app->getMenu();
$menu_items = $menu->getItems('menutype', 'mainmenu');
Run Code Online (Sandbox Code Playgroud)
只需将'mainmenu'替换为您想要提取的menutype.这将等同于菜单的系统名称,与在菜单模块中选择的名称相同.
编辑以响应以下@ 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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35342 次 |
| 最近记录: |