Liên hệ quảng cáo
Liên hệ quảng cáo

Display all products opencart - Hiển thị tất cả sản phẩm trên 1 page cho Opencart 3


Phần lớn các website công ty, các site vừa và nhỏ đều thích tính năng hiển thị tất cả sản phẩm trên 1 page cho Opencart 3, bởi do thói quen người việt trước kia hay thuê các công ty thiết kế web có các chức năng như vậy. Ở Opencart cũng có thể làm chức năng y hệt các code php mà các công ty thường viết riêng.

Chức năng hiển thị toàn bộ sản phẩn được hiển thị tất cả sản phẩn, không kể thuộc danh mục nào, có sort theo tên, giá (y chang như phần category), và mặc định là hiển thị sản phẩm mới nhất lên trên cùng.



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:

Download the module:
Download Show all product module in one page opencart verions 3.0.*.*

Sau đó cài bằng trình cài đặt, nhưng nó bị lỗi (không sao) bác bạn f5 lại và làm tiếp các bước dưới đây:

Tạo 1 file xml để cài bằng ocmod hoặc bạn có thể code tay:

<?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

Theo Rupak Nepali - Webocreation


Nội dung chính
      Bài đăng mới hơn Bài đăng cũ hơn
      0 Nhận xét