Ярлыки

.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 г.

Пейджинг с ORM Doctrine (практика).

В предыдущих публикациях была теория, ну а теперь немного практики, вот фрагмент кода:

$current_page = intval($args[2]);
$results_per_page = 5;

$pager_layout = new PagerLayoutWithArrows (
new Doctrine_Pager (
Doctrine_Query :: create ()
->from ( "Message m" )
->orderBy ( "id DESC" ),
$current_page ,
$results_per_page
),
new Doctrine_Pager_Range_Sliding (
array ( "chunk" => 5 )),
"тут ваш адрес/{%page_number}"
);

$pager_layout ->setTemplate ('<a href="{%url}" class="pager">{%page}</a>');
$pager_layout ->setSelectedTemplate ('<b class="pager">{%page}</b>');
$pager = $pager_layout ->getPager ();
$messages = $pager->execute()->getData();

$this->registry->template->messages = $messages;
$this->registry->template->pager = $pager_layout ->display('',true);
$this->registry->template->show('тут название шаблона');


Ну а вот наш класс-наследник PagerLayoutWithArrows, для удобства мы переопределим класс Doctrine_Pager_Layout, чтобы у нас выводилась более продвинутая навигация:

class PagerLayoutWithArrows extends Doctrine_Pager_Layout {
public function display($options = array(), $return = false) {
$pager = $this->getPager();
$str = '';

// First page
$this->addMaskReplacement('page', '«', true);
$options['page_number'] = $pager->getFirstPage();
$str .= $this->processPage($options);

// Previous page
$this->addMaskReplacement('page', '‹', true);
$options['page_number'] = $pager->getPreviousPage();
$str .= $this->processPage($options);

// Pages listing
$this->removeMaskReplacement('page');
$str .= parent::display($options, true);

// Next page
$this->addMaskReplacement('page', '›', true);
$options['page_number'] = $pager->getNextPage();
$str .= $this->processPage($options);

// Last page
$this->addMaskReplacement('page', '»', true);
$options['page_number'] = $pager->getLastPage();
$str .= $this->processPage($options);

// Possible wish to return value instead of print it on screen
if ($return) {
return $str;
}

echo $str;
}
}

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

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