API16

JElementMenuItem/fetchElement: Difference between revisions

From Joomla! Documentation

Doxiki (talk | contribs)
No edit summary
m preparing for archive only
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
<! removed transcluded page call, red link never existed >
<span class="editsection" style="font-size:76%;">
<nowiki>[</nowiki>[[Description:JElementMenuItem/fetchElement|Edit Descripton]]<nowiki>]</nowiki>
</span>
 
{{Description:JElementMenuItem/fetchElement}}


===Syntax===
===Syntax===
Line 144: Line 139:
</source>
</source>


<span class="editsection" style="font-size:76%;">
 
<nowiki>[</nowiki>[[SeeAlso:JElementMenuItem/fetchElement|Edit See Also]]<nowiki>]</nowiki>
<! removed transcluded page call, red link never existed >
</span>
{{SeeAlso:JElementMenuItem/fetchElement}}


===Examples===
===Examples===
<CodeExamplesForm />
=== Code Examples ===
<dpl>
<dpl>
  noresultsheader=\n
  noresultsheader=\n
  category=fetchElement
  category=fetchElement
  category=JElementMenuItem
  category=JElementMenuItem
  category=CodeExample
  namespace=CodeExample
  category=MethodExample
  category=MethodExample
  include=*
  include=*
  format= ,,,
  format= ,,,
</dpl>
</dpl>
[[Category:Archived pages API16]]

Latest revision as of 01:35, 25 March 2017

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

Syntax

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

Defined in

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

Importing

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

Source Body

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 transcluded page call, red link never existed >

Examples

Code Examples