From c941e5b98d6823cb0144d6e929801645093f6364 Mon Sep 17 00:00:00 2001 From: Cameron Date: Tue, 6 Jul 2021 17:53:55 -0700 Subject: [PATCH] Issue #4024 - Pagination url option added to News preferences. Select between 'record' (legacy format eg. page=20, page=40 etc) or 'page' numbers (page=1, page=2 etc). Experimental - requires more testing. --- e107_admin/newspost.php | 11 +++++++++++ e107_core/shortcodes/batch/news_shortcodes.php | 15 ++++++++++++++- e107_core/xml/default_install.xml | 1 + e107_languages/English/admin/lan_admin.php | 1 + e107_languages/English/admin/lan_newspost.php | 1 + e107_plugins/news/news.php | 10 +++++++++- 6 files changed, 37 insertions(+), 2 deletions(-) diff --git a/e107_admin/newspost.php b/e107_admin/newspost.php index 8c7265d50..6f1155e4a 100644 --- a/e107_admin/newspost.php +++ b/e107_admin/newspost.php @@ -955,6 +955,7 @@ class news_admin_ui extends e_admin_ui $temp['news_newdateheader'] = intval($_POST['news_newdateheader']); $temp['news_unstemplate'] = intval($_POST['news_unstemplate']); $temp['news_editauthor'] = intval($_POST['news_editauthor']); + $temp['news_pagination'] = filter_var($_POST['news_pagination']); $temp['news_default_template'] = preg_replace('#[^\w\pL\-]#u', '', $_POST['news_default_template']); $temp['news_list_limit'] = intval($_POST['news_list_limit']); @@ -1054,6 +1055,16 @@ class news_admin_ui extends e_admin_ui "; + $paginationOpts = ['record'=> "Record", 'page'=>'Page']; + + $tab1 .= " + + ".LAN_PAGINATION.$frm->help(LAN_NEWS_112)." + + ".$frm->select('news_pagination',$paginationOpts, varset($pref['news_pagination'],'record'))." + + "; + $tab1 .= " diff --git a/e107_core/shortcodes/batch/news_shortcodes.php b/e107_core/shortcodes/batch/news_shortcodes.php index 48e1a8b18..1a2322d5a 100644 --- a/e107_core/shortcodes/batch/news_shortcodes.php +++ b/e107_core/shortcodes/batch/news_shortcodes.php @@ -31,6 +31,8 @@ class news_shortcodes extends e_shortcode private $imageItem; + protected $pagination; + // protected $param; // do not enable - erases param. . @@ -44,6 +46,8 @@ class news_shortcodes extends e_shortcode $this->commentsDisabled = vartrue($pref['comments_disabled']); + $this->pagination = varset($pref['news_pagination'], 'record'); + if(!empty($pref['comments_engine'])) { $this->commentsEngine = $pref['comments_engine']; @@ -1207,7 +1211,16 @@ class news_shortcodes extends e_shortcode { $params = e107::getRegistry('core/news/pagination'); - return e107::getParser()->parseTemplate("{NEXTPREV=".$params."}"); + parse_str($params,$opts); + + if($this->pagination === 'page') + { + $opts['type'] = 'page'; + $opts['total'] = ceil($opts['total'] / $opts['amount']); + $opts['current'] = ($opts['current'] / $opts['amount']) + 1; + } + + return e107::getParser()->parseTemplate("{NEXTPREV=".http_build_query($opts)."}"); } diff --git a/e107_core/xml/default_install.xml b/e107_core/xml/default_install.xml index a90f780f0..3adca05d3 100644 --- a/e107_core/xml/default_install.xml +++ b/e107_core/xml/default_install.xml @@ -223,6 +223,7 @@ default 10 0 + record 10 0 diff --git a/e107_languages/English/admin/lan_admin.php b/e107_languages/English/admin/lan_admin.php index d33edba18..f4ab9d4ec 100644 --- a/e107_languages/English/admin/lan_admin.php +++ b/e107_languages/English/admin/lan_admin.php @@ -581,4 +581,5 @@ define("LAN_ROBOTS_NOIMAGE", "Prevent search engines from indexing images of thi define("LAN_NAVIGATION", "Navigation"); define("LAN_NAVIGATION_LINKS", "Navigation Links"); +define("LAN_PAGINATION", "Pagination"); diff --git a/e107_languages/English/admin/lan_newspost.php b/e107_languages/English/admin/lan_newspost.php index b05087866..60fa2aed6 100644 --- a/e107_languages/English/admin/lan_newspost.php +++ b/e107_languages/English/admin/lan_newspost.php @@ -237,3 +237,4 @@ define("LAN_NEWS_108", "The SEF URL is unlike the title of your news item."); define("LAN_NEWS_109", "Trigger an email notification when you submit this form."); define("LAN_NEWS_110", "News Cache Timeout"); define("LAN_NEWS_111", "Time in minutes. Applies only when system cache is enabled."); +define("LAN_NEWS_112", "Select the URL format. Either record count (eg. page=20, page=40, page=60 etc.) or page number (eg. page=1, page=2, page=3 etc.). Warning: If modified some news URLs will need to be re-indexed by search engines."); diff --git a/e107_plugins/news/news.php b/e107_plugins/news/news.php index 3f1d385ad..a811dd3fa 100644 --- a/e107_plugins/news/news.php +++ b/e107_plugins/news/news.php @@ -403,7 +403,16 @@ class news_front $this->newsUrlparms['author'] = $tp->filter($_GET['author']); $this->from = intval(varset($_GET['page'],0)); + + } + + // New in v2.3.1 Pagination with "Page" instead of "Record". + if(!empty($this->pref['news_pagination']) && $this->pref['news_pagination'] === 'page' && !empty($_GET['page'])) + { + $this->from = (int) ($_GET['page'] - 1) * ITEMVIEW; + } + } @@ -1083,7 +1092,6 @@ class news_front $url = rawurlencode(e107::getUrl()->create($this->route, $this->newsUrlparms)); $parms = 'tmpl_prefix='.deftrue('NEWS_NEXTPREV_TMPL', 'default').'&total='.$news_total.'&amount='.$amount.'¤t='.$this->from.$nitems.'&url='.$url; - $this->addDebug('newsUrlParms',$this->newsUrlparms); $paginationSC = false;