Source for file menu.php
Documentation is available at menu.php
* @package Joomla.Libraries
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
* Utility class working with menu select lists
* @package Joomla.Libraries
* Cached array of the menus.
protected static $menus =
null;
* Cached array of the menus items.
protected static $items =
null;
* Get a list of the available menus.
public static function menus()
if (empty(static::$menus))
$db =
JFactory::getDbo();
$query =
$db->getQuery(true)
->select('menutype AS value, title AS text')
->from($db->quoteName('#__menu_types'))
static::$menus =
$db->loadObjectList();
* Returns an array of menu items grouped by menu.
* @param array $config An array of configuration options.
public static function menuitems($config =
array())
if (empty(static::$items))
$menus =
static::menus();
$db =
JFactory::getDbo();
$query =
$db->getQuery(true)
->select('a.id AS value, a.title AS text, a.level, a.menutype')
->where('a.parent_id > 0')
->where('a.type <> ' .
$db->quote('url'))
->where('a.client_id = 0');
// Filter on the published state
if (isset
($config['published']))
if (is_numeric($config['published']))
$query->where('a.published = ' . (int)
$config['published']);
elseif ($config['published'] ===
'')
$query->where('a.published IN (0,1)');
$items =
$db->loadObjectList();
// Collate menu items based on menutype
foreach ($items as &$item)
if (!isset
($lookup[$item->menutype]))
$lookup[$item->menutype] =
array();
$lookup[$item->menutype][] =
&$item;
$item->text =
str_repeat('- ', $item->level) .
$item->text;
static::$items =
array();
foreach ($menus as &$menu)
static::$items[] =
JHtml::_('select.optgroup', $menu->text);
// Special "Add to this Menu" option:
static::$items[] =
JHtml::_('select.option', $menu->value .
'.1', JText::_('JLIB_HTML_ADD_TO_THIS_MENU'));
if (isset
($lookup[$menu->value]))
foreach ($lookup[$menu->value] as &$item)
static::$items[] =
JHtml::_('select.option', $menu->value .
'.' .
$item->value, $item->text);
static::$items[] =
JHtml::_('select.optgroup', $menu->text);
* Displays an HTML select list of menu items.
* @param string $name The name of the control.
* @param string $selected The value of the selected option.
* @param string $attribs Attributes for the control.
* @param array $config An array of options for the control.
public static function menuitemlist($name, $selected =
null, $attribs =
null, $config =
array())
$options =
static::menuitems($config);
'select.genericlist', $options, $name,
'id' => isset
($config['id']) ?
$config['id'] :
'assetgroups_' .
(++
$count),
'list.attr' =>
(is_null($attribs) ?
'class="inputbox" size="1"' :
$attribs),
'list.select' => (int)
$selected,
'list.translate' =>
false
* Build the select list for Menu Ordering
* @param object &$row The row object
* @param integer $id The id for the row. Must exist to enable menu ordering
public static function ordering(&$row, $id)
$query =
$db->getQuery(true)
->select('ordering AS value, title AS text')
->from($db->quoteName('#__menu'))
->where($db->quoteName('menutype') .
' = ' .
$db->quote($row->menutype))
->where($db->quoteName('parent_id') .
' = ' . (int)
$row->parent_id)
->where($db->quoteName('published') .
' != -2')
$order =
JHtml::_('list.genericordering', $query);
'select.genericlist', $order, 'ordering',
array('list.attr' =>
'class="inputbox" size="1"', 'list.select' => (int)
$row->ordering)
$ordering =
'<input type="hidden" name="ordering" value="' .
$row->ordering .
'" />' .
JText::_('JGLOBAL_NEWITEMSLAST_DESC');
* Build the multiple select list for Menu Links/Pages
* @param boolean $all True if all can be selected
* @param boolean $unassigned True if unassigned can be selected
public static function linkoptions($all =
false, $unassigned =
false)
// Get a list of the menu items
$query =
$db->getQuery(true)
->select('m.id, m.parent_id, m.title, m.menutype')
->from($db->quoteName('#__menu') .
' AS m')
->where($db->quoteName('m.published') .
' = 1')
->order('m.menutype, m.parent_id, m.ordering');
$mitems =
$db->loadObjectList();
// Establish the hierarchy of the menu
// First pass - collect children
$list =
@$children[$pt] ?
$children[$pt] :
array();
// Second pass - get an indent list of the items
$list =
static::treerecurse((int)
$mitems[0]->parent_id, '', array(), $children, 9999, 0, 0);
// Code that adds menu name to Display of Page(s)
$mitems[] =
JHtml::_('select.option', '<OPTGROUP>', JText::_('JOPTION_MENUS'));
$mitems[] =
JHtml::_('select.option', -
1, JText::_('JOPTION_UNASSIGNED'));
$mitems[] =
JHtml::_('select.option', '</OPTGROUP>');
foreach ($list as $list_a)
if ($list_a->menutype !=
$lastMenuType)
$mitems[] =
JHtml::_('select.option', '</OPTGROUP>');
$mitems[] =
JHtml::_('select.option', '<OPTGROUP>', $list_a->menutype);
$lastMenuType =
$list_a->menutype;
$tmpMenuType =
$list_a->menutype;
$mitems[] =
JHtml::_('select.option', $list_a->id, $list_a->title);
if ($lastMenuType !==
null)
$mitems[] =
JHtml::_('select.option', '</OPTGROUP>');
* Build the list representing the menu tree
* @param integer $id Id of the menu item
* @param string $indent The indentation string
* @param array $list The list to process
* @param array &$children The children of the current item
* @param integer $maxlevel The maximum number of levels in the tree
* @param integer $level The starting level
* @param string $type Type of link: component, URL, alias, separator
public static function treerecurse($id, $indent, $list, &$children, $maxlevel =
9999, $level =
0, $type =
1)
if (@$children[$id] &&
$level <=
$maxlevel)
foreach ($children[$id] as $v)
$pre =
'<sup>|_</sup> ';
$spacer =
'.      ';
$spacer =
'  ';
$list[$id]->treename =
$indent .
$txt;
$list[$id]->children =
count(@$children[$id]);
$list =
static::treerecurse($id, $indent .
$spacer, $list, $children, $maxlevel, $level +
1, $type);
Documentation generated on Tue, 19 Nov 2013 15:07:56 +0100 by phpDocumentor 1.4.3