1
0
mirror of https://github.com/e107inc/e107.git synced 2025-08-02 12:48:26 +02:00

Issue #4805, Issue #4352 - News pagination fix. News canonical correction for page numbers and default news page.

This commit is contained in:
Cameron
2022-07-06 15:45:08 -07:00
parent 5e274b85e3
commit 31d7002ff2
2 changed files with 78 additions and 37 deletions

View File

@@ -4022,8 +4022,9 @@ class e107
* @param string $plugin if empty will return the last assigned canonical url._SITEURL_ will set canonical to the SITEURL. * @param string $plugin if empty will return the last assigned canonical url._SITEURL_ will set canonical to the SITEURL.
* @param string|array $key * @param string|array $key
* @param array $row * @param array $row
* @param array $options mode, query = [],
*/ */
public static function canonical($plugin = '', $key = 'index', $row = array()) public static function canonical($plugin = '', $key = 'index', $row = array(), $options=array('mode'=>'full'))
{ {
if($plugin === '_RESET_') // for testing only, may be removed in future. if($plugin === '_RESET_') // for testing only, may be removed in future.
{ {
@@ -4038,6 +4039,8 @@ class e107
return $alreadyDone; return $alreadyDone;
} }
if(empty($alreadyDone)) if(empty($alreadyDone))
{ {
if($plugin === '_SITEURL_') if($plugin === '_SITEURL_')
@@ -4046,7 +4049,7 @@ class e107
} }
else else
{ {
$url = self::url($plugin, $key, $row, array('mode' => 'full')); $url = self::url($plugin, $key, $row, $options);
} }
if(!empty($url)) if(!empty($url))

View File

@@ -33,9 +33,9 @@ class news_front
private $ix = null; private $ix = null;
private $newsUrlparms = array(); private $newsUrlparms = array();
private $text = null; private $text = null;
private $pref = array(); private $pref;
private $debugInfo = array(); private $debugInfo = array();
private $cacheRefreshTime = false; private $cacheRefreshTime;
private $caption = null; private $caption = null;
private $templateKey = null; private $templateKey = null;
@@ -74,6 +74,7 @@ class news_front
$this->setConstants(); $this->setConstants();
$this->setActions(); $this->setActions();
$this->setRoute(); $this->setRoute();
$this->setPagination();
$this->detect(); $this->detect();
$this->setBreadcrumb(); $this->setBreadcrumb();
@@ -153,14 +154,14 @@ class news_front
{ // --> Cache { // --> Cache
$this->text = $this->renderListTemplate(); $this->text = $this->renderListTemplate();
$this->text .= $this->render_newscats(); $this->text .= $this->render_newscats();
return null; return;
} }
if ($this->action == 'extend') if ($this->action == 'extend')
{ // --> Cache { // --> Cache
$this->text = $this->renderViewTemplate(); $this->text = $this->renderViewTemplate();
$this->text .= $this->render_newscats(); $this->text .= $this->render_newscats();
return null; return;
} }
if(!empty($this->pref['nfp_display']) && intval($this->pref['nfp_display']) === 1) // top position if(!empty($this->pref['nfp_display']) && intval($this->pref['nfp_display']) === 1) // top position
@@ -177,7 +178,8 @@ class news_front
$this->text .= $this->show_newsarchive(); $this->text .= $this->show_newsarchive();
$this->text .= $this->render_newscats(); $this->text .= $this->render_newscats();
return null;
return;
} }
@@ -270,20 +272,20 @@ class news_front
$tmp = explode(".",e_QUERY); $tmp = explode(".",e_QUERY);
$action = $tmp[0]; // At least one parameter here $action = $tmp[0]; // At least one parameter here
$sub_action = varset($tmp[1],''); // Usually a numeric category, or numeric news item number, but don't presume yet $sub_action = varset($tmp[1]); // Usually a numeric category, or numeric news item number, but don't presume yet
// $id = varset($tmp[2],''); // ID of specific news item where required // $id = varset($tmp[2],''); // ID of specific news item where required
$this->from = intval(varset($tmp[2],0)); // Item number for first item on multi-page lists $this->from = intval(varset($tmp[2],0)); // Item number for first item on multi-page lists
$this->cacheString = 'news.php_'.e_QUERY; $this->cacheString = 'news.php_'.e_QUERY;
if($action === 'default') if($action === 'default')
{ {
$action = $action = varset($opt[$this->defaultTemplate],''); $action = $action = varset($opt[$this->defaultTemplate]);
} }
} }
else else
{ {
$action = varset($opt[$this->defaultTemplate],''); $action = varset($opt[$this->defaultTemplate]);
$sub_action = ''; $sub_action = '';
$tmp = array(); $tmp = array();
@@ -298,7 +300,7 @@ class news_front
if (is_numeric($action) && isset($tmp[1]) && (($tmp[1] == 'list') || ($tmp[1] == 'month') || ($tmp[1] == 'day'))) if (is_numeric($action) && isset($tmp[1]) && (($tmp[1] == 'list') || ($tmp[1] == 'month') || ($tmp[1] == 'day')))
{ {
$action = $tmp[1]; $action = $tmp[1];
$sub_action = varset($tmp[0],''); $sub_action = varset($tmp[0]);
} }
@@ -414,12 +416,32 @@ class news_front
} }
}
private function setPagination()
{
// New in v2.3.1 Pagination with "Page" instead of "Record". // 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'])) if(!empty($this->pref['news_pagination']) && $this->pref['news_pagination'] === 'page' && !empty($_GET['page']))
{ {
$this->from = (int) ($_GET['page'] - 1) * ITEMVIEW; switch($this->action)
{
case 'cat':
case 'all':
case 'tag':
case 'author':
$this->from = (int) ($_GET['page'] - 1) * NEWSLIST_LIMIT;
break;
default:
$this->from = (int) ($_GET['page'] - 1) * ITEMVIEW;
}
} }
$this->addDebug('FROM', $this->from);
} }
@@ -564,15 +586,10 @@ class news_front
$this->addDebug('setNewsFrontMeta (type)',$type); $this->addDebug('setNewsFrontMeta (type)',$type);
// $this->addDebug('setNewsFrontMeta (data)',$news); // $this->addDebug('setNewsFrontMeta (data)',$news);
switch($type) switch($type)
{ {
case "all":
e107::meta('robots', 'noindex, follow');
e107::route('news/list/items');
e107::canonical($this->route, $news);
break;
case "tag": case "tag":
e107::title($this->subAction); e107::title($this->subAction);
e107::meta('robots', 'noindex, follow'); e107::meta('robots', 'noindex, follow');
@@ -637,12 +654,29 @@ class news_front
e107::route('news/view/item'); e107::route('news/view/item');
break; break;
case "all":
default: default:
// e107::meta('robots', 'noindex');
e107::route('news/list/items');
e107::canonical($this->route, $news);
$options = array('mode'=>'full');
if(!empty($_GET['page']) && intval($_GET['page']) !== 1 )
{
$page = (int) $_GET['page'];
$options['query'] = ['page'=> $page];
}
// e107::meta('robots', 'noindex, follow');
e107::route('news/list/items');
if($this->defaultTemplate == 'list')
{
e107::canonical('news', 'index', null, $options);
}
else
{
$extra = (!empty($page)) ? '?page='.$page : '';
e107::canonical($this->route.$extra, $news);
}
// e107::canonical('news'); // e107::canonical('news');
} }
@@ -716,7 +750,7 @@ class news_front
{ {
if($c == 3){ break; } if($c == 3){ break; }
list($img,$tmp) = explode("?",$yt); list($img,$tmp) = explode("?",$yt);
e107::meta('og:image',"http://img.youtube.com/vi/".$img."/0.jpg"); e107::meta('og:image',"https://img.youtube.com/vi/".$img."/0.jpg");
$c++; $c++;
} }
@@ -775,7 +809,7 @@ class news_front
private function setNewsCache($cache_tag, $cache_data, $rowData=array()) private function setNewsCache($cache_tag, $cache_data, $rowData=array())
{ {
$e107cache = e107::getCache(); $e107cache = e107::getCache();
$e107cache->setMD5(null,true); $e107cache->setMD5(null);
$e107cache->set($cache_tag, $cache_data); $e107cache->set($cache_tag, $cache_data);
$e107cache->set($cache_tag."_caption", $this->caption); $e107cache->set($cache_tag."_caption", $this->caption);
@@ -854,7 +888,11 @@ class news_front
} }
} }
/**
* @param $caption
* @param $text
* @return null
*/
private function renderCache($caption, $text) private function renderCache($caption, $text)
{ {
global $pref,$tp,$sql,$CUSTOMFOOTER, $FOOTER,$cust_footer,$ph; global $pref,$tp,$sql,$CUSTOMFOOTER, $FOOTER,$cust_footer,$ph;
@@ -907,7 +945,7 @@ class news_front
{ {
$gen = new convert; $gen = new convert;
$sql->select("news_category", "*", "category_id='{$category}'"); $sql->select("news_category", "*", "category_id='$category'");
$row = $sql->fetch(); $row = $sql->fetch();
extract($row); // still required for the table-render. :( extract($row); // still required for the table-render. :(
} }
@@ -935,7 +973,7 @@ class news_front
$query .= " $query .= "
ORDER BY n.news_sticky DESC, n.news_datestamp DESC ORDER BY n.news_sticky DESC, n.news_datestamp DESC
LIMIT ".intval($this->from).",".deftrue('NEWSALL_LIMIT', NEWSLIST_LIMIT); // NEWSALL_LIMIT just for BC. NEWSLIST_LIMIT is sufficient. LIMIT ". $this->from .",".deftrue('NEWSALL_LIMIT', NEWSLIST_LIMIT); // NEWSALL_LIMIT just for BC. NEWSLIST_LIMIT is sufficient.
$category_name = ($this->defaultTemplate == 'list') ? LAN_PLUGIN_NEWS_NAME : "All"; $category_name = ($this->defaultTemplate == 'list') ? LAN_PLUGIN_NEWS_NAME : "All";
unset($renTypeQry); unset($renTypeQry);
} }
@@ -954,7 +992,7 @@ class news_front
AND n.news_start < ".time()." AND (n.news_end=0 || n.news_end>".time().") AND n.news_start < ".time()." AND (n.news_end=0 || n.news_end>".time().")
AND n.news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (n.news_class REGEXP ".$this->nobody_regexp.") AND n.news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (n.news_class REGEXP ".$this->nobody_regexp.")
ORDER BY n.news_datestamp DESC ORDER BY n.news_datestamp DESC
LIMIT ".intval($this->from).",".NEWSLIST_LIMIT; LIMIT ". $this->from .",".NEWSLIST_LIMIT;
} }
elseif($this->action === 'tag') elseif($this->action === 'tag')
{ {
@@ -971,7 +1009,7 @@ class news_front
AND n.news_start < ".time()." AND (n.news_end=0 || n.news_end>".time().") AND n.news_start < ".time()." AND (n.news_end=0 || n.news_end>".time().")
AND n.news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (n.news_class REGEXP ".$this->nobody_regexp.") AND n.news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (n.news_class REGEXP ".$this->nobody_regexp.")
ORDER BY n.news_datestamp DESC ORDER BY n.news_datestamp DESC
LIMIT ".intval($this->from).",".NEWSLIST_LIMIT; LIMIT ". $this->from .",".NEWSLIST_LIMIT;
$category_name = defset('LAN_NEWS_309','Tag').': "'.$tagsearch.'"'; $category_name = defset('LAN_NEWS_309','Tag').': "'.$tagsearch.'"';
$tagsearch = $tagsearch2; $tagsearch = $tagsearch2;
@@ -993,7 +1031,7 @@ class news_front
AND n.news_start < ".time()." AND (n.news_end=0 || n.news_end>".time().") AND n.news_start < ".time()." AND (n.news_end=0 || n.news_end>".time().")
AND n.news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (n.news_class REGEXP ".$this->nobody_regexp.") AND n.news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (n.news_class REGEXP ".$this->nobody_regexp.")
ORDER BY n.news_datestamp DESC ORDER BY n.news_datestamp DESC
LIMIT ".intval($this->from).",".NEWSLIST_LIMIT; LIMIT ". $this->from .",".NEWSLIST_LIMIT;
$category_name = LAN_AUTHOR.': "'.$authorSearch.'"'; $category_name = LAN_AUTHOR.': "'.$authorSearch.'"';
$this->tagAuthor = $authorSearch; $this->tagAuthor = $authorSearch;
@@ -1086,7 +1124,7 @@ class news_front
$param['itemlink'] = (defined("NEWSLIST_ITEMLINK")) ? NEWSLIST_ITEMLINK : ""; $param['itemlink'] = (defined("NEWSLIST_ITEMLINK")) ? NEWSLIST_ITEMLINK : "";
$param['thumbnail'] =(defined("NEWSLIST_THUMB")) ? NEWSLIST_THUMB : "border:0px"; $param['thumbnail'] =(defined("NEWSLIST_THUMB")) ? NEWSLIST_THUMB : "border:0px";
$param['catlink'] = (defined("NEWSLIST_CATLINK")) ? NEWSLIST_CATLINK : ""; $param['catlink'] = (defined("NEWSLIST_CATLINK")) ? NEWSLIST_CATLINK : "";
$param['caticon'] = (defined("NEWSLIST_CATICON")) ? NEWSLIST_CATICON : defset('ICONSTYLE',''); $param['caticon'] = (defined("NEWSLIST_CATICON")) ? NEWSLIST_CATICON : defset('ICONSTYLE');
$param['current_action'] = $action; $param['current_action'] = $action;
$param['template_key'] = 'news/list'; $param['template_key'] = 'news/list';
@@ -1097,7 +1135,7 @@ class news_front
if(!empty($template['start'])) if(!empty($template['start']))
{ {
$text .= $tp->parseTemplate($template['start'], true); $text .= $tp->parseTemplate($template['start']);
} }
if(!empty($newsList)) if(!empty($newsList))
@@ -1129,7 +1167,7 @@ class news_front
if(!empty($template['end'])) if(!empty($template['end']))
{ {
e107::setRegistry('core/news/pagination', $parms); e107::setRegistry('core/news/pagination', $parms);
$text .= $tp->parseTemplate($template['end'], true); $text .= $tp->parseTemplate($template['end']);
if(strpos($template['end'], '{NEWS_PAGINATION') !== false) if(strpos($template['end'], '{NEWS_PAGINATION') !== false)
{ {
$paginationSC = true; $paginationSC = true;
@@ -1139,7 +1177,7 @@ class news_front
if($paginationSC === false) // BC Fix if($paginationSC === false) // BC Fix
{ {
$text .= $tp->parseTemplate("{NEXTPREV={$parms}}"); $text .= $tp->parseTemplate("{NEXTPREV=$parms}");
$this->addDebug("Pagination Shortcode", 'false'); $this->addDebug("Pagination Shortcode", 'false');
} }
@@ -1419,7 +1457,7 @@ class news_front
WHERE n.news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (n.news_class REGEXP ".$this->nobody_regexp.") WHERE n.news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (n.news_class REGEXP ".$this->nobody_regexp.")
AND n.news_start < ".time()." AND (n.news_end=0 || n.news_end>".time().") AND n.news_start < ".time()." AND (n.news_end=0 || n.news_end>".time().")
AND (FIND_IN_SET('0', n.news_render_type) OR FIND_IN_SET(1, n.news_render_type)) AND (FIND_IN_SET('0', n.news_render_type) OR FIND_IN_SET(1, n.news_render_type))
ORDER BY n.news_sticky DESC, ".$this->order." DESC LIMIT ".intval($this->from).",".ITEMVIEW; ORDER BY n.news_sticky DESC, ".$this->order." DESC LIMIT ". $this->from .",".ITEMVIEW;
return $query; return $query;
@@ -1452,7 +1490,7 @@ class news_front
WHERE n.news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (n.news_class REGEXP ".$this->nobody_regexp.") WHERE n.news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (n.news_class REGEXP ".$this->nobody_regexp.")
AND n.news_start < ".time()." AND (n.news_end=0 || n.news_end>".time().") AND n.news_start < ".time()." AND (n.news_end=0 || n.news_end>".time().")
AND n.news_category={$sub_action} AND n.news_category={$sub_action}
ORDER BY n.news_sticky DESC,".$this->order." DESC LIMIT ".intval($this->from).",".ITEMVIEW; ORDER BY n.news_sticky DESC,".$this->order." DESC LIMIT ". $this->from .",".ITEMVIEW;
$noNewsMessage = LAN_NEWS_463; $noNewsMessage = LAN_NEWS_463;
break; break;
@@ -1523,7 +1561,7 @@ class news_front
WHERE n.news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (n.news_class REGEXP ".$this->nobody_regexp.") WHERE n.news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (n.news_class REGEXP ".$this->nobody_regexp.")
AND n.news_start < ".time()." AND (n.news_end=0 || n.news_end>".time().") AND n.news_start < ".time()." AND (n.news_end=0 || n.news_end>".time().")
AND (FIND_IN_SET('0', n.news_render_type) OR FIND_IN_SET(1, n.news_render_type)) AND n.news_datestamp BETWEEN {$startdate} AND {$enddate} AND (FIND_IN_SET('0', n.news_render_type) OR FIND_IN_SET(1, n.news_render_type)) AND n.news_datestamp BETWEEN {$startdate} AND {$enddate}
ORDER BY ".$this->order." DESC LIMIT ".intval($this->from).",".ITEMVIEW; ORDER BY ".$this->order." DESC LIMIT ". $this->from .",".ITEMVIEW;
if($this->action == 'month') if($this->action == 'month')
{ {