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

📄 menutype.php

📁 Joomla!是一套获得过多个奖项的内容管理系统(Content Management System, CMS)。Joomla!采用PHP+MySQL数据库开发
💻 PHP
字号:
<?php/** * @version		$Id: menutype.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 MenusModelMenutype extends JModel{	var $_modelName = 'menutype';	/** @var object JTable object */	var $_table = null;	/**	 * Returns the internal table object	 * @return JTable	 */	function &getTable()	{		if ($this->_table == null) {			$this->_table = & JTable::getInstance('menuTypes');			if ($id = JRequest::getVar('id', false, '', 'int')) {				$this->_table->load($id);			}		}		return $this->_table;	}	/**	 * Get a list of the menu records associated with the type	 *	 * @param string The menu type	 * @return array An array of records as objects	 */	function getMenus()	{		global $mainframe;		$menus= array();		$db = &$this->getDBO();		// Preselect some aggregate data		// Query to get published menu item counts		$query = 'SELECT a.menutype, COUNT( a.menutype ) AS num' .				' FROM #__menu AS a' .				' WHERE a.published = 1' .				' GROUP BY a.menutype';		$db->setQuery( $query );		$published = $db->loadObjectList( 'menutype' );		// Query to get unpublished menu item counts		$query = 'SELECT a.menutype, COUNT( a.menutype ) AS num' .				' FROM #__menu AS a' .				' WHERE a.published = 0' .				' GROUP BY a.menutype';		$db->setQuery( $query );		$unpublished = $db->loadObjectList( 'menutype' );		// Query to get trash menu item counts		$query = 'SELECT a.menutype, COUNT( a.menutype ) AS num' .				' FROM #__menu AS a' .				' WHERE a.published = -2' .				' GROUP BY a.menutype';		$db->setQuery( $query );		$trash = $db->loadObjectList( 'menutype' );		$limit		= $mainframe->getUserStateFromRequest( 'global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int' );		$limitstart = $mainframe->getUserStateFromRequest( 'com_menus.limitstart', 'limitstart', 0, 'int' );		$query = 'SELECT a.*, SUM(b.home) AS home' .				' FROM #__menu_types AS a' .				' LEFT JOIN #__menu AS b ON b.menutype = a.menutype' .				' GROUP BY a.id';		$db->setQuery( $query, $limitstart, $limit );		$menuTypes	= $db->loadObjectList();		$total		= count( $menuTypes );		$i			= 0;		for ($i = 0;  $i < $total; $i++) {			$row = &$menuTypes[$i];			// query to get number of modules for menutype			$query = 'SELECT count( id )' .					' FROM #__modules' .					' WHERE module = "mod_mainmenu"' .					' AND params LIKE '.$db->Quote('%menutype='.$row->menutype.'%');			$db->setQuery( $query );			$modules = $db->loadResult();			if ( !$modules ) {				$modules = '-';			}			$row->modules		= $modules;			$row->published		= @$published[$row->menutype]->num ? $published[$row->menutype]->num : '-' ;			$row->unpublished	= @$unpublished[$row->menutype]->num ? $unpublished[$row->menutype]->num : '-';			$row->trash			= @$trash[$row->menutype]->num ? $trash[$row->menutype]->num : '-';			$menus[] = $row;		}		return $menus;	}	/**	 * Get a list of the menu records associated with the type	 *	 * @param string The menu type	 * @return array An array of records as objects	 */	function getPagination()	{		global $mainframe;		$menutypes 	= MenusHelper::getMenuTypeList();		$total		= count( $menutypes );		$limit		= $mainframe->getUserStateFromRequest( 'global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int' );		$limitstart = $mainframe->getUserStateFromRequest( 'com_menus.limitstart', 'limitstart', 0, 'int' );		jimport('joomla.html.pagination');		$pagination = new JPagination( $total, $limitstart, $limit );		return $pagination;	}	/**	 * Get a list of the menu records associated with the type	 * @param string The menu type	 * @return array An array of records as objects	 */	function getMenuItems()	{		$table = & $this->getTable();		if ($table->menutype == '') {			$table->menutype = JRequest::getString('menutype');		}		$db = &$this->getDBO();		$query = 'SELECT a.name, a.id' .				' FROM #__menu AS a' .				' WHERE a.menutype = ' . $db->Quote( $table->menutype ) .				' ORDER BY a.name';		$db->setQuery( $query );		$result = $db->loadObjectList();		return $result;	}	/**	 * Get a list of the menu records associated with the type	 * @param string The menu type	 * @return array An array of records as objects	 */	function getModules( $type='' )	{		if ($type == '') {			$type = $this->_table->menutype;		}		$db = &$this->getDBO();		$query = 'SELECT id, title, params' .				' FROM #__modules' .				' WHERE module = "mod_mainmenu"' .				' AND params LIKE ' . $db->Quote( '%menutype=' . $type . '%' );		$db->setQuery( $query );		$temp = $db->loadObjectList();		$result = array();		$n = count( $temp );		for ($i = 0; $i < $n; $i++)		{			$params = new JParameter( $temp[$i]->params );			if ($params->get( 'menutype' ) == $type) {				 $result[] = $temp[$i];			}		}		return $result;	}	/**	 * Checks if the menu can be deleted	 * @param string The menu type	 * @return boolean	 */	function canDelete( $type='' )	{		if ($type == '') {			$type = $this->_table->menutype;		}		if ($type == 'mainmenu') {			$this->setError( JText::_( 'WARNDELMAINMENU' ) );			return false;		}		return true;	}	/**	 * Deletes menu type and associations	 * @param string The id of the menu type	 * @return boolean	 */	function delete( $id = 0 )	{		$table = &$this->getTable();		if ($id != 0) {			$table->load( $id );		}		$db = &$this->getDBO();		// Delete Associations		if (!$this->deleteByType( $table->menutype )) {			$this->setError( $this->getError() );			return false;		}		// TODO: Should invoke JModuleModel::delete to delete the actual module		$moduleTable= &JTable::getInstance( 'module');		$items		= &$this->getModules( $table->menutype );		$modulesIds	= array();		foreach ($items as $item)		{			if (!$moduleTable->delete( $item->id )) {				$this->setError( $moduleTable->getErrorMsg() );				return false;			}			$modulesIds[] = (int) $item->id;		}		if (count( $modulesIds )) {			$query = 'DELETE FROM #__modules_menu' .					' WHERE menuid = '.implode( ' OR moduleid = ', $modulesIds );			$db->setQuery( $query );			if (!$db->query()) {				$this->setError( $menuTable->getErrorMsg() );				return false;			}		}		$result = $table->delete();		return $result;	}	/**	 * Delete menu items by type	 */	function deleteByType( $type = '' )	{		if (!$type) {			return false;		}		$db = &$this->getDBO();		$query = 'DELETE FROM #__menu' .				' WHERE menutype = '.$db->Quote( $type );		$db->setQuery( $query );		if (!$db->query()) {			$this->setError( $menuTable->getErrorMsg() );			return false;		}				// clean cache		MenusHelper::cleanCache();						return true;	}}

⌨️ 快捷键说明

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