📄 item.php
字号:
} 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;
}
}
jimport('joomla.filter.output');
$row->name = JFilterOutput::ampReplace( $row->name );
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();
parse_str( $query, $temp );
$temp2 = array_merge( $temp, $post['urlparams'] );
$temp3 = array();
foreach ($temp2 as $k => $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 menu cache
$cache =& JFactory::getCache('mod_mainmenu');
$cache->clean();
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 menu cache
$cache =& JFactory::getCache('mod_mainmenu');
$cache->clean();
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 + -