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:

  • Now login to admin section then go to Extensions >> Extension Installer >> where you upload the allProductsShow.ocmod.zip, if you see any error then see how to solve the ocmod installation error.
  • If you get following error/issues then first solve it
    The directory catalog/controller/product is not allowed to be written to – Opencart error
  • After successful installation, go to Extensions>> Modification and click the log tab and see if some errors are showing, if error shows then you have to solve it first.
  • If no error click the refresh button
    refresh_button_while_installation
  • You are all set.
  • If you have multiple language then you have to translate the catalog/language/en-gb/product/allproduct.php and place into catalog/language/YOURLANGUAGEFOLDER/product
  • Enjoy free module.

Folder structure of display all products free OpenCart module:

Ocmod file (install.xml) of show all product free module:

<?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 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 &gt; High)';
$_['text_price_desc']   = 'Price (High &gt; 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 }} 

Let me know if you find any issues.

Thanks

Rupak Nepali

8 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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here