Coming soon products opencart free module

Products to show without the add to cart button, another Opencart free module “Coming Soon Products module  OpenCart version 2.0”. When you enabled this module, you will be able to see the products which available date is greater than today.

The module will look like below:

coming soon opencart module

Admin section will look like:

future products opencart module

Download Coming Soon Future Products free module from the link below:

Download Coming Soon Future Products free Module

Installation:

  1. Unzip the downloaded folder.
  2. Upload the files in the root folder to your server, no file is overwritten.
  3. Then activate the “Future Products” module.

Activating the “Future Products” module:

  1. After uploading files to servers, it’s time to install the “Future Products” module
  2. We are showing the “Future Products” module at the right column of the Category page (Category Layout) but you can show it wherever you like as this acts as a normal module.
  3. Go to Admin section
  4. Then click on Extensions on the left menu
  5. After that Click Modules and go to “Future Products” in the modules list
  6. Then click the Green button for the “Future Products” to install the module (see the image below)
  7. Then click the blue edit button
  8. After that, you will see the form which has the status field, select “Enabled” and then click the Save button.
  9. Your module is active and is ready to use in the layout.

Setup layout for the sidebar “Future Products” module at the right column of the home page:

  1. From the admin section go to System >> Design >> Layouts.
  2. You will see a list of layouts, from which edit the Home layout.
  3. Then click Blue add the button to add rows at module section which is shown in the image below:
  4. Second, you choose the “Future Products” in the module column and Column right in the Position column and insert the sort order as required.
  5. Then click save button

Your custom home page is ready with the “Future Products” module in the right column. Likewise, you can show in many other layouts and pages.

Codes of “Future Products” modules of the presentation layer’s controller:

Go to catalog/controller/module/futureproducts.php

<?php
class ControllerModuleFutureProducts extends Controller {
   public function index($setting) {
      $this->load->language('module/futureproducts');
      $data['heading_title'] = $setting['name'];
      $data['text_tax'] = $this->language->get('text_tax');
      $data['button_cart'] = $this->language->get('button_cart');
      $data['button_wishlist'] = $this->language->get('button_wishlist');
      $data['button_compare'] = $this->language->get('button_compare');
      $this->load->model('catalog/product');
      $this->load->model('catalog/futureproducts');
      $this->load->model('tool/image');

      $data['products'] = array();
      $filter_data = array(
         'sort'  => 'p.date_added',
         'order' => 'DESC',
         'start' => 0,
         'limit' => $setting['limit']
      );

      $results = $this->model_catalog_futureproducts->getProducts($filter_data);
      if ($results) {
         foreach ($results as $result) {
            if ($result['image']) {
               $image = $this->model_tool_image->resize($result['image'], $setting['width'], $setting['height']);
            } else {
               $image = $this->model_tool_image->resize('placeholder.png', $setting['width'], $setting['height']);
            }
            if (($this->config->get('config_customer_price') && $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')));
            } 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')));
            } else {
               $special = false;
            }
            if ($this->config->get('config_tax')) {
               $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price']);
            } else {
               $tax = false;
            }
            if ($this->config->get('config_review_status')) {
               $rating = $result['rating'];
            } else {
               $rating = false;
            }
            $data['products'][] = array(
               'product_id'  => $result['product_id'],
               'thumb'       => $image,
               'name'        => $result['name'],
               'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..',
               'price'       => $price,
               'special'     => $special,
               'tax'         => $tax,
               'rating'      => $rating,
               'href'        => $this->url->link('product/product', 'product_id=' . $result['product_id']),
            );
         }
         if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/futureproducts.tpl')) {
            return $this->load->view($this->config->get('config_template') . '/template/module/futureproducts.tpl', $data);
         } else {
            return $this->load->view('default/template/module/futureproducts.tpl', $data);
         }
      }
   }
}

Codes of “Future Products” modules of the presentation layer’s language file:

Go to catalog/language/english/module/futureproducts.php

<?php
// Heading
$_['heading_title'] = 'Future Products';
// Text
$_['text_tax']      = 'Ex Tax:';

Codes of “Account Login” modules of the presentation layer’s template file:

Go to catalog/view/theme/default/module/futureproducts.tpl

<h3><?php echo $heading_title; ?></h3>
<div class="row">
  <?php foreach ($products as $product) { ?>
  <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">
    <div class="product-thumb transition">
      <div class="image"><img src="<?php echo $product['thumb']; ?>" alt="<?php echo $product['name']; ?>" title="<?php echo $product['name']; ?>" class="img-responsive" /></div>
      <div class="caption">
        <h4><?php echo $product['name']; ?></h4>
        <p><?php echo $product['description']; ?></p>
        <?php if ($product['rating']) { ?>
        <div class="rating">
          <?php for ($i = 1; $i <= 5; $i++) { ?>
          <?php if ($product['rating'] < $i) { ?>
          <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-2x"></i></span>
          <?php } 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>
          <?php } ?>
          <?php } ?>
        </div>
        <?php } ?>
        <?php if ($product['price']) { ?>
        <p class="price">
          <?php if (!$product['special']) { ?>
          <?php echo $product['price']; ?>
          <?php } else { ?>
          <span class="price-new"><?php echo $product['special']; ?></span> <span class="price-old"><?php echo $product['price']; ?></span>
          <?php } ?>
          <?php if ($product['tax']) { ?>
          <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span>
          <?php } ?>
        </p>
        <?php } ?>
      </div>

    </div>
  </div>
  <?php } ?>
</div>

Similarly, in the admin section, we have three files for the module

  1. admin/controller/module/futureproducts.php
  2. admin/language/english/module/futureproducts.php
  3. admin/view/template/module/futureproducts.tpl

Codes of “Future Products” modules of the admin layer’s  controller file:

Go to admin/controller/module/futureproducts.php

<?php
class ControllerModuleFutureProducts extends Controller {
   private $error = array();
   public function index() {
      $this->load->language('module/futureproducts');
      $this->document->setTitle($this->language->get('heading_title'));
      $this->load->model('extension/module');
      if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
         if (!isset($this->request->get['module_id'])) {
            $this->model_extension_module->addModule('futureproducts', $this->request->post);
         } else {
            $this->model_extension_module->editModule($this->request->get['module_id'], $this->request->post);
         }
         $this->cache->delete('product');
         $this->session->data['success'] = $this->language->get('text_success');
         $this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'));
      }
      $data['heading_title'] = $this->language->get('heading_title');
      $data['text_edit'] = $this->language->get('text_edit');
      $data['text_enabled'] = $this->language->get('text_enabled');
      $data['text_disabled'] = $this->language->get('text_disabled');
      $data['entry_name'] = $this->language->get('entry_name');
      $data['entry_limit'] = $this->language->get('entry_limit');
      $data['entry_width'] = $this->language->get('entry_width');
      $data['entry_height'] = $this->language->get('entry_height');
      $data['entry_status'] = $this->language->get('entry_status');
      $data['button_save'] = $this->language->get('button_save');
      $data['button_cancel'] = $this->language->get('button_cancel');
      if (isset($this->error['warning'])) {
         $data['error_warning'] = $this->error['warning'];
      } else {
         $data['error_warning'] = '';
      }
      if (isset($this->error['name'])) {
         $data['error_name'] = $this->error['name'];
      } else {
         $data['error_name'] = '';
      }
      if (isset($this->error['width'])) {
         $data['error_width'] = $this->error['width'];
      } else {
         $data['error_width'] = '';
      }
      if (isset($this->error['height'])) {
         $data['error_height'] = $this->error['height'];
      } else {
         $data['error_height'] = '';
      }
      $data['breadcrumbs'] = array();
      $data['breadcrumbs'][] = array(
         'text' => $this->language->get('text_home'),
         'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], 'SSL')
      );
      $data['breadcrumbs'][] = array(
         'text' => $this->language->get('text_module'),
         'href' => $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')
      );
      if (!isset($this->request->get['module_id'])) {
         $data['breadcrumbs'][] = array(
            'text' => $this->language->get('heading_title'),
            'href' => $this->url->link('module/futureproducts', 'token=' . $this->session->data['token'], 'SSL')
         );
      } else {
         $data['breadcrumbs'][] = array(
            'text' => $this->language->get('heading_title'),
            'href' => $this->url->link('module/futureproducts', 'token=' . $this->session->data['token'] . '&module_id=' . $this->request->get['module_id'], 'SSL')
         );
      }
      if (!isset($this->request->get['module_id'])) {
         $data['action'] = $this->url->link('module/futureproducts', 'token=' . $this->session->data['token'], 'SSL');
      } else {
         $data['action'] = $this->url->link('module/futureproducts', 'token=' . $this->session->data['token'] . '&module_id=' . $this->request->get['module_id'], 'SSL');
      }
      $data['cancel'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');
      if (isset($this->request->get['module_id']) && ($this->request->server['REQUEST_METHOD'] != 'POST')) {
         $module_info = $this->model_extension_module->getModule($this->request->get['module_id']);
      }
      if (isset($this->request->post['name'])) {
         $data['name'] = $this->request->post['name'];
      } elseif (!empty($module_info)) {
         $data['name'] = $module_info['name'];
      } else {
         $data['name'] = '';
      }
      if (isset($this->request->post['limit'])) {
         $data['limit'] = $this->request->post['limit'];
      } elseif (!empty($module_info)) {
         $data['limit'] = $module_info['limit'];
      } else {
         $data['limit'] = 5;
      }
      if (isset($this->request->post['width'])) {
         $data['width'] = $this->request->post['width'];
      } elseif (!empty($module_info)) {
         $data['width'] = $module_info['width'];
      } else {
         $data['width'] = 200;
      }
      if (isset($this->request->post['height'])) {
         $data['height'] = $this->request->post['height'];
      } elseif (!empty($module_info)) {
         $data['height'] = $module_info['height'];
      } else {
         $data['height'] = 200;
      }
      if (isset($this->request->post['status'])) {
         $data['status'] = $this->request->post['status'];
      } elseif (!empty($module_info)) {
         $data['status'] = $module_info['status'];
      } else {
         $data['status'] = '';
      }
      $data['header'] = $this->load->controller('common/header');
      $data['column_left'] = $this->load->controller('common/column_left');
      $data['footer'] = $this->load->controller('common/footer');
      $this->response->setOutput($this->load->view('module/futureproducts.tpl', $data));
   }
   protected function validate() {
      if (!$this->user->hasPermission('modify', 'module/futureproducts')) {
         $this->error['warning'] = $this->language->get('error_permission');
      }
      if ((utf8_strlen($this->request->post['name']) < 3) || (utf8_strlen($this->request->post['name']) > 64)) {
         $this->error['name'] = $this->language->get('error_name');
      }
      if (!$this->request->post['width']) {
         $this->error['width'] = $this->language->get('error_width');
      }
      if (!$this->request->post['height']) {
         $this->error['height'] = $this->language->get('error_height');
      }
      return !$this->error;
   }
}

Codes of “Future Products” modules of the admin layer’s language file:

Go to admin/language/english/module/futureproducts.php

<?php
// Heading
$_['heading_title']    = 'Future Products';
// Text
$_['text_module']      = 'Modules';
$_['text_success']     = 'Success: You have modified Future Products module!';
$_['text_edit']        = 'Edit Future Products Module';
// Entry
$_['entry_name']       = 'Module Name';
$_['entry_limit']      = 'Limit';
$_['entry_image']      = 'Image (W x H) and Resize Type';
$_['entry_width']      = 'Width';
$_['entry_height']     = 'Height';
$_['entry_status']     = 'Status';
// Error
$_['error_permission'] = 'Warning: You do not have permission to modify Future Products module!';
$_['error_name']       = 'Module Name must be between 3 and 64 characters!';
$_['error_width']      = 'Width required!';
$_['error_height']     = 'Height required!';

Codes of “Account Login” modules of the admin layer’s template file:

Go to admin/view/module/futureproducts.tpl

<?php echo $header; ?><?php echo $column_left; ?>
<div id="content">
  <div class="page-header">
    <div class="container-fluid">
      <div class="pull-right">
        <button type="submit" form="form-bestseller" data-toggle="tooltip" title="<?php echo $button_save; ?>" class="btn btn-primary"><i class="fa fa-save"></i></button>
        <a href="<?php echo $cancel; ?>" data-toggle="tooltip" title="<?php echo $button_cancel; ?>" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
      <h1><?php echo $heading_title; ?></h1>
      <ul class="breadcrumb">
        <?php foreach ($breadcrumbs as $breadcrumb) { ?>
        <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
        <?php } ?>
      </ul>
    </div>
  </div>
  <div class="container-fluid">
    <?php if ($error_warning) { ?>
    <div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> <?php echo $error_warning; ?>
      <button type="button" class="close" data-dismiss="alert">&times;</button>
    </div>
    <?php } ?>
    <div class="panel panel-default">
      <div class="panel-heading">
        <h3 class="panel-title"><i class="fa fa-pencil"></i> <?php echo $text_edit; ?></h3>
      </div>
      <div class="panel-body">
        <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-bestseller" class="form-horizontal">
          <div class="form-group">
            <label class="col-sm-2 control-label" for="input-name"><?php echo $entry_name; ?></label>
            <div class="col-sm-10">
              <input type="text" name="name" value="<?php echo $name; ?>" placeholder="<?php echo $entry_name; ?>" id="input-name" class="form-control" />
              <?php if ($error_name) { ?>
              <div class="text-danger"><?php echo $error_name; ?></div>
              <?php } ?>
            </div>
          </div>
          <div class="form-group">
            <label class="col-sm-2 control-label" for="input-limit"><?php echo $entry_limit; ?></label>
            <div class="col-sm-10">
              <input type="text" name="limit" value="<?php echo $limit; ?>" placeholder="<?php echo $entry_limit; ?>" id="input-limit" class="form-control" />
            </div>
          </div>
          <div class="form-group">
            <label class="col-sm-2 control-label" for="input-width"><?php echo $entry_width; ?></label>
            <div class="col-sm-10">
              <input type="text" name="width" value="<?php echo $width; ?>" placeholder="<?php echo $entry_width; ?>" id="input-width" class="form-control" />
              <?php if ($error_width) { ?>
              <div class="text-danger"><?php echo $error_width; ?></div>
              <?php } ?>
            </div>
          </div>
          <div class="form-group">
            <label class="col-sm-2 control-label" for="input-height"><?php echo $entry_height; ?></label>
            <div class="col-sm-10">
              <input type="text" name="height" value="<?php echo $height; ?>" placeholder="<?php echo $entry_height; ?>" id="input-height" class="form-control" />
              <?php if ($error_height) { ?>
              <div class="text-danger"><?php echo $error_height; ?></div>
              <?php } ?>
            </div>
          </div>
          <div class="form-group">
            <label class="col-sm-2 control-label" for="input-status"><?php echo $entry_status; ?></label>
            <div class="col-sm-10">
              <select name="status" id="input-status" class="form-control">
                <?php if ($status) { ?>
                <option value="1" selected="selected"><?php echo $text_enabled; ?></option>
                <option value="0"><?php echo $text_disabled; ?></option>
                <?php } else { ?>
                <option value="1"><?php echo $text_enabled; ?></option>
                <option value="0" selected="selected"><?php echo $text_disabled; ?></option>
                <?php } ?>
              </select>
            </div>
          </div>
        </form>
      </div>
    </div>
  </div>
</div>
<?php echo $footer; ?>

Please let us know if you have any questions or concerns. Please don’t forget to post your questions or comments so that we can add extra topics and Opencart free module. You can follow us at our twitter account @rupaknpl and subscribe to our YouTube channel for opencart tutorials.

Previous articleDrupal Select Node by EntityFieldQuery by translate language
Next articleLimit number of sub-categories to show at OpenCart 2
Author of three Opencart book. The recent Opencart 4 book is at https://amzn.to/4dOlbOR

2 COMMENTS

LEAVE A REPLY

Please enter your comment!
Please enter your name here