Beispiel #1
0
 /**
  * Get the array of records satisfying the criteria specified in the parameter $options
  * 
  * @param Zend_Db_Adapter_Abstract $db
  * @param array $options
  * @return array массив обьектов типа - Default_Model_DbTable_BlogInfo 
  */
 public static function GetInfos($db, $options = array())
 {
     $infos = FALSE;
     //------------------
     // инициализация опций
     $defaults = array('offset' => 0, 'limit' => 0, 'order' => 'i.title_info', 'sort' => true);
     foreach ($defaults as $k => $v) {
         $options[$k] = array_key_exists($k, $options) ? $options[$k] : $v;
     }
     $select = self::_GetBaseQuery($db, $options);
     $strSelect = $select->__toString();
     // установим поля таблицы для запроса
     $select->from(null, 'i.*');
     // set the offset, limit, and ordering of results
     if ($options['limit'] > 0) {
         $select->limit($options['limit'], $options['offset']);
     }
     // Установим параметры сортировки для таблицы
     if ($options['sort']) {
         $select = self::GetSelectForSort($select, $options);
     }
     //------ Применить кеширование -------
     $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
         $infos = $dbCache->load($tagCache);
     }
     // проверка, есть ли уже данные в кэше:
     if ($infos === FALSE) {
         // получим результат запроса к базе данных
         $data = $db->fetchAll($select);
         // получим данные в виде массива обьектов Default_Model_DbTable_BlogInfo
         $infos = self::BuildMultiple($db, __CLASS__, $data);
         $info_ids = array_keys($infos);
         if (count($info_ids) == 0) {
             return array();
         }
         // получим данные о загруженных сообщениях
         $profiles = Default_Model_Profile::BuildMultiple($db, 'Default_Model_DbTable_BlogInfoProfile', array($info_ids));
         foreach ($infos as $info_id => $info) {
             if (array_key_exists($info_id, $profiles) && $profiles[$info_id] instanceof Default_Model_DbTable_BlogInfoProfile) {
                 $infos[$info_id]->profile = $profiles[$info_id];
             } else {
                 $infos[$info_id]->profile->setInfoId($info_id);
             }
             //!!!!------ Начало установки признака сортировки -----!!!!!
             if ($options['sortColumn']) {
                 $infos[$info_id]->sortColumn = $options['sortColumn'];
             }
             if ($options['ascDescFlg']) {
                 $infos[$info_id]->ascDescFlg = $options['ascDescFlg'];
             }
             //!!!!------ Конец установки признака сортировки -----!!!!!
         }
         // Если разрешено кеширование, то сохраним данные в кеше
         if ($dbCache->getOption('caching')) {
             $dbCache->save($infos, $tagCache);
         }
     } else {
         $result = $infos;
     }
     return $infos;
 }
Beispiel #2
0
 /**
  * Get the array of records satisfying the criteria specified in the parameter $options using Zend_Paginator
  * 
  * @param Zend_Db_Adapter_Abstract $db
  * @param array $options
  * @return array  Default_Model_DbTable_BlogPost objects
  */
 public static function GetPaginatorPosts($db, $options = array())
 {
     $arrResult = array();
     $_config = Zend_Registry::get('config');
     $itemCountPerPage = (int) $_config['paginator']['itemCountPerPage'];
     $pagesInRange = (int) $_config['paginator']['pagesInRange'];
     //---------------------------------------------------------
     // инициализация опций
     $defaults = array('itemCountPerPage' => $itemCountPerPage, 'pagesInRange' => $pagesInRange, 'page' => 1, 'offset' => 0, 'limit' => 0, 'order' => 'p.ts_created', 'sort' => true);
     foreach ($defaults as $k => $v) {
         $options[$k] = array_key_exists($k, $options) ? $options[$k] : $v;
     }
     $select = self::_GetBaseQuery($db, $options);
     // установим поля таблицы для запроса
     $select->from(null, 'p.*');
     // set the offset, limit, and ordering of results
     if ($options['limit'] > 0) {
         $select->limit($options['limit'], $options['offset']);
     }
     // Установим параметры сортировки для таблицы
     if ($options['sort']) {
         $select = self::GetSelectForSort($select, $options);
     }
     //------ Создадим обьект Zend_Paginator ---------
     $strSelect = $select->__toString();
     $adapter = new Zend_Paginator_Adapter_DbSelect($select);
     $count = self::GetPostsCount($db, $options);
     $adapter->setRowCount($count);
     $paginator = new Zend_Paginator($adapter);
     // Установим максимальное количество отображаемых на странице элементов
     $paginator->setItemCountPerPage($options['itemCountPerPage']);
     // Установи массив страниц, возвращенный текущим стилем прокрутки
     $paginator->setPageRange($options['pagesInRange']);
     // Установим текущую страницу
     $paginator->setCurrentPageNumber($options['page']);
     //----- Конфигурирование кеша для Paginator -----
     $pgCache = Default_Plugin_SysBox::getCache('paginator');
     if ($pgCache->getOption('caching')) {
         // Установим кеш для Paginator
         Zend_Paginator::setCache($pgCache);
         // Очищение кеша
         if (Default_Plugin_SysBox::isCleanCache()) {
             $paginator->clearPageItemCache();
         }
     }
     // получим данные в виде массива обьектов Default_Model_DbTable_BlogPost
     $posts = self::BuildMultiple($db, __CLASS__, $paginator);
     $post_ids = array_keys($posts);
     if (count($post_ids) == 0) {
         return array();
     }
     // получим данные о загруженных сообщениях
     $profiles = Default_Model_Profile::BuildMultiple($db, 'Default_Model_DbTable_BlogPostProfile', array($post_ids));
     foreach ($posts as $post_id => $post) {
         if (array_key_exists($post_id, $profiles) && $profiles[$post_id] instanceof Default_Model_DbTable_BlogPostProfile) {
             $posts[$post_id]->profile = $profiles[$post_id];
         } else {
             $posts[$post_id]->profile->setPostId($post_id);
         }
         //!!!!------ Начало установки признака сортировки -----!!!!!
         if (isset($options['sortColumn'])) {
             $posts[$post_id]->sortColumn = $options['sortColumn'];
         }
         if (isset($options['ascDescFlg'])) {
             $posts[$post_id]->ascDescFlg = $options['ascDescFlg'];
         }
         //!!!!------ Конец установки признака сортировки -----!!!!!
     }
     // load the images for each post
     $options = array('post_id' => $post_ids);
     $images = Default_Model_DbTable_BlogPostImage::GetImages($db, $options);
     foreach ($images as $image) {
         $posts[$image->post_id]->images[$image->getId()] = $image;
     }
     // load the locations for each post
     $locations = Default_Model_DbTable_BlogPostLocation::GetLocations($db, $options);
     foreach ($locations as $l) {
         $posts[$l->post_id]->locations[$l->getId()] = $l;
     }
     // load the audio for each post
     $audios = Default_Model_DbTable_BlogPostAudio::GetAudio($db, $options);
     foreach ($audios as $audio) {
         $posts[$audio->post_id]->audio[$audio->getId()] = $audio;
     }
     // load the video for each post
     $videos = Default_Model_DbTable_BlogPostVideo::GetVideo($db, $options);
     foreach ($videos as $video) {
         $posts[$video->post_id]->video[$video->getId()] = $video;
     }
     // load the comments for each post
     $comments = Default_Model_DbTable_BlogPostComment::GetComments($db, $options);
     foreach ($comments as $comment) {
         $posts[$comment->post_id]->comments[$comment->getId()] = $comment;
     }
     $arrResult['pages'] = $paginator->getPages();
     $arrResult['items'] = $posts;
     return $arrResult;
 }
Beispiel #3
0
 /**
  * Get the array objects of users satisfying the criteria specified in the parameter $options
  * 
  * @param Zend_Db_Adapter_Abstract $db
  * @param array $options
  * @return array массив обьектов типа - Default_Model_DbTable_User 
  */
 public static function GetUsers($db, $options = array())
 {
     $users = FALSE;
     //----------------------
     // initialize the options
     $defaults = array('offset' => 0, 'limit' => 0, 'order' => 'u.username');
     foreach ($defaults as $k => $v) {
         $options[$k] = array_key_exists($k, $options) ? $options[$k] : $v;
     }
     $select = self::_GetBaseQuery($db, $options);
     // set the fields to select
     $select->from(null, 'u.*');
     // set the offset, limit, and ordering of results
     if ($options['limit'] > 0) {
         $select->limit($options['limit'], $options['offset']);
     }
     // Установим параметры сортировки для таблицы
     $select = self::GetSelectForSort($select, $options);
     $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
         $users = $dbCache->load($tagCache);
     }
     // проверка, есть ли уже данные в кэше:
     if ($users === FALSE) {
         // fetch user data from database
         $data = $db->fetchAll($select);
         // turn data into array of DatabaseObject_User objects
         $users = parent::BuildMultiple($db, __CLASS__, $data);
         if (count($users) == 0) {
             return $users;
         }
         $user_ids = array_keys($users);
         // load the profile data for loaded posts
         $profiles = Default_Model_Profile::BuildMultiple($db, 'Default_Model_DbTable_UserProfile', array($user_ids));
         foreach ($users as $user_id => $user) {
             if (array_key_exists($user_id, $profiles) && $profiles[$user_id] instanceof Default_Model_DbTable_UserProfile) {
                 $users[$user_id]->profile = $profiles[$user_id];
             } else {
                 $users[$user_id]->profile->setUserId($user_id);
             }
             //!!!!------ Начало установки признака сортировки -----!!!!!
             if (isset($options['sortColumn'])) {
                 $users[$user_id]->sortColumn = $options['sortColumn'];
             }
             if (isset($options['ascDescFlg'])) {
                 $users[$user_id]->ascDescFlg = $options['ascDescFlg'];
             }
             //!!!!------ Начало установки признака сортировки -----!!!!!
         }
         // Если разрешено кеширование, то сохраним данные в кеше
         if ($dbCache->getOption('caching')) {
             $dbCache->save($users, $tagCache);
         }
     } else {
         $result = $users;
     }
     return $users;
 }