API16

JElementMenuItem/fetchElement

From Joomla! Documentation

< API16:JElementMenuItem
Revision as of 00:03, 13 May 2013 by JoomlaWikiBot (talk | contribs) (removing red link to edit, no existant pages)

The "API16" namespace is an archived namespace. This page contains information for a Joomla! version which is no longer supported. It exists only as a historical reference, it will not be improved and its content may be incomplete and/or contain broken links.

[<! removed edit link to red link >]

<! removed transcluded page call, red link never existed >

Syntax[edit]

fetchElement($name, $value, &$node, $control_name)
Parameter Name Default Value Description
$name
$value
&$node
$control_name

Defined in[edit]

libraries/joomla/html/parameter/element/menuitem.php

Importing[edit]

jimport( 'joomla.html.parameter.element.menuitem' );

Source Body[edit]

public function fetchElement($name, $value, &$node, $control_name)
{
        $db = &JFactory::getDbo();

        $menuType = $this->_parent->get('menu_type');
        if (!empty($menuType)) {
                $where = ' WHERE menutype = '.$db->Quote($menuType);
        } else {
                $where = ' WHERE 1';
        }

        // load the list of menu types
        // TODO: move query to model
        $query = 'SELECT menutype, title' .
                        ' FROM #__menu_types' .
                        ' ORDER BY title';
        $db->setQuery($query);
        $menuTypes = $db->loadObjectList();

        if ($state = $node->attributes('state')) {
                $where .= ' AND published = '.(int) $state;
        }

        // load the list of menu items
        // TODO: move query to model
        $query = 'SELECT id, parent_id, name, menutype, type' .
                        ' FROM #__menu' .
                        $where .
                        ' ORDER BY menutype, parent_id, ordering'
                        ;

        $db->setQuery($query);
        $menuItems = $db->loadObjectList();

        // establish the hierarchy of the menu
        // TODO: use node model
        $children = array();

        if ($menuItems)
        {
                // first pass - collect children
                foreach ($menuItems as $v)
                {
                        $pt     = $v->parent_id;
                        $list   = @$children[$pt] ? $children[$pt] : array();
                        array_push($list, $v);
                        $children[$pt] = $list;
                }
        }

        // second pass - get an indent list of the items
        $list = JHtml::_('menu.treerecurse', 0, '', array(), $children, 9999, 0, 0);

        // assemble into menutype groups
        $n = count($list);
        $groupedList = array();
        foreach ($list as $k => $v) {
                $groupedList[$v->menutype][] = &$list[$k];
        }

        // assemble menu items to the array
        $options        = array();
        $options[]      = JHtml::_('select.option', '', '- '.JText::_('SELECT_ITEM').' -');

        foreach ($menuTypes as $type)
        {
                if ($menuType == '')
                {
                        $options[]      = JHtml::_('select.option',  '0', '&nbsp;', 'value', 'text', true);
                        $options[]      = JHtml::_('select.option',  $type->menutype, $type->title . ' - ' . JText::_('Top'), 'value', 'text', true);
                }
                if (isset($groupedList[$type->menutype]))
                {
                        $n = count($groupedList[$type->menutype]);
                        for ($i = 0; $i < $n; $i++)
                        {
                                $item = &$groupedList[$type->menutype][$i];

                                //If menutype is changed but item is not saved yet, use the new type in the list
                                if (JRequest::getString('option', '', 'get') == 'com_menus') {
                                        $currentItemArray = JRequest::getVar('cid', array(0), '', 'array');
                                        $currentItemId = (int) $currentItemArray[0];
                                        $currentItemType = JRequest::getString('type', $item->type, 'get');
                                        if ($currentItemId == $item->id && $currentItemType != $item->type) {
                                                $item->type = $currentItemType;
                                        }
                                }

                                $disable = strpos($node->attributes('disable'), $item->type) !== false ? true : false;
                                $options[] = JHtml::_('select.option',  $item->id, '&nbsp;&nbsp;&nbsp;' .$item->treename, 'value', 'text', $disable);

                        }
                }
        }

        return JHtml::_('select.genericlist', $options, $control_name.'['.$name.']',
                array(
                        'id' => $control_name.$name,
                        'list.attr' => 'class="inputbox"',
                        'list.select' => $value
                )
        );
}

[<! removed edit link to red link >] <! removed transcluded page call, red link never existed >

Examples[edit]

<CodeExamplesForm />