Skip to main contentSkip to footer

Display all products opencart module for free version 3.0, 3.0.1.1, 3.0.1.2,3.0.1.3

Rupak Nepali
Share:
Display all  products opencart module for free version 3.0, 3.0.1.1, 3.0.1.2,3.0.1.3

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:

Files and folders of Show all Products 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!

Comments

Join the conversation and share your thoughts

Leave a Comment

Your comment will be reviewed before publishing.

Be the first to comment on this post!

Innovation

Let's Make Something Amazing Together

We always provide our best creative ideas at the highest level. Tell us about your project and we will make it work.

InnovateBringing innovative solutions to complex problems
AutomateStreamlining processes through automation
DominateLeading the market with exceptional results
Build Smarter and Launch FasterEfficient development for rapid deployment