aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/pagination.php
diff options
context:
space:
mode:
authorrxu <rxu@mail.ru>2014-09-13 13:02:50 +0800
committerrxu <rxu@mail.ru>2014-10-01 20:55:07 +0800
commitce4035fdd35545638e3bdbeea8f50f5f1de0c943 (patch)
tree4378927791c78a2ff1366b5a874e6d2d667d1982 /phpBB/phpbb/pagination.php
parent84e68b3a73183322e970df39b7bd9d1afd37be8a (diff)
downloadforums-ce4035fdd35545638e3bdbeea8f50f5f1de0c943.tar
forums-ce4035fdd35545638e3bdbeea8f50f5f1de0c943.tar.gz
forums-ce4035fdd35545638e3bdbeea8f50f5f1de0c943.tar.bz2
forums-ce4035fdd35545638e3bdbeea8f50f5f1de0c943.tar.xz
forums-ce4035fdd35545638e3bdbeea8f50f5f1de0c943.zip
[ticket/13059] Add core event to generate_page_link()
Add core event to generate_page_link() to allow overriding/modifying pagination URLs. Event request: http://area51.phpbb.com/phpBB/viewtopic.php?f=111&t=45905 PHPBB3-13059
Diffstat (limited to 'phpBB/phpbb/pagination.php')
-rw-r--r--phpBB/phpbb/pagination.php46
1 files changed, 42 insertions, 4 deletions
diff --git a/phpBB/phpbb/pagination.php b/phpBB/phpbb/pagination.php
index 8aba41d651..7a81c25ad2 100644
--- a/phpBB/phpbb/pagination.php
+++ b/phpBB/phpbb/pagination.php
@@ -21,18 +21,26 @@ class pagination
/** @var \phpbb\user */
protected $user;
+ /** @var \phpbb\controller\helper */
+ protected $helper;
+
+ /** @var \phpbb\event\dispatcher_interface */
+ protected $phpbb_dispatcher;
+
/**
* Constructor
*
- * @param \phpbb\template\template $template
- * @param \phpbb\user $user
- * @param \phpbb\controller\helper $helper
+ * @param \phpbb\template\template $template
+ * @param \phpbb\user $user
+ * @param \phpbb\controller\helper $helper
+ * @param \phpbb\event\dispatcher_interface $phpbb_dispatcher
*/
- public function __construct(\phpbb\template\template $template, \phpbb\user $user, \phpbb\controller\helper $helper)
+ public function __construct(\phpbb\template\template $template, \phpbb\user $user, \phpbb\controller\helper $helper, \phpbb\event\dispatcher_interface $phpbb_dispatcher)
{
$this->template = $template;
$this->user = $user;
$this->helper = $helper;
+ $this->phpbb_dispatcher = $phpbb_dispatcher;
}
/**
@@ -50,6 +58,36 @@ class pagination
*/
protected function generate_page_link($base_url, $on_page, $start_name, $per_page)
{
+ // A listener can set this variable to the new pagination URL
+ // to override the generate_page_link() function generated value
+ $generate_page_link_override = false;
+
+ /**
+ * Execute code and/or override generate_page_link()
+ *
+ * To override the generate_page_link() function generated value
+ * set $generate_page_link_override to the new URL value
+ *
+ * @event core.pagination_generate_page_link
+ * @var string base_url is url prepended to all links generated within the function
+ * If you use page numbers inside your controller route, base_url should contains a placeholder (%d)
+ * for the page. Also be sure to specify the pagination path information into the start_name argument
+ * @var string on_page is the page for which we want to generate the link
+ * @var string start_name is the name of the parameter containing the first item of the given page (example: start=20)
+ * If you use page numbers inside your controller route, start name should be the string
+ * that should be removed for the first page (example: /page/%d)
+ * @var int per_page the number of items, posts, etc. to display per page, used to determine the number of pages to produce
+ * @var bool|string generate_page_link_override Shall we return custom pagination link (string URL) or not (false)
+ * @since 3.1.0-RC5
+ */
+ $vars = array('base_url', 'on_page', 'start_name', 'per_page', 'generate_page_link_override');
+ extract($this->phpbb_dispatcher->trigger_event('core.pagination_generate_page_link', compact($vars)));
+
+ if ($generate_page_link_override)
+ {
+ return $generate_page_link_override;
+ }
+
if (!is_string($base_url))
{
if (is_array($base_url['routes']))