-
-
Save rubenRP/8a0035b632b60dc024c1de4c4de47daf to your computer and use it in GitHub Desktop.
SEO rel="next/prev" for Magento 2. Pagination in head
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Revival\Seo\Block; | |
use Magento\Framework\View\Element\Template; | |
/** | |
* To make this appear in the header for the catalog, you'd need to add this as a block in ${THEME_DIR}/Magento_Catalog/layout/catalog_category_view.xml | |
* | |
* EG: | |
* | |
* <?xml version="1.0"?> | |
* <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> | |
* <body> | |
* <referenceBlock name="head.additional"> | |
* <block class="Revival\Seo\Block\HeaderPagination" name="pagination" template="pagination.phtml"> | |
* </block> | |
* </referenceBlock> | |
* </body> | |
* </page> | |
* | |
* All that the phtml really does is call $this->getPageHeaders(), omitted for brevity. | |
* | |
*/ | |
class HeaderPagination extends \Magento\Framework\View\Element\Template { | |
/** @var $registry \Magento\Framework\Registry */ | |
public $registry = null; | |
/** @var $catalog \Magento\Catalog\Model\Category */ | |
public $category = null; | |
/** @var $logger \Psr\Log\LoggerInterface */ | |
public $logger = null; | |
/** @var $context \Magento\Framework\View\Element\Template\Context */ | |
public $context = null; | |
/** @var $toolbar \Magento\Catalog\Block\Product\ProductList\Toolbar; */ | |
public $toolbar = null; | |
/** @var $pager \Magento\Theme\Block\Html\Pager */ | |
public $pager = null; | |
public function __construct(Template\Context $context, array $data = [],\Magento\Framework\Registry $registry, \Magento\Catalog\Block\Product\ProductList\Toolbar $toolbar, \Magento\Theme\Block\Html\Pager $pager) | |
{ | |
parent::__construct($context, $data); | |
if($registry == null){ | |
$this->_logger->debug("[!] Received null registry from DI!"); | |
} | |
$this->context = $context; | |
$this->registry = $registry; | |
$this->category = $registry->registry('current_category'); | |
$this->toolbar = $toolbar; | |
$this->pager = $pager; | |
} | |
public function getPageHeaders(){ | |
//set pager and toolbar to use same collection, make sure they're both in agreement as to page limiting | |
$this->toolbar->setCollection($this->category->getProductCollection()); | |
$tool = $this->pager->setCollection($this->category->getProductCollection()); | |
$tool->setShowPerPage($this->toolbar->getLimit()); | |
$has_prev_page = $has_next_page = false; | |
$next_page_url = $prev_page_url = ''; | |
//calculate last page, round down to nearest int, 4.9 pages still means only 4 pages. | |
$last_page = intval((($this->category->getProductCollection()->count() - 1) / $this->toolbar->getLimit()) + 1); | |
$current_page = $this->toolbar->getCurrentPage(); | |
//don't show a previous page on the first page, or if the last page is 1. | |
if($current_page != 1 && $this->toolbar->getLastPageNum() != 1){ | |
$has_prev_page = true; | |
$params = $this->getRequest()->getParams(); | |
//remove ?id param for category identification. | |
$params['id'] = null; | |
$params[$tool->getPageVarName()] = $current_page-1; | |
$prev_page_url = $this->toolbar->getPagerUrl($params); | |
//$prev_page_url = $tool->getPreviousPageUrl(); | |
} | |
//if our page isn't the last page, show the next one. | |
if($current_page != $last_page){ | |
$has_next_page = true; | |
$params = $this->getRequest()->getParams(); | |
//remove ?id param for category identification. | |
$params['id'] = null; | |
$params[$tool->getPageVarName()] = $current_page+1; | |
$next_page_url = $this->toolbar->getPagerUrl($params); | |
//$next_page_url = $tool->getNextPageUrl(); | |
} | |
if($has_prev_page){ | |
echo "<link rel='prev' href='{$prev_page_url}'>". PHP_EOL; | |
} | |
if($has_next_page){ | |
echo "<link rel='next' href='{$next_page_url}'>". PHP_EOL; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment