This free Opencart 3.0 module provides the ability to display all products on a page. Download the module, install it, and you will see All Products link in the category top menu at the end.

Steps to install “All Products Show in One Page” opencart 3.0, 3.0.1.1, 3.0.1.2, 3.0.1.3 module free:

Show all products Opencart free module

The folder structure of display all products free OpenCart module:

To show the “Show All Products” menu and link it to the all products page from the top of the frontend category menu, we set up an Ocmod file (install.xml):

<?xml version="1.0" encoding="utf-8"?>
<modification>
    <name>All Product Show</name>
    <version>3.0</version>
    <author>Rupak Nepali</author>
    <link>https://webocreation.com</link>
    <code>webocreation_all_products_show</code>
    <description>Show all Products in a Page frontend</description>
    <file path="catalog/view/theme/*/template/common/menu.twig">
        <operation>
            <search><![CDATA[{% for category in categories %}]]></search>
            <add position="before"><![CDATA[
                <li><a href="{{ allproductsurl }}">{{ text_heading_title }}</a></li>
            ]]></add>
        </operation>
    </file>

    <file path="catalog/controller/common/menu.php">
        <operation>
            <search><![CDATA[$data['categories'] = array();]]></search>
            <add position="before"><![CDATA[
                $data['allproductsurl']=$this->url->link('product/allproduct');
                $this->load->language('product/allproduct');
                $data['text_heading_title']=$this->language->get('text_heading_title');
            ]]></add>
        </operation>
    </file>
</modification>

Controller of Show all products free module catalog\controller\product\allproduct.php

<?php
class ControllerProductAllproduct extends Controller
{
  public function index()
  {
    $this->load->language('product/allproduct');
    $this->load->model('catalog/product');
    $this->load->model('tool/image');
    if (isset($this->request->get['filter'])) {
      $filter = $this->request->get['filter'];
    } else {
      $filter = '';
    }
    if (isset($this->request->get['sort'])) {
      $sort = $this->request->get['sort'];
    } else {
      $sort = 'p.sort_order';
    }
    if (isset($this->request->get['order'])) {
      $order = $this->request->get['order'];
    } else {
      $order = 'ASC';
    }
    if (isset($this->request->get['page'])) {
      $page = $this->request->get['page'];
    } else {
      $page = 1;
    }
    if (isset($this->request->get['limit'])) {
      $limit = (int) $this->request->get['limit'];
    } else {
      $limit = $this->config->get('theme_' . $this->config->get('config_theme') . '_product_limit');
    }
    $data['breadcrumbs'] = array();
    $data['breadcrumbs'][] = array(
      'text' => $this->language->get('text_home'),
      'href' => $this->url->link('common/home')
    );
    $this->document->setTitle($this->language->get('text_title'));
    $this->document->setDescription($this->language->get('text_description'));
    $this->document->setKeywords($this->language->get('text_keywords'));
    $data['heading_title'] = $this->language->get('text_heading_title');
    $data['text_compare'] = sprintf($this->language->get('text_compare'), (isset($this->session->data['compare']) ? count($this->session->data['compare']) : 0));
    // Set the last allproduct breadcrumb
    $data['breadcrumbs'][] = array(
      'text' => 'Show All Products',
      'href' => $this->url->link('product/allproduct')
    );
    $data['compare'] = $this->url->link('product/compare');
    $url = '';
    if (isset($this->request->get['filter'])) {
      $url .= '&filter=' . $this->request->get['filter'];
    }
    if (isset($this->request->get['sort'])) {
      $url .= '&sort=' . $this->request->get['sort'];
    }
    if (isset($this->request->get['order'])) {
      $url .= '&order=' . $this->request->get['order'];
    }
    if (isset($this->request->get['limit'])) {
      $url .= '&limit=' . $this->request->get['limit'];
    }
    $data['products'] = array();
    $filter_data = array(
      'filter_filter'      => $filter,
      'sort'               => $sort,
      'order'              => $order,
      'start'              => ($page - 1) * $limit,
      'limit'              => $limit
    );
    $product_total = $this->model_catalog_product->getTotalProducts($filter_data);
    $results = $this->model_catalog_product->getProducts($filter_data);
    foreach ($results as $result) {
      if ($result['image']) {
        $image = $this->model_tool_image->resize($result['image'], $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_height'));
      } else {
        $image = $this->model_tool_image->resize('placeholder.png', $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_height'));
      }
      if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
        $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
      } else {
        $price = false;
      }
      if ((float) $result['special']) {
        $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
      } else {
        $special = false;
      }
      if ($this->config->get('config_tax')) {
        $tax = $this->currency->format((float) $result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']);
      } else {
        $tax = false;
      }
      if ($this->config->get('config_review_status')) {
        $rating = (int) $result['rating'];
      } else {
        $rating = false;
      }
      $data['products'][] = array(
        'product_id'  => $result['product_id'],
        'thumb'       => $image,
        'name'        => $result['name'],
        'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
        'price'       => $price,
        'special'     => $special,
        'tax'         => $tax,
        'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
        'rating'      => $result['rating'],
        'href'        => $this->url->link('product/product', '&product_id=' . $result['product_id'] . $url)
      );
    }
    $url = '';
    if (isset($this->request->get['filter'])) {
      $url .= '&filter=' . $this->request->get['filter'];
    }
    if (isset($this->request->get['limit'])) {
      $url .= '&limit=' . $this->request->get['limit'];
    }
    $data['sorts'] = array();
    $data['sorts'][] = array(
      'text'  => $this->language->get('text_default'),
      'value' => 'p.sort_order-ASC',
      'href'  => $this->url->link('product/allproduct',  '&sort=p.sort_order&order=ASC' . $url)
    );
    $data['sorts'][] = array(
      'text'  => $this->language->get('text_name_asc'),
      'value' => 'pd.name-ASC',
      'href'  => $this->url->link('product/allproduct',  '&sort=pd.name&order=ASC' . $url)
    );
    $data['sorts'][] = array(
      'text'  => $this->language->get('text_name_desc'),
      'value' => 'pd.name-DESC',
      'href'  => $this->url->link('product/allproduct',  '&sort=pd.name&order=DESC' . $url)
    );
    $data['sorts'][] = array(
      'text'  => $this->language->get('text_price_asc'),
      'value' => 'p.price-ASC',
      'href'  => $this->url->link('product/allproduct',  '&sort=p.price&order=ASC' . $url)
    );
    $data['sorts'][] = array(
      'text'  => $this->language->get('text_price_desc'),
      'value' => 'p.price-DESC',
      'href'  => $this->url->link('product/allproduct',  '&sort=p.price&order=DESC' . $url)
    );
    if ($this->config->get('config_review_status')) {
      $data['sorts'][] = array(
        'text'  => $this->language->get('text_rating_desc'),
        'value' => 'rating-DESC',
        'href'  => $this->url->link('product/allproduct',  '&sort=rating&order=DESC' . $url)
      );
      $data['sorts'][] = array(
        'text'  => $this->language->get('text_rating_asc'),
        'value' => 'rating-ASC',
        'href'  => $this->url->link('product/allproduct',  '&sort=rating&order=ASC' . $url)
      );
    }
    $data['sorts'][] = array(
      'text'  => $this->language->get('text_model_asc'),
      'value' => 'p.model-ASC',
      'href'  => $this->url->link('product/allproduct',  '&sort=p.model&order=ASC' . $url)
    );
    $data['sorts'][] = array(
      'text'  => $this->language->get('text_model_desc'),
      'value' => 'p.model-DESC',
      'href'  => $this->url->link('product/allproduct',  '&sort=p.model&order=DESC' . $url)
    );
    $url = '';
    if (isset($this->request->get['filter'])) {
      $url .= '&filter=' . $this->request->get['filter'];
    }
    if (isset($this->request->get['sort'])) {
      $url .= '&sort=' . $this->request->get['sort'];
    }
    if (isset($this->request->get['order'])) {
      $url .= '&order=' . $this->request->get['order'];
    }
    $data['limits'] = array();
    $limits = array_unique(array($this->config->get('theme_' . $this->config->get('config_theme') . '_product_limit'), 25, 50, 75, 100));
    sort($limits);
    foreach ($limits as $value) {
      $data['limits'][] = array(
        'text'  => $value,
        'value' => $value,
        'href'  => $this->url->link('product/allproduct',  $url . '&limit=' . $value)
      );
    }
    $url = '';
    if (isset($this->request->get['filter'])) {
      $url .= '&filter=' . $this->request->get['filter'];
    }
    if (isset($this->request->get['sort'])) {
      $url .= '&sort=' . $this->request->get['sort'];
    }
    if (isset($this->request->get['order'])) {
      $url .= '&order=' . $this->request->get['order'];
    }
    if (isset($this->request->get['limit'])) {
      $url .= '&limit=' . $this->request->get['limit'];
    }
    $pagination = new Pagination();
    $pagination->total = $product_total;
    $pagination->page = $page;
    $pagination->limit = $limit;
    $pagination->url = $this->url->link('product/allproduct',  $url . '&page={page}');
    $data['pagination'] = $pagination->render();
    $data['results'] = sprintf($this->language->get('text_pagination'), ($product_total) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($product_total - $limit)) ? $product_total : ((($page - 1) * $limit) + $limit), $product_total, ceil($product_total / $limit));
    // http://googlewebmastercentral.blogspot.com/2011/09/pagination-with-relnext-and-relprev.html
    if ($page == 1) {
      $this->document->addLink($this->url->link('product/allproduct'), 'canonical');
    } else {
      $this->document->addLink($this->url->link('product/allproduct', '&page=' . $page), 'canonical');
    }
    if ($page > 1) {
      $this->document->addLink($this->url->link('product/allproduct', (($page - 2) ? '&page=' . ($page - 1) : '')), 'prev');
    }
    if ($limit && ceil($product_total / $limit) > $page) {
      $this->document->addLink($this->url->link('product/allproduct', '&page=' . ($page + 1)), 'next');
    }
    $data['sort'] = $sort;
    $data['order'] = $order;
    $data['limit'] = $limit;
    $data['continue'] = $this->url->link('common/home');
    $data['column_left'] = $this->load->controller('common/column_left');
    $data['column_right'] = $this->load->controller('common/column_right');
    $data['content_top'] = $this->load->controller('common/content_top');
    $data['content_bottom'] = $this->load->controller('common/content_bottom');
    $data['footer'] = $this->load->controller('common/footer');
    $data['header'] = $this->load->controller('common/header');
    $this->response->setOutput($this->load->view('product/allproduct', $data));
  }
}

Language file of the show all products module OpenCart version 3.0.*.*. If you want to change text or words then you can change here.

<?php
// Text
$_['text_refine']       = 'Refine Search';
$_['text_product']      = 'Products';
$_['text_error']        = 'Category not found!';
$_['text_empty']        = 'There are no products to list in this category.';
$_['text_quantity']     = 'Qty:';
$_['text_manufacturer'] = 'Brand:';
$_['text_model']        = 'Product Code:';
$_['text_points']       = 'Reward Points:';
$_['text_price']        = 'Price:';
$_['text_tax']          = 'Ex Tax:';
$_['text_compare']      = 'Product Compare (%s)';
$_['text_sort']         = 'Sort By:';
$_['text_default']      = 'Default';
$_['text_name_asc']     = 'Name (A - Z)';
$_['text_name_desc']    = 'Name (Z - A)';
$_['text_price_asc']    = 'Price (Low > High)';
$_['text_price_desc']   = 'Price (High > Low)';
$_['text_rating_asc']   = 'Rating (Lowest)';
$_['text_rating_desc']  = 'Rating (Highest)';
$_['text_model_asc']    = 'Model (A - Z)';
$_['text_model_desc']   = 'Model (Z - A)';
$_['text_limit']        = 'Show:';
$_['text_title']        = 'Show All Products';
$_['text_description']  = 'Show All Products';
$_['text_keywords']     = 'Show All Products';
$_['text_heading_title']= 'Show All Products';

View file of show all products module OpenCart version 3.0 catalog\view\theme\default\template\product\allproduct.twig

{{ header }}
<div id="product-category" class="container">
  <ul class="breadcrumb">
    {% for breadcrumb in breadcrumbs %}
    <li><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
    {% endfor %}
  </ul>
  <div class="row">{{ column_left }}
    {% if column_left and column_right %}
    {% set class = 'col-sm-6' %}
    {% elseif column_left or column_right %}
    {% set class = 'col-sm-9' %}
    {% else %}
    {% set class = 'col-sm-12' %}
    {% endif %}
    <div id="content" class="{{ class }}">{{ content_top }}
      <h2>{{ heading_title }}</h2>
      {% if thumb or description %}
      <div class="row"> {% if thumb %}
        <div class="col-sm-2"><img src="{{ thumb }}" alt="{{ heading_title }}" title="{{ heading_title }}" class="img-thumbnail" /></div>
        {% endif %}
        {% if description %}
        <div class="col-sm-10">{{ description }}</div>
        {% endif %} </div>
      <hr>
      {% endif %}
      {% if categories %}
      <h3>{{ text_refine }}</h3>
      {% if categories|length <= 5 %}
      <div class="row">
        <div class="col-sm-3">
          <ul>
            {% for category in categories %}
            <li><a href="{{ category.href }}">{{ category.name }}</a></li>
            {% endfor %}
          </ul>
        </div>
      </div>
      {% else %}
      <div class="row"> {% for category in categories|batch((categories|length / 4)|round(1, 'ceil')) %}
        <div class="col-sm-3">
          <ul>
            {% for category in categories %}
            <li><a href="{{ category.href }}">{{ category.name }}</a></li>
            {% endfor %}
          </ul>
        </div>
        {% endfor %} </div>
      <br />
      {% endif %}
      {% endif %}
      {% if products %}
      <div class="row">
        <div class="col-md-2 col-sm-6 hidden-xs">
          <div class="btn-group btn-group-sm">
            <button type="button" id="list-view" class="btn btn-default" data-toggle="tooltip" title="{{ button_list }}"><i class="fa fa-th-list"></i></button>
            <button type="button" id="grid-view" class="btn btn-default" data-toggle="tooltip" title="{{ button_grid }}"><i class="fa fa-th"></i></button>
          </div>
        </div>
        <div class="col-md-3 col-sm-6">
          <div class="form-group"><a href="{{ compare }}" id="compare-total" class="btn btn-link">{{ text_compare }}</a></div>
        </div>
        <div class="col-md-4 col-xs-6">
          <div class="form-group input-group input-group-sm">
            <label class="input-group-addon" for="input-sort">{{ text_sort }}</label>
            <select id="input-sort" class="form-control" onchange="location = this.value;">
              {% for sorts in sorts %}
              {% if sorts.value == '%s-%s'|format(sort, order) %}
              <option value="{{ sorts.href }}" selected="selected">{{ sorts.text }}</option>
              {% else %}
              <option value="{{ sorts.href }}">{{ sorts.text }}</option>
              {% endif %}
              {% endfor %}
            </select>
          </div>
        </div>
        <div class="col-md-3 col-xs-6">
          <div class="form-group input-group input-group-sm">
            <label class="input-group-addon" for="input-limit">{{ text_limit }}</label>
            <select id="input-limit" class="form-control" onchange="location = this.value;">
              {% for limits in limits %}
              {% if limits.value == limit %}
              <option value="{{ limits.href }}" selected="selected">{{ limits.text }}</option>
              {% else %}
              <option value="{{ limits.href }}">{{ limits.text }}</option>
              {% endif %}
              {% endfor %}
            </select>
          </div>
        </div>
      </div>
      <div class="row"> {% for product in products %}
        <div class="product-layout product-list col-xs-12">
          <div class="product-thumb">
            <div class="image"><a href="{{ product.href }}"><img src="{{ product.thumb }}" alt="{{ product.name }}" title="{{ product.name }}" class="img-responsive" /></a></div>
            <div>
              <div class="caption">
                <h4><a href="{{ product.href }}">{{ product.name }}</a></h4>
                <p>{{ product.description }}</p>
                {% if product.price %}
                <p class="price"> {% if not product.special %}
                  {{ product.price }}
                  {% else %} <span class="price-new">{{ product.special }}</span> <span class="price-old">{{ product.price }}</span> {% endif %}
                  {% if product.tax %} <span class="price-tax">{{ text_tax }} {{ product.tax }}</span> {% endif %} </p>
                {% endif %}
                {% if product.rating %}
                <div class="rating"> {% for i in 1..5 %}
                  {% if product.rating < i %} <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-2x"></i></span> {% else %} <span class="fa fa-stack"><i class="fa fa-star fa-stack-2x"></i><i class="fa fa-star-o fa-stack-2x"></i></span>{% endif %}
                  {% endfor %} </div>
                {% endif %} </div>
              <div class="button-group">
                <button type="button" onclick="cart.add('{{ product.product_id }}', '{{ product.minimum }}');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md">{{ button_cart }}</span></button>
                <button type="button" data-toggle="tooltip" title="{{ button_wishlist }}" onclick="wishlist.add('{{ product.product_id }}');"><i class="fa fa-heart"></i></button>
                <button type="button" data-toggle="tooltip" title="{{ button_compare }}" onclick="compare.add('{{ product.product_id }}');"><i class="fa fa-exchange"></i></button>
              </div>
            </div>
          </div>
        </div>
        {% endfor %} </div>
      <div class="row">
        <div class="col-sm-6 text-left">{{ pagination }}</div>
        <div class="col-sm-6 text-right">{{ results }}</div>
      </div>
      {% endif %}
      {% if not categories and not products %}
      <p>{{ text_empty }}</p>
      <div class="buttons">
        <div class="pull-right"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div>
      </div>
      {% endif %}
      {{ content_bottom }}</div>
    {{ column_right }}</div>
</div>
{{ footer }} 

In this way, we create an Opencart 3 testimonial module’s frontend and show the setting that we entered in the multi-instance module admin section. Similarly, we make a slider of the testimonial module. Hope you liked this post, let us know if you have any questions or suggestions, please subscribe to our YouTube Channel for Opencart video tutorials. You can also find us on Twitter and Facebook. Enjoy!

9 COMMENTS

  1. hi,
    its showing error as
    2017-08-02 10:07:51 – MOD: Modification Default

    FILE: system/engine/action.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 69

    FILE: system/engine/loader.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 77
    LINE: 151
    LINE: 168

    FILE: system/library/config.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 59

    FILE: system/library/language.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 67
    LINE: 73

    FILE: system/library/template/template.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 18

    FILE: system/library/template/twig.php
    CODE: $loader = new \Twig_Loader_Filesystem(DIR_TEMPLATE);
    LINE: 19
    —————————————————————-
    2017-08-02 10:07:53 – MOD: Modification Default

    FILE: system/engine/action.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 69

    FILE: system/engine/loader.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 77
    LINE: 151
    LINE: 168

    FILE: system/library/config.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 59

    FILE: system/library/language.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 67
    LINE: 73

    FILE: system/library/template/template.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 18

    FILE: system/library/template/twig.php
    CODE: $loader = new \Twig_Loader_Filesystem(DIR_TEMPLATE);
    LINE: 19
    —————————————————————-
    2017-08-02 10:08:11 – MOD: Modification Default

    FILE: system/engine/action.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 69

    FILE: system/engine/loader.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 77
    LINE: 151
    LINE: 168

    FILE: system/library/config.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 59

    FILE: system/library/language.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 67
    LINE: 73

    FILE: system/library/template/template.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 18

    FILE: system/library/template/twig.php
    CODE: $loader = new \Twig_Loader_Filesystem(DIR_TEMPLATE);
    LINE: 19

  2. Hello Rupak,

    I had this error.

    2018-04-14 20:18:04 – MOD: Modification Default
    —————————————————————-
    2018-04-14 20:18:53 – MOD: Modification Default

    FILE: system/engine/action.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 69

    FILE: system/engine/loader.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 77
    LINE: 151
    LINE: 168

    FILE: system/library/config.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 59

    FILE: system/library/language.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 67
    LINE: 73

    FILE: system/library/template/template.php
    REGEX: ~(require|include)(_once)?\(([^)]+)~
    LINE: 18

    FILE: system/library/template/twig.php
    CODE: $loader = new \Twig_Loader_Filesystem(DIR_TEMPLATE);
    LINE: 19

    —————————————————————-
    There is NO folder like System / Cache.
    I deleted all the files from System / Storage / Cache. But It is not working.

  3. How to uninstall? I am not able to remove the errors and its disturbing the layout of my website? I tried disabling the Extension but it is still showing in top menu and content as well.

    Please reply urgently.

  4. Hi,

    Thanks for the free mod, but i get these errors 3.0.2.0:

    MOD: All Product Show

    FILE: catalog/view/theme/default/template/common/menu.twig
    CODE: {% for category in categories %}
    LINE: 11

    FILE: catalog/controller/common/menu.php
    CODE: $data[‘categories’] = array();
    LINE: 15

    Greetings,

    Peter

  5. I have installed this module successfully but i need to know how to get the “Show all Products” tab to appear in my store menu?

    Please advise ASAP.

LEAVE A REPLY

Please enter your comment!
Please enter your name here