📄 item.php
字号:
$post = $this->_state->get( 'request' ); switch ($post['type']) { case 'separator': break; case 'url': break; case 'menulink': $post['link'] = 'index.php?Itemid='.$post['params']['menu_item']; break; case 'component': break; } if (!$row->bind( $post )) { echo "<script> alert('".$row->getError(true)."'); window.history.go(-1); </script>\n"; return false; } if ($row->id > 0) { // existing item $query = 'SELECT menutype FROM #__menu WHERE id = '.(int) $row->id; $this->_db->setQuery( $query ); $oldType = $this->_db->loadResult(); if ($oldType != $row->menutype) { // moved to another menu, disconnect the old parent $row->parent = 0; } $query = 'SELECT parent FROM #__menu WHERE id = '.(int) $row->id; $this->_db->setQuery( $query ); $oldParent = $this->_db->loadResult(); if ($oldParent != $row->parent) { // we have changed parents, so we have to fix the submenu values if ($row->parent != 0) { $query = 'SELECT sublevel FROM #__menu WHERE id = '.(int) $row->parent; $this->_db->setQuery( $query ); $sublevel = $this->_db->loadResult() + 1; } else { $sublevel = 0; } $row->sublevel = $sublevel; $this->_setSubLevel( array( (int) $row->id ), $sublevel ); } } else { // if new item order last in appropriate group $where = "menutype = " . $db->Quote($row->menutype) . " AND published >= 0 AND parent = ".(int) $row->parent; $row->ordering = $row->getNextOrder( $where ); if( $row->parent != 0 ) { $query = 'SELECT sublevel FROM #__menu WHERE id = '. (int) $row->parent; $this->_db->setQuery($query); $row->sublevel = $this->_db->loadResult() + 1; } } if (isset($post['urlparams']) && is_array($post['urlparams'])) { $pos = strpos( $row->link, '?' ); if ($pos !== false) { $prefix = substr( $row->link, 0, $pos ); $query = substr( $row->link, $pos+1 ); $temp = array(); if(strpos($query, '&') !== false) { $query = str_replace('&', '&', $query); } parse_str( $query, $temp ); $temp2 = array_merge( $temp, $post['urlparams'] ); $temp3 = array(); foreach ($temp2 as $k => $v) { if ( $k && strlen($v) ) { $temp3[] = $k.'='.$v; } } $url = null; $row->link = $prefix . '?' . implode( '&', $temp3 ); } } if (!$row->check()) { echo "<script> alert('".$row->getError(true)."'); window.history.go(-1); </script>\n"; return false; } if (!$row->store()) { echo "<script> alert('".$row->getError(true)."'); window.history.go(-1); </script>\n"; return false; } $row->checkin(); $row->reorder( 'menutype='.$db->Quote( $row->menutype ).' AND parent='.(int)$row->parent ); // clean cache MenusHelper::cleanCache(); return true; } /** * Delete one or more menu items * @param mixed int or array of id values */ function delete( $ids ) { JArrayHelper::toInteger($ids); $db = &$this->getDBO(); if (count( $ids )) { // Delete associated module and template mappings $where = 'WHERE menuid = ' . implode( ' OR menuid = ', $ids ); $query = 'DELETE FROM #__modules_menu ' . $where; $db->setQuery( $query ); if (!$db->query()) { $this->setError( $menuTable->getErrorMsg() ); return false; } $query = 'DELETE FROM #__templates_menu ' . $where; $db->setQuery( $query ); if (!$db->query()) { $this->setError( $menuTable->getErrorMsg() ); return false; } // Set any alias menu types to not point to missing menu items $query = 'UPDATE #__menu SET link = 0 WHERE type = \'menulink\' AND (link = '.implode( ' OR id = ', $ids ).')'; $db->setQuery( $query ); if (!$db->query()) { $this->setError( $db->getErrorMsg() ); return false; } // Delete the menu items $where = 'WHERE id = ' . implode( ' OR id = ', $ids ); $query = 'DELETE FROM #__menu ' . $where; $db->setQuery( $query ); if (!$db->query()) { $this->setError( $db->getErrorMsg() ); return false; } } // clean cache MenusHelper::cleanCache(); return true; } /** * Delete menu items by type */ function deleteByType( $type = '' ) { $db = &$this->getDBO(); $query = 'SELECT id' . ' FROM #__menu' . ' WHERE menutype = ' . $db->Quote( $type ); $db->setQuery( $query ); $ids = $db->loadResultArray(); if ($db->getErrorNum()) { $this->setError( $db->getErrorMsg() ); return false; } return $this->delete( $ids ); } /** * Returns the internal table object * @return JTable */ function &_getTable() { if ($this->_table == null) { $this->_table =& JTable::getInstance( 'menu'); } return $this->_table; } function &_getStateXML() { static $xml; if (isset($xml)) { return $xml; } $xml = null; $xmlpath = null; $item = &$this->getItem(); switch ($item->type) { case 'separator': $xmlpath = JPATH_BASE.DS.'components'.DS.'com_menus'.DS.'models'.DS.'metadata'.DS.'separator.xml'; break; case 'url': $xmlpath = JPATH_BASE.DS.'components'.DS.'com_menus'.DS.'models'.DS.'metadata'.DS.'url.xml'; break; case 'menulink': $xmlpath = JPATH_BASE.DS.'components'.DS.'com_menus'.DS.'models'.DS.'metadata'.DS.'menulink.xml'; break; case 'component': default: if (isset($item->linkparts['view'])) { // View is set... so we konw to look in view file if (isset($item->linkparts['layout'])) { $layout = $item->linkparts['layout']; } else { $layout = 'default'; } $lpath = JPATH_ROOT.DS.'components'.DS.$item->linkparts['option'].DS.'views'.DS.$item->linkparts['view'].DS.'tmpl'.DS.$layout.'.xml'; $vpath = JPATH_ROOT.DS.'components'.DS.$item->linkparts['option'].DS.'views'.DS.$item->linkparts['view'].DS.'metadata.xml'; if (file_exists($lpath)) { $xmlpath = $lpath; } elseif (file_exists($vpath)) { $xmlpath = $vpath; } } if (!$xmlpath && isset($item->linkparts['option'])) { $xmlpath = JPATH_ROOT.DS.'components'.DS.$item->linkparts['option'].DS.'metadata.xml'; if(!file_exists($xmlpath)) { $xmlpath = JApplicationHelper::getPath('com_xml', $item->linkparts['option']); } } break; } if (file_exists($xmlpath)) { $xml =& JFactory::getXMLParser('Simple'); if ($xml->loadFile($xmlpath)) { $this->_xml = &$xml; $document =& $xml->document; /* * HANDLE NO OPTION CASE */ $menus =& $document->getElementByPath('menu'); if (is_a($menus, 'JSimpleXMLElement') && $menus->attributes('options') == 'none') { $xml =& $menus->getElementByPath('state'); } else { $xml =& $document->getElementByPath('state'); } // Handle error case... path doesn't exist if (!is_a($xml, 'JSimpleXMLElement')) { return $document; } /* * HANDLE A SWITCH IF IT EXISTS */ if ($switch = $xml->attributes('switch')) { $default = $xml->attributes('default'); // Handle switch $switchVal = (isset($item->linkparts[$switch]))? $item->linkparts[$switch] : 'default'; $found = false; foreach ($xml->children() as $child) { if ($child->name() == $switchVal) { $xml =& $child; $found = true; break; } } if (!$found) { foreach ($xml->children() as $child) { if ($child->name() == $default) { $xml =& $child; break; } } } } /* * HANDLE INCLUDED PARAMS */ $children = $xml->children(); if (count($children) == 1) { if ($children[0]->name() == 'include') { $ret =& $this->_getIncludedParams($children[0]); if ($ret) { $xml =& $ret; } } } if ($switch = $xml->attributes('switch')) { $default = $xml->attributes('default'); // Handle switch $switchVal = ($item->linkparts[$switch])? $item->linkparts[$switch] : 'default'; $found = false; foreach ($xml->children() as $child) { if ($child->name() == $switchVal) { $xml =& $child; $found = true; break; } } if (!$found) { foreach ($xml->children() as $child) { if ($child->name() == $default) { $xml =& $child; break; } } } } } } return $xml; } function &_getIncludedParams($include) { $tags = array(); $state = null; $source = $include->attributes('source'); $path = $include->attributes('path'); $item = &$this->getItem(); preg_match_all( "/{([A-Za-z\-_]+)}/", $source, $tags); if (isset($tags[1])) { for ($i=0;$i<count($tags[1]);$i++) { $source = str_replace($tags[0][$i], @$item->linkparts[$tags[1][$i]], $source); } } // load the source xml file if (file_exists( JPATH_ROOT.$source )) { $xml = & JFactory::getXMLParser('Simple'); if ($xml->loadFile(JPATH_ROOT.$source)) { $document = &$xml->document; $state = $document->getElementByPath($path); } } return $state; } /** * Sets the sublevel for menu items * * @param array id values to set * @param int level to assign to the sublevel */ function _setSubLevel( $cid, $level ) { JArrayHelper::toInteger($cid, array(0)); $ids = implode( ',', $cid ); $query = 'UPDATE #__menu SET sublevel = '.(int) $level .' WHERE id IN ('.$ids.')'; $this->_db->setQuery( $query ); $this->_db->query(); $query = 'SELECT id FROM #__menu WHERE parent IN ('.$ids.')'; $this->_db->setQuery( $query ); $cids = $this->_db->loadResultArray( 0 ); if (!empty( $cids )) { $this->_setSubLevel( $cids, $level + 1 ); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -