⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 list.php

📁 Joomla!是一套获得过多个奖项的内容管理系统(Content Management System, CMS)。Joomla!采用PHP+MySQL数据库开发
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php/** * @version		$Id: list.php 11646 2009-03-01 19:34:56Z ian $ * @package		Joomla * @subpackage	Menus * @copyright	Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved. * @license		GNU/GPL, see LICENSE.php * Joomla! is free software. This version may have been modified pursuant to the * GNU General Public License, and as distributed it includes or is derivative * of works licensed under the GNU General Public License or other free or open * source software licenses. See COPYRIGHT.php for copyright notices and * details. */// Check to ensure this file is included in Joomla!defined('_JEXEC') or die( 'Restricted access' );jimport( 'joomla.application.component.model' );/** * @package		Joomla * @subpackage	Menus */class MenusModelList extends JModel{	/** @var object JTable object */	var $_table = null;	var $_pagination = null;	/**	 * Returns the internal table object	 * @return JTable	 */	function &getTable()	{		if ($this->_table == null)		{			$this->_table =& JTable::getInstance( 'menu');		}		return $this->_table;	}	function &getItems()	{		global $mainframe;		static $items;		if (isset($items)) {			return $items;		}		$db =& $this->getDBO();		$menutype			= $mainframe->getUserStateFromRequest( "com_menus.menutype",						'menutype',			'mainmenu',		'string' );		$filter_order		= $mainframe->getUserStateFromRequest( 'com_menus.'.$menutype.'.filter_order',		'filter_order',		'm.ordering',	'cmd' );		$filter_order_Dir	= $mainframe->getUserStateFromRequest( 'com_menus.'.$menutype.'.filter_order_Dir',	'filter_order_Dir',	'ASC',			'word' );		$filter_state		= $mainframe->getUserStateFromRequest( 'com_menus.'.$menutype.'.filter_state',		'filter_state',		'',				'word' );		$limit				= $mainframe->getUserStateFromRequest( 'global.list.limit',							'limit',			$mainframe->getCfg( 'list_limit' ),	'int' );		$limitstart			= $mainframe->getUserStateFromRequest( 'com_menus.'.$menutype.'.limitstart',		'limitstart',		0,				'int' );		$levellimit			= $mainframe->getUserStateFromRequest( 'com_menus.'.$menutype.'.levellimit',		'levellimit',		10,				'int' );		$search				= $mainframe->getUserStateFromRequest( 'com_menus.'.$menutype.'.search',			'search',			'',				'string' );		$search				= JString::strtolower( $search );		$and = '';		if ( $filter_state )		{			if ( $filter_state == 'P' ) {				$and = ' AND m.published = 1';			} else if ($filter_state == 'U' ) {				$and = ' AND m.published = 0';			}		}		// just in case filter_order get's messed up		if ($filter_order) {			$orderby = ' ORDER BY '.$filter_order .' '. $filter_order_Dir .', m.parent, m.ordering';		} else {			$orderby = ' ORDER BY m.parent, m.ordering';		}		// select the records		// note, since this is a tree we have to do the limits code-side		if ($search) {			$query = 'SELECT m.id' .					' FROM #__menu AS m' .					' WHERE menutype = '.$db->Quote($menutype) .					' AND LOWER( m.name ) LIKE '.$db->Quote( '%'.$db->getEscaped( $search, true ).'%', false ) .					$and;			$db->setQuery( $query );			$search_rows = $db->loadResultArray();		}		$query = 'SELECT m.*, u.name AS editor, g.name AS groupname, c.publish_up, c.publish_down, com.name AS com_name' .				' FROM #__menu AS m' .				' LEFT JOIN #__users AS u ON u.id = m.checked_out' .				' LEFT JOIN #__groups AS g ON g.id = m.access' .				' LEFT JOIN #__content AS c ON c.id = m.componentid AND m.type = "content_typed"' .				' LEFT JOIN #__components AS com ON com.id = m.componentid AND m.type = "component"' .				' WHERE m.menutype = '.$db->Quote($menutype) .				' AND m.published != -2' .				$and .				$orderby;		$db->setQuery( $query );		$rows = $db->loadObjectList();		// establish the hierarchy of the menu		$children = array();		// first pass - collect children		foreach ($rows as $v )		{			$pt = $v->parent;			$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, max( 0, $levellimit-1 ) );		// eventually only pick out the searched items.		if ($search) {			$list1 = array();			foreach ($search_rows as $sid )			{				foreach ($list as $item)				{					if ($item->id == $sid) {						$list1[] = $item;					}				}			}			// replace full list with found items			$list = $list1;		}		$total = count( $list );		jimport('joomla.html.pagination');		$this->_pagination = new JPagination( $total, $limitstart, $limit );		// slice out elements based on limits		$list = array_slice( $list, $this->_pagination->limitstart, $this->_pagination->limit );		$i = 0;		$query = array();		foreach ( $list as $mitem )		{			$edit = '';			switch ( $mitem->type )			{				case 'separator':					$list[$i]->descrip 	= JText::_('Separator');					break;				case 'url':					$list[$i]->descrip 	= JText::_('URL');					break;				case 'menulink':					$list[$i]->descrip 	= JText::_('Menu Link');					break;				case 'component':					$list[$i]->descrip 	= JText::_('Component');					$query 			= parse_url($list[$i]->link);					$view = array();					if(isset($query['query'])) {						if(strpos($query['query'], '&amp;') !== false)						{						   $query['query'] = str_replace('&amp;','&',$query['query']);						}						parse_str($query['query'], $view);					}					$list[$i]->view		= $list[$i]->com_name;					if (isset($view['view']))					{						$list[$i]->view	.= ' &raquo; '.JText::_(ucfirst($view['view']));					}					if (isset($view['layout']))					{						$list[$i]->view	.= ' / '.JText::_(ucfirst($view['layout']));					}					if (isset($view['task']) && !isset($view['view']))					{						$list[$i]->view	.= ' :: '.JText::_(ucfirst($view['task']));					}					break;				default:					$list[$i]->descrip 	= JText::_('Unknown');					break;			}			$i++;		}		$items = $list;		return $items;	}	function &getPagination()	{		if ($this->_pagination == null) {			$this->getItems();		}		return $this->_pagination;	}	/**	* Form for copying item(s) to a specific menu	*/	function getItemsFromRequest()	{		static $items;		if (isset($items)) {			return $items;		}		$cid = JRequest::getVar( 'cid', array(), 'post', 'array' );		JArrayHelper::toInteger($cid);		if (count($cid) < 1) {			$this->setError(JText::_( 'Select an item to move'));			return false;		}		// Query to list the selected menu items		$db =& $this->getDBO();		$cids = implode( ',', $cid );		$query = 'SELECT `id`, `name`' .				' FROM `#__menu`' .				' WHERE `id` IN ( '.$cids.' )';		$db->setQuery( $query );		$items = $db->loadObjectList();		return $items;	}	/**	 * Gets the componet table object related to this menu item	 */	function &getComponent()	{		$id = $this->_table->componentid;		$component	= & JTable::getInstance( 'component');		$component->load( $id );		return $component;	}	/**	* Save the item(s) to the menu selected	*/	function copy( $items, $menu )	{		$curr =& JTable::getInstance('menu');		$itemref = array();		foreach ($items as $id)		{			$curr->load( $id );			$curr->id	= NULL;			$curr->home	= 0;			if ( !$curr->store() ) {				$this->setError($curr->getError());				return false;			}			$itemref[] = array($id, $curr->id);		}		foreach ($itemref as $ref)		{			$curr->load( $ref[1] );			if ($curr->parent!=0) {				$found = false;				foreach ( $itemref as $ref2 )				{					if ($curr->parent == $ref2[0]) {						$curr->parent = $ref2[1];						$found = true;						break;					} // if				}				if (!$found && $curr->menutype!=$menu) {					$curr->parent = 0;				}			}			$curr->menutype = $menu;			$curr->ordering = '9999';			$curr->home		= 0;			if ( !$curr->store() ) {				$this->setError($curr->getError());				return false;			}			$curr->reorder( 'menutype = '.$this->_db->Quote($curr->menutype).' AND parent = '.(int) $curr->parent );		} // foreach		//Now, we need to rebuild sublevels...		$this->_rebuildSubLevel();				// clean cache		MenusHelper::cleanCache();				return true;	}	function move($items, $menu)	{		// Add all children to the list		foreach ($items as $id)		{			$this->_addChildren($id, $items);		}		$row =& $this->getTable();		$ordering = 1000000;		$firstroot = 0;		foreach ($items as $id) {			$row->load( $id );			// is it moved together with his parent?			$found = false;			if ($row->parent != 0) {				foreach ($items as $idx)				{					if ($idx == $row->parent) {						$found = true;						break;					} // if				}			}			if (!$found) {				$row->parent = 0;				$row->ordering = $ordering++;				if (!$firstroot) $firstroot = $row->id;			} // if			$row->menutype = $menu;			if ( !$row->store() ) {				$this->setError($row->getError());				return false;			} // if		} // foreach		if ($firstroot) {			$row->load( $firstroot );			$row->reorder( 'menutype = '.$this->_db->Quote($row->menutype).' AND parent = '.(int) $row->parent );		} // if				//Rebuild sublevel		$this->_rebuildSubLevel();				// clean cache		MenusHelper::cleanCache();				return true;	}	function toTrash($items)	{		$db		=& $this->getDBO();		$nd		= $db->getNullDate();		$state	= -2;        $row =& $this->getTable();        $default = 0;		// Add all children to the list		foreach ($items as $id)		{            //Check if it's the default item            $row->load( $id );            if ($row->home != 1) {                $this->_addChildren($id, $items);            } else {                unset($items[$default]);                JError::raiseWarning( 'SOME_ERROR_CODE', JText::_('You cannot trash the default menu item'));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -