Ярлыки

.htaccess (4) тестирование (8) шаблоны проектирования (3) css (5) Debian (6) docker (2) Doctrine2 (6) Git (6) html (4) java (6) javascript (13) jquery (11) LFS (3) linux (23) mac os (4) mod_rewrite (2) MSSQL (4) MySQL (18) ORM Doctrine (17) patterns (3) PDO (3) perl (7) PHP (64) PHPUnit (8) Python (15) SEO (2) Silex (1) SimpleXML (1) SQL (14) ssh (4) Ubuntu (24) Yii1 (1) Zend Framework (19) ZendFramework2 (8)

воскресенье, 31 января 2010 г.

Из руководства Doctrine 1.1 вольный перевод. Пейджинг (начало).

Пейджинг.

Введение.

В реальных web-приложениях, отображать содержимое таблиц базы данных является одной из самых распространенных задач. Кроме того, представьте себе, что это содержание результатов поиска, содержащее тысячи позиций. К сожалению, возможно это будет огромный список, значительное потребление памяти и может вызвать дискомфорт у пользователя. Именно в таких ситуация нам и необходим постраничный вывод (pagination, pager, пейджер).

В ORM Doctrine присутствует очень гибкая реализация пейджинга, которая позволяет Вам не только организовать постраничных вывод данных, но и контролировать расположение виджета пейджера на web-странице. В этой главе мы узнаем, как создавать объекты пейджера, стили управления постраничным выводом и в конце, обзор объекта шаблона постраничного вывода (pager layout object) — мощного средства ORM Doctrine для отображения ссылок на страницы с вашими данными.

Работа с пейджером.

Постраничные запросы так же просты как и обычные. За постраничный вывод отвечает объект Doctrine_Pager. Это иллюстрирует пример кода ниже:


// Defining initial variables
$currentPage = 1; // текущая страница
$resultsPerPage = 50; // количество записей, выводимых на страницу

// Creating pager object
$pager = new Doctrine_Pager(
Doctrine_Query::create()
->from( 'User u' )
->leftJoin( 'u.Group g' )
->orderby( 'u.username ASC' ),
$currentPage, // Current page of request
$resultsPerPage // (Optional) Number of results per page. Default is 25
);


Здесь у вас есть источник в виде объекта класса Doctrine_Query. Единственным отличием является то, что теперь у вас есть 2 новых аргумента. Ваш старый объект запроса к базе данных плюс эти 2 аргумента передаются в коструктор объекта Doctrine_Pager. На данном этапе, Doctrine_Pager определяет основные данные, необходимые для контроля нумерации данных для вывода. Если вы хотите знать, что на самом деле делает пейджер, для начала надо проверить был ли он выполнен:

$pager->getExecuted();


Если вы пытаетесь получить доступ к любым из методов, предусмотренных по Doctrine_Pager сейчас, вы получите исключение Doctrine_Pager_Exception сообщающее вам, что пейджер еще не был выполнен. После выполнении Doctrine_Pager предлагаем Вам эффективные методы для получения информации. Использование API, перечислены в конце этой темы.

Метод выполнения Doctrine_Pager очень похож на подобный метод класса Doctrine_Query. Он также позволяет передавать аргументы, как вы обычно это делаете. Ниже приведен синтаксис PHP, включая синтаксис передачи дополнительных параметров:


$items = $pager->execute([$args = array() [, $fetchType = null]]);

foreach ($items as $item) {
// ...
}


Существуют некоторые особые случаи, когда запрос возващающий записи отличается от запроса подсчета. Чтобы разрешить эту ситуацию, Doctrine_Pager имеет некоторые методы, которые позволяют рассчитать, а затем выполнить. Первое, что вам нужно сделать, это определить запрос-счетчик:


$pager->setCountQuery($query [, $params = null]);

// ...

$rs = $pager->execute();


Первый параметр в setCountQuery может быть действительным объектом Doctrine_Query или строкой DQL. Вторым аргументом можно указать дополнительные параметры, которые могут быть отправлены в запросе-счетчике. Если вы не определите параметры сразу, то сможете определить в любой момент , вызвав setCountQueryParams:

$pager->setCountQueryParams([$params = array() [, $append = false]]);


Этот метод принимает 2 параметра. Первый параметр будут направлены в запрос-счетчик, а второй параметр, если $params должен быть добавлен к списку, или если он должен переопределить список параметров, количество запросов. Поведение по умолчанию - переопределить список. И последнее, что касается запроса-счетчика, если вы не определяете никаких параметров для него, то будут отправлены параметры, которые определяются в вызове $pager->execute ().

Запрос-счетчик всегда доступен. Если вы не определили его и вызывали $pager-> getCountQuery (), будет возвращен "fetcher" query.

Если вам нужно получить доступ к другой функции, которые Doctrine_Pager предоставляет, вы можете получить к ним доступ через API:


// Returns the check if Pager was already executed
// проверка выполнения пейджера
$pager->getExecuted();

// Return the total number of itens found on query search
// возвращает количество записей найденных по запросу
$pager->getNumResults();

// Return the first page (always 1)
// возвращает первую страницу
$pager->getFirstPage();

// Return the total number of pages
// возвращает общее количество страниц
$pager->getLastPage();

// Return the current page
// возвращает текущую страницу
$pager->getPage();





// Defines a new current page (need to call execute again to adjust offsets and values)
// переопределяет текущую страницу
$pager->setPage($page);

// Return the next page
// возвращает следующую страницу
$pager->getNextPage();

// Return the previous page
// возвращает предыдущую страницу
$pager->getPreviousPage();

// Return the first indice of current page
$pager->getFirstIndice();

// Return the last indice of current page
$pager->getLastIndice();

// Return true if it's necessary to paginate or false if not
// возвращает true если надо делать постраничный вывод
$pager->haveToPaginate();

// Return the maximum number of records per page
// максимальное количество записей на страницу
$pager->getMaxPerPage();

// Defined a new maximum number of records per page (need to call execute again to adjust offset and values)
// определяет новое максимальное количество записей на страницу
$pager->setMaxPerPage($maxPerPage);

// Returns the number of itens in current page
// количество записей на текущей странице
$pager->getResultsInPage();

// Returns the Doctrine_Query object that is used to make the count results to pager
// возвращает объект Doctrine_Query, который используется для запроса подсчета результатов для пейджера
$pager->getCountQuery();

// Defines the counter query to be used by pager
// определяет запрос-счетчик
$pager->setCountQuery($query, $params = null);

// Returns the params to be used by counter Doctrine_Query (return $defaultParams if no param is defined)
$pager->getCountQueryParams($defaultParams = array());

// Defines the params to be used by counter Doctrine_Query
$pager->setCountQueryParams($params = array(), $append = false);

// Return the Doctrine_Query object
$pager->getQuery();

// Return an associated Doctrine_Pager_Range_* instance
$pager->getRange($rangeStyle, $options = array());

Комментариев нет:

Отправить комментарий