In this short tutorial we will show how to add view all products link on every category page. This tutorial is based on PrestaShop version 1.5. View all link will lead to all products from a category.
Please remember that you conduct all changes on your own risk.
First of all you have to modify assignProductList method in CategoryController class. To do so make a new file (if file does not exist) called CategoryContoller.php in override/controllers/front and add folowing lines
<?php
class CategoryController extends CategoryControllerCore
{
}
Inside class copy method assignProductList from original file and modify content in following if condition
if (!$hookExecuted)
{
$this->context->smarty->assign('categoryNameComplement', '');
$showProducts = Tools::getValue('showProducts');
if ($showProducts == 'all') {
$this->cat_products = $this->category->getProducts($this->context->language->id, null, null, $this->orderBy, $this->orderWay, false, true, false, 1, true, null, true);
} else {
$this->nbProducts = $this->category->getProducts(null, null, null, $this->orderBy, $this->orderWay, true);
$this->pagination((int)$this->nbProducts); // Pagination must be call after "getProducts"
$this->cat_products = $this->category->getProducts($this->context->language->id, (int)$this->p, (int)$this->n, $this->orderBy, $this->orderWay);
}
}
When category link is fired in a browser, the 'showProducts' parameter is checked. If value is set to 'all', modified getProducts method from Category model will be called.
Next we will have to override previously mentioned model. Make a new file named Category.php (if it does not exist) in override/classes and modify file
<?php
class Category extends CategoryCore
{
}
Now copy getProducts method from original file and add one more parameter in function (showAllProducts)
public function getProducts($id_lang, $p, $n, $order_by = null, $order_way = null, $get_total = false, $active = true, $random = false, $random_number_products = 1, $check_access = true, Context $context = null, $showAllProducts = false)
{
}
Now find $random === true condition and modify it this way
if ($random === true)
{
$sql .= ' ORDER BY RAND()';
$sql .= ' LIMIT 0, '.(int)$random_number_products;
}
else
$sql .= ' ORDER BY '.(isset($order_by_prefix) ? $order_by_prefix.'.' : '').'`'.pSQL($order_by).'` '.pSQL($order_way);
if (!$showAllProducts) {
$sql .= ' LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n;
}
Additional code toggles on/off LIMIT in sql query. That allows to show (or not) limited no. of products.
Last thing you have to do is to open pagination.tpl file in your template folder (themes/YOUR_TEMPLATE/pagination.tpl) and add folowing line of code just before the end of last if condition
{if $start!=$stop}
…
<a rel="nofollow" href="{$request}?showProducts=all">{l s='View all'}</a>
{/if}
Rel attribute will prevent search bots from indexing a link. {$request} will display correctly whole url of the category. You may have to change ? To & if your link has already parameters like (/index.php?id_category=3&controller=category).