diff --git a/lib/Doctrine/Pager/Layout.php b/lib/Doctrine/Pager/Layout.php index d54b5151d..1eb6851a4 100644 --- a/lib/Doctrine/Pager/Layout.php +++ b/lib/Doctrine/Pager/Layout.php @@ -409,7 +409,7 @@ class Doctrine_Pager_Layout /** * _parseTemplate * - * Process the template of a given page and return the processed template + * Parse the template of a given page and return the processed template * * @param array Optional parameters to be applied in template and url mask * @return string @@ -426,7 +426,7 @@ class Doctrine_Pager_Layout /** * _parseUrlTemplate * - * Processes the url mask to return the correct template depending of the options sent. + * Parse the url mask to return the correct template depending of the options sent. * Already process the mask replacements assigned. * * @param $options Optional parameters to be applied in template and url mask @@ -453,7 +453,7 @@ class Doctrine_Pager_Layout /** * _parseUrl * - * Process the url mask of a given page and return the processed url + * Parse the mask replacements of a given page * * @param $options Optional parameters to be applied in template and url mask * @return string @@ -476,7 +476,7 @@ class Doctrine_Pager_Layout /** * _parseUrl * - * Process the url mask of a given page and return the processed url + * Parse the url mask of a given page and return the processed url * * @param $options Optional parameters to be applied in template and url mask * @return string @@ -493,12 +493,12 @@ class Doctrine_Pager_Layout return strtr($str, $replacements); } - - + + /** * _parseMaskReplacements * - * Process the mask replacements, changing from to-be replaced mask with new masks/values + * Parse the mask replacements, changing from to-be replaced mask with new masks/values * * @param $str String to have masks replaced * @return string diff --git a/manual/docs/en/utilities/pagination/customizing-pager-layout.txt b/manual/docs/en/utilities/pagination/customizing-pager-layout.txt index 7ddcf31f5..95e71cfa6 100644 --- a/manual/docs/en/utilities/pagination/customizing-pager-layout.txt +++ b/manual/docs/en/utilities/pagination/customizing-pager-layout.txt @@ -19,6 +19,24 @@ $this->cleanMaskReplacements(); // Parses the template and returns the string of a processed page $this->processPage($options = array()); // Needs at least page_number offset in $options array + +// Protected methods, although very useful + +// Parse the template of a given page and return the processed template +$this->_parseTemplate($options = array()); + +// Parse the url mask to return the correct template depending of the options sent +// Already process the mask replacements assigned +$this->_parseUrlTemplate($options = array()); + +// Parse the mask replacements of a given page +$this->_parseReplacementsTemplate($options = array()); + +// Parse the url mask of a given page and return the processed url +$this->_parseUrl($options = array()); + +// Parse the mask replacements, changing from to-be replaced mask with new masks/values +$this->_parseMaskReplacements($str); Now that you have a small tip of useful methods to be used when extending {{Doctrine_Pager_Layout}}, it's time to see our implemented class: @@ -63,4 +81,44 @@ class PagerLayoutWithArrows extends Doctrine_Pager_Layout echo $str; } } + + + +As you may see, I have to manual process the items <<, <, > and >>. I override the **{%page}** mask by setting a raw value to it (raw value is achieved by setting the third parameter as true). Then I define the only MUST HAVE information to process the page and call it. The return is the template processed as a string. I do it to any of my custom buttons. + +Now supposing a totally different situation. Doctrine is framework agnostic, but many of our users use it together with Symfony. {{Doctrine_Pager}} and subclasses are 100% compatible with Symfony, but {{Doctrine_Pager_Layout}} needs some tweaks to get it working with Symfony's {{link_to}} helper function. To allow this usage with {{Doctrine_Pager_Layout}}, you have to extend it and add your custom processor over it. For example purpose (it works in Symfony), I used **{link_to}...{/link_to}** as a template processor to do this job. Here is the extended class and usage in Symfony: + + +// CLASS: + +class sfDoctrinePagerLayout extends Doctrine_Pager_Layout +{ + public function __construct($pager, $pagerRange, $urlMask) + { + sfLoader::loadHelpers(array('Url', 'Tag')); + parent::__construct($pager, $pagerRange, $urlMask); + } + + + protected function _parseTemplate($options = array()) + { + $str = parent::_parseTemplate($options); + + return preg_replace( + '/\{link_to\}(.*?)\{\/link_to\}/', link_to('$1', $this->_parseUrl($options)), $str + ); + } +} + + + +// USAGE: + +$pager_layout = new sfDoctrinePagerLayout( + $pager, + new Doctrine_Pager_Range_Sliding(array('chunk' => 5)), + '@hostHistoryList?page={%page_number}' +); + +$pager_layout->setTemplate('[{link_to}{%page}{/link_to}]'); \ No newline at end of file