芝麻web文件管理V1.00
编辑当前文件:/home/asmplong/www/ancien-site-2019/site/administrator/components/com_menus/models/menus.php
getStoreId('getItems'); // Try to load the data from internal storage. if (!empty($this->cache[$store])) { return $this->cache[$store]; } // Load the list items. $items = parent::getItems(); // If emtpy or an error, just return. if (empty($items)) { return array(); } // Getting the following metric by joins is WAY TOO SLOW. // Faster to do three queries for very large menu trees. // Get the menu types of menus in the list. $db = $this->getDbo(); $menuTypes = JArrayHelper::getColumn($items, 'menutype'); // Quote the strings. $menuTypes = implode( ',', array_map(array($db, 'quote'), $menuTypes) ); // Get the published menu counts. $query = $db->getQuery(true) ->select('m.menutype, COUNT(DISTINCT m.id) AS count_published') ->from('#__menu AS m') ->where('m.published = 1') ->where('m.menutype IN ('.$menuTypes.')') ->group('m.menutype') ; $db->setQuery($query); $countPublished = $db->loadAssocList('menutype', 'count_published'); if ($db->getErrorNum()) { $this->setError($db->getErrorMsg()); return false; } // Get the unpublished menu counts. $query->clear('where') ->where('m.published = 0') ->where('m.menutype IN ('.$menuTypes.')') ; $db->setQuery($query); $countUnpublished = $db->loadAssocList('menutype', 'count_published'); if ($db->getErrorNum()) { $this->setError($db->getErrorMsg()); return false; } // Get the trashed menu counts. $query->clear('where') ->where('m.published = -2') ->where('m.menutype IN ('.$menuTypes.')') ; $db->setQuery($query); $countTrashed = $db->loadAssocList('menutype', 'count_published'); if ($db->getErrorNum()) { $this->setError($db->getErrorMsg()); return false; } // Inject the values back into the array. foreach ($items as $item) { $item->count_published = isset($countPublished[$item->menutype]) ? $countPublished[$item->menutype] : 0; $item->count_unpublished = isset($countUnpublished[$item->menutype]) ? $countUnpublished[$item->menutype] : 0; $item->count_trashed = isset($countTrashed[$item->menutype]) ? $countTrashed[$item->menutype] : 0; } // Add the items to the internal cache. $this->cache[$store] = $items; return $this->cache[$store]; } /** * Method to build an SQL query to load the list data. * * @return string An SQL query */ protected function getListQuery() { // Create a new query object. $db = $this->getDbo(); $query = $db->getQuery(true); // Select all fields from the table. $query->select($this->getState('list.select', 'a.*')); $query->from('`#__menu_types` AS a'); $query->group('a.id'); // Add the list ordering clause. $query->order($db->getEscaped($this->getState('list.ordering', 'a.id')).' '.$db->getEscaped($this->getState('list.direction', 'ASC'))); //echo nl2br(str_replace('#__','jos_',(string)$query)).'
'; return $query; } /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @since 1.6 */ protected function populateState($ordering = null, $direction = null) { // Initialise variables. $app = JFactory::getApplication('administrator'); // List state information. parent::populateState('a.id', 'asc'); } /** * Gets a list of all mod_mainmenu modules and collates them by menutype * * @return array */ function &getModules() { $model = JModel::getInstance('Menu', 'MenusModel', array('ignore_request' => true)); $result = &$model->getModules(); return $result; } }