/** * Get sorted and grouped values from table column * * @param Zend_Db_Adapter_Abstract $db * @param array $options * @return array */ public static function GetValuesForCol($db, $options) { $arrValues = FALSE; //---------------------- // инициализация параметров $defaults = array('offset' => 0, 'limit' => 0, 'group' => TRUE, 'order' => 'p.ts_created'); foreach ($defaults as $k => $v) { $options[$k] = array_key_exists($k, $options) ? $options[$k] : $v; } $select = self::_GetBaseQuery($db, $options); // set the offset, limit, and ordering of results if ($options['limit'] > 0) { $select->limit($options['limit'], $options['offset']); } // Установим параметры сортировки для таблицы $select = self::GetSelectForSort($select, $options); // Добавим группировку и соответствующую колонку $aliasTable = Default_Model_DatabaseObject::getAliasForTable($select, $options['joinTableForSort']); if ($aliasTable) { $orderData = $select->getPart(Zend_Db_Select::ORDER); if ($options['group']) { $select->group($orderData[0][0]); } // Найдем алиас таблицы, запрашиваемого поля $arrAliasTable = explode('_', $aliasTable); $select->columns(array($arrAliasTable[0] . '.id', $orderData[0][0])); } else { if ($options['group']) { $select->group('p.' . $options['field']); } $select->columns(array('p.id', 'p.' . $options['field'])); } $strSelect = $select->__toString(); //------ Применить кеширование ------- $dbCache = Default_Plugin_SysBox::getCache('db'); if ($dbCache->getOption('caching')) { // Получим TAG для кеширования $arrItems = array($select, $options); $strSerialize = serialize($arrItems); $tagCache = md5($strSerialize); // Очистим кеш if (Default_Plugin_SysBox::isCleanCache()) { $dbCache->clean(Zend_Cache::CLEANING_MODE_ALL); } // Получим данные из кеша по тегу $tagCache $arrValues = $dbCache->load($tagCache); } // проверка, есть ли уже данные в кэше: if ($arrValues === FALSE) { $arrValues = $db->fetchPairs($select); // Если разрешено кеширование, то сохраним данные в кеше if ($dbCache->getOption('caching')) { $dbCache->save($arrValues, $tagCache); } } else { $result = $arrValues; } return $arrValues; }