Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Универсальная пагинация для моделей 
:(
    Опции темы
BobiKK
Дата 26.7.2010, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 655
Регистрация: 1.12.2005
Где: Essen, Deutschlan d

Репутация: 4
Всего: 16



Господа, помогите с решением. Возникла потребность создания универсального метода для пагинации моделей.
В общем и целом, практически все модели в системе выглядят следующим образом:
Код

// модель
class Central_Model_User extends Central_Model_CachingModelAbstract
{
// статический метод, возвращающий массив объекто Central_Model_User
public static function usersOffIll($date = null) 
{
               // Грубо говоря метод делает следующее: генерируется sql запрос, выполняется.
        $sql = "sql запрос";
        $usersOfIll = $db->execute($sql);
        while ($currentUser = $usersOfIll->fetch()) { // итерируемся по result set
                $user = Central_Model_User::user($currentUser['userId']); // == Central_Model_User::__construct() с логикой для кеширования и прочего
                $results[] = array( // возвращаем массив из объектов и дополнительных данных 
                    'startDate' => new Zend_Date($currentUser['startDate'], Zend_Date::ISO_8601), 
                    'endDate' => new Zend_Date($currentUser['endDate'], Zend_Date::ISO_8601),
                    'user' => $user);
            }
        return $results;        
}

public static function usersOnHoliday($date = null) { // похожий метод... }
public static function usersOnMeetings($dat = null) { // и ещё с десяток таких методов }


Хочется иметь простой (в использовании) способ, чтобы осуществить пагинацию по возвращаемым массивам. 
Стандартный способ использования Zend_Paginator не подходит:
Адаптеры под него должны иметь напрямую доступ к SQL запросу, чтобы вычислить количество записей и добавить всякие LIMIT и OFFSET. У меня же запрос выполняет модель (как это наверное и должно быть). Возвращать же уже готовый объект Zend_Paginator в этих статисечких методах тоже не хорошо: Zend_Paginator относится больше к view-controller части, чем к доменной логике. Имплементировать Zend_Paginator_Adapter_Interface в модели тоже не подходит: пагинация должна быть по массиву этих объектов, а не по каким-нибудь данным объекта.

В общем, я в смятении.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0693 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.