Home Blog

Designing for mobile: 5 best practices for UI designers

Today we are writing about the 5 best practices for UI designers, explaining the research, patterns, consistency, behavior, content, etc. that we need to take into consideration while designing for mobile.

What exactly is design consistency?

Consistency in design means connecting UI elements with identifiable and predictable actions. This is the key to a great product experience and is important for UX designers. To put it simply, you can think of it as a convention (“If you see a light gray button in a popup, expect it to cancel and close the popup”) to make it easier for users to interact with the product.

Once a user becomes a regular user, they begin to trust the product even more, which is the result of consistent design. Here are five best practices we use in our daily design to provide a consistent UI for our users.

1. Research on UI/UX design focusing on users

Nothing is more important than quality research for a consistent experience.

Don’t underestimate this or rush into it. Time and budget are always necessary considerations in product design. If either is missing, the product will not be shipped. While these are important in the process, it is important not to lose sight of the people who will use the product. In the early stages of product planning, be sure to conduct research with the user in mind.

Define user goals

Put yourself in the shoes of a new user. What do they want to achieve? How will the application help them? List your goals and refer to them throughout the UI/UX design services process.

For example, let’s say you’re building a travel app. This travel app allows users to select the duration of their vacation and find great flight and hotel deals within their budget. But this isn’t your standard travel site. It connects to your Facebook account and does its magic by planning the top 5 vacations based on the content you’ve shared. All users have to do is select the vacation plan they like the most and the rest is complete.

Here are some of the user’s goals:

  • View vacation options within a specified period
  • Compare vacation options
  • Vacation selection based on user interests
  • Stick to your vacation budget

Now that you know the breakdown of your goals, let’s design it to meet your users’ expectations.

Familiarize yourself with common UI patterns

Don’t reinvent the wheel when it comes to established UI patterns. Repeating patterns solve common UX and UI design problems.

Of course, UX designers shouldn’t “copy” all the layouts of similar applications. Patterns should be filtered and modified depending on the user’s goals.

A typical pattern in e-commerce is the product grid. This pattern allows users to easily view product information.

It’s fair to say that patterns are evolving and users are aware of standard positions for elements. Many users will agree that when you want to search, it’s common to place the search bar at the top center or to the right.

UI patterns

2. Establish design patterns for product UI/UX design consistency

One of the keys to a successful and consistent UI is for users to perform tasks with minimal action. If a task that requires four steps can easily be completed in two, the UI should always change to accommodate short task flows. UI patterns can help with this. After all, this efficiency is why it became a pattern in the first place.

Design hierarchy

Along with design patterns, having a design hierarchy established is great for UI consistency. Users instinctively pay attention to the order and priority of the elements they interact with, whether they realize it or not.

When it comes to visuals and the human eye, certain factors are prioritized over others (large size, bright colors, etc.) and how “visible” they are. Think of screen visuals as the first thing people see, the second thing they see, and the third thing they see. This allows UX designers to not only help users find primary features faster but also present secondary and tertiary features with appropriate attention.

Visual hierarchy

UI and UX design elements

An application’s UI has many design elements, each of which constitutes a building block that forms a UI pattern. Having an organized inventory and checking that elements are used properly helps maintain a consistent experience.

Branding elements

Create consistency across your brand. Typography, logos, correct image styles, brand color schemes, etc. should be reflected in your application, just like any other brand property.

Is the correct logo being used? Are the branding colors unified? Does the typeface match the others? Maintaining brand consistency ensures that new projects feel like part of the brand family, rather than a black sheep. The style guide has all the information you need.

Typography for design


The elements that have the most visual impact, like typography, should always be ‘on-brand’.

This visual element is especially important not only for the hierarchy but also for the overall UX. By changing text size, font, and placement, you can improve scannability, legibility, legibility, and even navigation.


When doing user research, you need to be familiar with UI patterns and their components. Knowing how each component behaves in and out of patterns allows UI/UX development companies to properly prioritize all elements on the screen and ensure they don’t miss anything.

“Components” are the various elements that make up a pattern, such as

  • button
  • card
  • form
  • list
  • panel
  • progress bar

For example, let’s say you’re considering adding pagination so users don’t have to scroll through long lists.

As you look at the wireframe, you notice that one list has pagination for 20 or more items, while another part of the application only has pagination for 40 or more items. Which is correct? This example shows that clearly determining guidelines is the backbone of consistency in UI/UX design.


If you’re having trouble standardizing your site or app, try using templates.

Templates can be used in most applications, allowing the layout and elements to look the same, and streamlining UI functionality across the product. Additionally, you can use the same UI template over and over again (even years later).

Content template

Pattern library and design system

It may not be visible to users, but it’s one of the keys to consistency. Many teams today have a pattern library or design system as a reference point to keep everyone on the same page. A pattern library or design system is a rulebook that everyone on your team can reference at any time. This is essential for maintaining consistency across the team.

Pattern libraries may not be as robust as design systems because they are specialized in design patterns. The design system has more information, including useful documentation on all UI patterns and various components. Pattern libraries are also a subsection of the design system.

3. Consistent behavior in your application

The ease of use of the application is undisputed. It helps users achieve their goals by saving time, avoiding headaches, and eliminating confusion. These are all requirements for customer satisfaction.

Consistent actions eliminate the need for user discovery, making task flow smoother for users. If a user knows how to use a feature in one section, they know how to use it in all sections (as long as it’s consistent).

When users explore new parts of an application, they essentially transfer past knowledge to a new context. Consistent behavior will become second nature, and eventually, users will be able to use your application without thinking. Additionally, users can minimize the learning curve by bringing these expectations to new features and aspects of the product that they have not yet used.

The placement of “Display” is not consistent. On most cards, it’s at the top, but on collection cards, it’s at the bottom. Such inconsistent placement can cause users to pause momentarily to look for the “Show” option, not to mention undermine their own natural habit-forming process.

Consistent behavior

So, what specific points should we consider when designing an interface? Throughout the process, ask yourself questions like:

  • Do all parts of the application behave the same way?
  • How do interactions work? Are they predictable and consistent?
  • How much discovery is required for the user to understand this interaction?

In the example on the left, the sorting is inconsistent. Not all columns have sorting options. Users may want to sort data on other columns. In the example to the right, all columns are sorted consistently.

4. Product content

Not only the visual elements are important, but also the text throughout the application.

Consistent copy throughout the application, especially consistent terminology, is also important. Using two different words to describe the same feature can make it appear as if they are two different features, causing the workflow to pause momentarily as users try to resolve the discrepancy.

Consistent copying can avoid such confusion.

Content structure

Content plays an important role in UI/UX design service elements, from something as simple as a navigation list to something as complex as product documentation. It’s not just the text, but how the copy text is expressed visually, such as body copy, list items, table content, etc. that is important.

Be especially careful when handling content in these areas.

  • Navigation
  • dropdown
  • form field
  • validation message
  • Tooltip
  • Chart
  • image caption
  • Error message
  • Loading screen
  • Confirmation page
  • Product support documentation

Unified content branding

Sometimes you may feel that a certain part of the application doesn’t feel right. This is often due to inconsistency in the language of the content. For example, one button may say “Logout” while another button says “Sign out”.

Even inconsistencies that are not noticeable can cause a feeling of discomfort.

For fans of the Oxford comma, even “trivial” things like how to use a comma unconsciously become a concern. When these unconscious flags are raised enough times, the user’s conscious brain begins to notice.

Other writing guidelines such as title case and voice/tone also impact the user experience. The typography of the title is more experiential, but the voice and tone are a little more challenging. The problem is exacerbated when most of your content is casual in style, which clashes with your more formal “brand language.”

Default settings for appropriate users

By considering your users’ goals up front, you can set realistic defaults and reduce the burden on your users.

If the default settings are the most popular settings, users may not need to adjust them at all. For example, date selection screens on airline and car rental sites often default to dates in the near future based on past statistics.

You should also pay attention to your form. This is because default settings can reduce user effort.

Reduce user effort

5. Consistent communication

All user interactions, such as search results, form submission messages, and error windows, are communications. For your app to be successful, you need to speak to your users and keep them informed about what’s going on. And like everything else, the method of communication must be consistent.

Status changes and useful information

Users appreciate feedback, such as a toggle that changes color to indicate “on” or “off,” or a sound effect to confirm an action is complete.

Status changes behavior

Users should not spend time checking whether an action has taken place. This is common with form submissions, and it happens in other areas as well. In these situations, it is necessary to display a quick success (or error) message.

How to let the Opencart APIs work for all IP addresses?

Opencart checks the IP address to allow the API calls, but sometimes you need to let all IP addresses do the API calls, for example, while testing the API. To allow all IP addresses to comment following the line of code at catalog/controller/api/account/login.php

//$json[‘error’] = sprintf($this->language->get(‘error_ip’), $this->request->server[‘REMOTE_ADDR’]);

if ($api_info) {
	// Check if IP is allowed
	$ip_data = [];

	$results = $this->model_account_api->getIps($api_info['api_id']);

	foreach ($results as $result) {
		$ip_data[] = trim($result['ip']);

	if (!in_array($this->request->server['REMOTE_ADDR'], $ip_data)) {
		//$json['error'] = sprintf($this->language->get('error_ip'), $this->request->server['REMOTE_ADDR']);
} else {
	$json['error'] = $this->language->get('error_key');

To learn more about Opencart API following posts help more:

How to develop an Opencart 4.0.1 custom theme? OpenCart 4 theme development tutorial

As part of the Opencart 4 theme development tutorial, We already showed you how to install Opencart 4 theme and to create Opencart 4 custom theme admin section, in today’s tutorial, we are showing you how to develop the frontend section of the Opencart 4 custom theme. You can download the custom Opencart 4 theme here.

The final files and folders structure of the Opencart 4 custom theme looks like below:

opencart 4 custom theme

When we developed the backend code, we have added the Startup code like below:

Opencart 4 custom theme Startup Theme

Taking that into consideration, you need to create the following file at extension >> webocreation4 >> catalog >> controller >> startup >> theme_standard.php, once you create the file, you can use the following lines of code.

namespace Opencart\Catalog\Controller\Extension\webocreation4\Startup;

class ThemeStandard extends \Opencart\System\Engine\Controller
    public function index(): void
        if ($this->config->get('theme_theme_standard_status')) {
            $this->event->register('view/*/before', new \Opencart\System\Engine\Action('extension/webocreation4/startup/theme_standard|event'));

    public function event(string &$route, array &$args, mixed &$output): void
        $override = [

        if (in_array($route, $override)) {
            $route = 'extension/webocreation4/' . $route;

This overrides the header of the code, now, let’s create the header.twig at the extension folder, extension >> webocreation4 >> catalog >> view >> template >> common >> header.twig. Add the following lines of code:

<!DOCTYPE html>
<html dir="{{ direction }}" lang="{{ lang }}">
  <meta charset="UTF-8"/>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>We are Here{{ title }}</title>
  <base href="{{ base }}"/>
  {% if description %}
    <meta name="description" content="{{ description }}"/>
  {% endif %}
  {% if keywords %}
    <meta name="keywords" content="{{ keywords }}"/>
  {% endif %}
  <script src="{{ jquery }}" type="text/javascript"></script>
  <link href="{{ bootstrap }}" type="text/css" rel="stylesheet" media="screen"/>
  <link href="{{ icons }}" type="text/css" rel="stylesheet"/>
  <link href="{{ stylesheet }}" type="text/css" rel="stylesheet"/>
  <link href="extension/webocreation4/catalog/view/stylesheet/stylesheet.css" type="text/css" rel="stylesheet"/>
  {% for style in styles %}
    <link href="{{ style.href }}" type="text/css" rel="{{ style.rel }}" media="{{ style.media }}"/>
  {% endfor %}
  {% for script in scripts %}
    <script src="{{ script }}" type="text/javascript"></script>
  {% endfor %}
  <script src="catalog/view/javascript/common.js" type="text/javascript"></script>
  {% for link in links %}
    <link href="{{ link.href }}" rel="{{ link.rel }}"/>
  {% endfor %}
  {% for analytic in analytics %}
    {{ analytic }}
  {% endfor %}
<nav id="top">
  <div id="alert" class="position-fixed top-0 end-0 p-3" style="z-index: 9999;"></div>
  <div class="container">
    <div class="nav float-start">
      <ul class="list-inline">
        <li class="list-inline-item">{{ currency }}</li>
        <li class="list-inline-item">{{ language }}</li>
    <div class="nav float-end">
      <ul class="list-inline">
        <li class="list-inline-item"><a href="{{ contact }}"><i class="fas fa-phone"></i></a> <span class="d-none d-md-inline">{{ telephone }}</span></li>
        <li class="list-inline-item">
          <div class="dropdown">
            <a href="{{ account }}" class="dropdown-toggle" data-bs-toggle="dropdown"><i class="fas fa-user"></i> <span class="d-none d-md-inline">{{ text_account }}</span> <i class="fas fa-caret-down"></i></a>
            <ul class="dropdown-menu dropdown-menu-right">
              {% if not logged %}
                <li><a href="{{ register }}" class="dropdown-item">{{ text_register }}</a></li>
                <li><a href="{{ login }}" class="dropdown-item">{{ text_login }}</a></li>
              {% else %}
                <li><a href="{{ account }}" class="dropdown-item">{{ text_account }}</a></li>
                <li><a href="{{ order }}" class="dropdown-item">{{ text_order }}</a></li>
                <li><a href="{{ transaction }}" class="dropdown-item">{{ text_transaction }}</a></li>
                <li><a href="{{ download }}" class="dropdown-item">{{ text_download }}</a></li>
                <li><a href="{{ logout }}" class="dropdown-item">{{ text_logout }}</a></li>
              {% endif %}
        <li class="list-inline-item"><a href="{{ wishlist }}" id="wishlist-total" title="{{ text_wishlist }}"><i class="fas fa-heart"></i> <span class="d-none d-md-inline">{{ text_wishlist }}</span></a></li>
        <li class="list-inline-item"><a href="{{ shopping_cart }}" title="{{ text_shopping_cart }}"><i class="fas fa-shopping-cart"></i> <span class="d-none d-md-inline">{{ text_shopping_cart }}</span></a></li>
        <li class="list-inline-item"><a href="{{ checkout }}" title="{{ text_checkout }}"><i class="fas fa-share"></i> <span class="d-none d-md-inline">{{ text_checkout }}</span></a></li>
  <div class="container">
    <div class="row">
      <div class="col-md-3 col-lg-4">
        <div id="logo">
          {% if logo %}
            <a href="{{ home }}"><img src="{{ logo }}" title="{{ name }}" alt="{{ name }}" class="img-fluid"/></a>
          {% else %}
            <h1><a href="{{ home }}">{{ name }}</a></h1>
          {% endif %}
      <div class="col-md-5">{{ search }}</div>
      <div id="header-cart" class="col-md-4 col-lg-3">{{ cart }}</div>
  {{ menu }}

The above code is similar to the default header code of the core Opencart code, one change is we add the custom stylesheet like below:

  <link href="extension/webocreation4/catalog/view/stylesheet/stylesheet.css" type="text/css" rel="stylesheet"/>

There are events to change the stylesheet but for now, we directly add the code like above. Now let’s create the stylesheet.css, extension >> webocreation4 >> catalog >> view >> stylesheet >>stylesheet.css. Paste the following code:

a {
  color: #f45511;
#menu {
  background-color: #f45511;
  background-image: linear-gradient(to bottom, #f45511, #f45511);
  background-repeat: repeat-x;
  border: 1px solid #f45511;
  border-color: #f45511;
  min-height: 40px;
  border-radius: 4px;

.btn-primary {
  color: #ffffff;
  text-shadow: none;
  background-image: linear-gradient(to bottom, #f45511, #f45511);
  background-repeat: repeat-x;
  border-color: #f45511;

With these codes, your custom Opencart 4 theme is ready, now you can add your CSS as per your requirement and make the website unique. Once it is active, it looks like the below, you can see the demo of the Opencart 4 custom theme

Opencart 4 custom themes

In this way, we complete a simple OpenCart 4 theme development tutorial, you can develop a new custom Opencart 4 theme and change the style, and show it on the front of Opencart 4. Hope you liked this article, please subscribe to our YouTube Channel for Opencart video tutorials. You can also find us on Webocreation Twitter and Webocreation Facebook. Please let us know if you have any questions or concerns.

Host LAMP stack in AWS Lightsail, Opencart hosting in AWS

In this hosting tutorial, we are looking into the AWS Lightsail LAMP stack, where we will host Opencart in AWS, and found out that there is no easy way to install it like WordPress or Magento even in AWS Lightsail, hope the Opencart package will be added soon, but for now, we need to use LAMP stack to host the Opencart in the AWS Lightsail. AWS Lightsail LAMP stack includes the latest versions of PHP 7+, Apache, and MySQL with phpMyAdmin and pre-configured components and PHP modules include FastCGI, ModSecurity, SQLite, Varnish, ImageMagick, xDebug, Xcache, OpenLDAP, Memcache, OAuth, PEAR, PECL, APC, GD, and cURL. All of the PHP modules and components needed for Opencart hosting are available in the LAMP stack of AWS Lightsail. 

Let’s get started with AWS LightSail

Go to https://aws.amazon.com/lightsail, and create an account or log in to your AWS account. The main AWS Lightsail dashboard page is separate from the main AWS dashboard. Or you can navigate from All services >> Compute >> Lightsail. It may look similar to the below screenshot.

AWS lightsail Dashboard

Create a LAMP Instance for Opencart hosting

In the Lightsail dashboard click the “Create Instance” button. You will see a page where you can select instance details:

Instance Location and Availability Zone: The location is auto-selected as per your geo-location but you can change it as per your hosting need. Mostly we used Virginia, Zone A (us-east-1) as our website visitors are mostly from the USA, it is upon your requirement and decides which location and Availability zone to choose.

Opencart cloud hosting

Platform instance image and Stack blueprint: We need linux/unix for the Opencart hosting so in “Select a platform” select the Linux/Unix. Then, in “Select a blueprint” select the LAMP (PHP 7)

Opencart Instance Image for AWS

SSH key pair and Automatic snapshots: Now go more below and you will see “Add launch script”, for now, we are not adding any script there. We will run scripts one by one in a command shell. If your account is new then create an SSH key pair else by default the key is selected. If you want to create something new then you can change it by clicking “Change SSH key pair”. Then check the checkbox for “Enable Automatic Snapshots” as this acts as a backup for you. If you don’t need backup then no need to check it. After you enable it, select the time you want to create the snapshot. We select 23:00 Coordinated Universal Time.

Backup setup and SSH key pair in AWS lightsail for Opencart

Choose your instance plan: For a start, for Linux/Unix-based instances, we can try the $3.50 USD Lightsail plan free for one month (up to 750 hours). Later, if we need to scale then we will scale by creating a new instance from the snapshots.

Choose your instance plan for Opencart

Identify your instance for Opencart: Now in the identify your instance, we entered the name as “Opencart_LAMP_PHP_7-2”, Key-only tags as Version1, and Key-value tags with Key as Framework and Value as Opencart. You can enter as per your need to identify your instance.

Opencart instance AWS

Now finally click the Create Instance button. It will take around 1 min to spin up your virtual machine with a LAMP stack. Then, you will see an instance in your dashboard like below:

Opencart Lamp stack

Now, click on it and you will get the details of that instance. You can see the buttons to stop and reboot. You can see the “Connect using SSH” button, Public IP and Username.

Opencart lamp instance detail

Click on the “Connect using SSH”, and you will see the command interface where you can enter your commands.

Console Command Interface Aws

Update system and PHP version in AWS lightsail

To ensure your system is up-to-date, you can run the following command:

sudo apt update -y

Check your PHP version by the following command as Opencart needs PHP version 7.3. If your PHP version is less the 7.3 than you need to upgrade to PHP 7.3+

php -v

If you are using the latest LAMP stack in AWS Lightsail then it is greater than PHP 7.4.

Opencart installation steps in the AWS Lightsail LAMP stack

Change the directory to /opt/bitnami/apache2/htdocs

cd /opt/bitnami/apache2/htdocs

When you do the ls command then you will see index.html which shows the Bitnami page. So, let’s remove it by the following command:

sudo rm index.html

Now, let’s retrieve the Opencart zip code by using wget. You can get the zip URL from the Github Opencart releases. We are using the zip link of Opencart as this is the latest version of Opencart now.

wget https://github.com/opencart/opencart/releases/download/

Let’s unzip the opencart- to backup/ folder

 unzip opencart- -d ./backup

Now, move all the files and folder at backup/upload as these are the Opencart files

 mv ./backup/upload/* .

Now, if you visit your Public IP, which is, then you will get a similar error to error no 1. So, let’s change the ownership of the files and folders to the daemon: daemon by running the following command:

sudo chown -R bitnami:daemon /opt/bitnami/apache2/htdocs/

If you want to be sure of files and folders permissions then you can run the following two commands as well:

sudo find . -type d -exec chmod 0755 {} \;
sudo find . -type f -exec chmod 0644 {} \; 

Now, see files and folders permission in AWS Lightsail for Opencart by running the command ls-lh

ls -lh

You will see the output below:

Files and Folder permission Opencart AWS

Now, if you go to public IP, then you will be able to see the first page of the Opencart installation.

Opencart Installation AWS

Create Static IP

You can start the installation but it is better to set up static IP. For that, go to the instance detail page, and in the “Networking” tab in the IP addresses section, click the button “Create static IP“.

Static IP for Opencart Instance AWS

A static IP is a fixed, public IP address that you can assign and reassign to your instances. In the Static IP location, you left it default. In the Attach to an instance, select your instance, we select “Opencart_LAMP_PHP_7-2”. In the Identify your static IP, just give a unique name.

Static IP Opencart

Now, your public IP as shown on the page, is Now open the IP in the browser then you will see step 1 of the Opencart installation page.

Create DNS Zone

As we are using an external domain registrar than Route 53 of AWS, so we need to create the DNS zone so we can add the NS1 and NS2 in the domain. Go to the Lightsail dashboard and go to the “Networking” tab. As we already set up Static IP, you will see a button to create a DNS zone, click the button “Create DNS zone”. Enter the domain you have registered, which is dpsignadvertising.com, enter the key-only tags and key-value tags as per your requirements else leave it blank.

DNS Zone setup AWS Opencart

Once you submit the “Create DNS zone” then you will get the Name Servers like the below:

Add record and name servers details for Opencart

Click “Add record”, then select A record, and enter @ in the subdomain in “Resolves to” select Static IP, our is “StaticIp-Opencart”, then click the green tick box. Similarly, again, click “Add record”, then select CNAME record, and enter www in the subdomain and in “Maps to” enter the domain name. URL, then click the green tick box.

Add Name servers to your domain registrar

Now open your domain registrar, our is onlydomains.com, in your domain change the Name Servers details like below and delegate to your AWS nameservers.

Domain name server change for Opencart URL

After some time go to your domain, for us, it took around 5min for DNS propagation, as we use dpsignadvertising.com for the domain so when we visit the dpsignadvertising.com, visit your URL and you will see the first page of the Opencart installation of the License agreement, click the “Continue” button.

In step 2, pre-installation steps, we see all green except the config files:

Opencart Pre Installation steps

So, we need to create the config.php files. You can use the following commands to change the config-dist.php to config.php

sudo mv config-dist.php config.php
sudo mv admin/config-dist.php admin/config.php 

Or, you can simply create the config.php files with the touch command:

sudo touch config.php admin/config.php

Now, change the ownership of config.php and admin/config.php

sudo chown daemon:daemon config.php admin/config.php

After the changes above, you can refresh the 2nd step of installation and click “Continue”. We reached the third step, where we need to enter the database and administration details.

Create a database, database user, and grant access

Let’s close your opened console command terminal and reconnect by clicking the “Connect using SSH” button so that you can open the new console command terminal. Then, run the command to get the root password.

cat bitnami_application_password
Get root password of Lightsail

The root password for us is bhV7CNgnVqBQ

Now, let’s run the following command to create the new database

mysql -u root -p

Then enter the above password. Then you entered it into the MySQL console.

Mysql Console

Let’s create a database, we are naming it “webocreationdb_2021”

CREATE DATABASE webocreationdb_2021;

Let’s create user “webocreationu12” with password ‘webocreation#123#dppass’ by running the command below:

CREATE USER 'webocreationu12'@'localhost' IDENTIFIED BY 'webocreation#123#dppass';

Let’s grant access to all for the user “webocreationu12” by running the command below:

GRANT ALL PRIVILEGES ON * . * TO 'webocreationu12'@'localhost';

Now, you can exit the database by typing the command exit;.


With all these, we are set for our database configuration.

  • DB Driver: Select MySQLi
  • Hostname: localhost
  • Username: webocreationu12
  • Password: webocreation#123#dppass
  • Database: webocreationdb_2021
  • Port: 3306
  • Prefix: oc_ or any as you need.
Database and Administration Configuration

You can enter the username and password for the administration

  • Username: admin (any)
  • Password: admin@2021 (any)
  • E-mail: info@webocreation.com (any)

Once, you entered all the details then click “Continue”.

In this 3rd step, you may see the blank page. So let’s debug the error. For that, let’s run the following command:

cd /opt/bitnami/apache2/htdocs/
sudo nano install/index.php

Then, in install/index.php, add the following lines of code.

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
Error Reporting PHP

After adding the code, exit the nano by clicking Ctrl + O and then Ctrl + X. After this let’s refresh step 3 http://dpsignadvertising.com/install/index.php?route=install/step_3, then you will see error 2. Let’s fix error 2.

 sudo nano install/cli_install.php

Then find the code $db->query(“SET @@session.sql_mode = ‘MYSQL40′”); and change to following:

$db-&gt;query("SET @@session.sql_mode = ''");

After the change, click Ctrl+O and Ctrl+X to exit the nano.

Similarly, do the same for install/model/install/install.php

sudo nano  install/model/install/install.php

Then find the code $db->query(“SET @@session.sql_mode = ‘MYSQL40′”); and change to following:

$db-&gt;query("SET @@session.sql_mode = ''");

After the change, click Ctrl+O and Ctrl+X to exit the nano.

Now, go and refresh the URL http://dpsignadvertising.com/install/index.php?route=install/step_3 and your Opencart installation is completed.

Installation CompleteOpencart

Now, let’s delete the install folder and other files and folders which are not needed.

sudo rm -rf install
sudo rm -rf backup
sudo rm opencart- 

With this Opencart installed, now let’s install the SSL certificate and implement the SEO URL for Opencart.

Install the free Let’s Encrypt Certificate

Install Certbot on your Lightsail instance by running the following commands:

sudo apt-get install software-properties-common -y
sudo apt-add-repository ppa:certbot/certbot -y
sudo apt-get update -y
sudo apt-get install certbot -y

Request a Let’s Encrypt SSL wildcard certificate by running the following commands, don’t forget to replace your domain where we use dpsignadvertising.com

sudo certbot -d $DOMAIN -d $WILDCARD --manual --preferred-challenges dns certonly
SSL Certificate Opencart

Before entering the Continue, you need to add the TXT record in the “Add record”. So, go to Lightsail dashboard >> Networking tab >> Click the DNS Zones for dpsignadvertising.com >> Click to Add record >> Select the TXT record >> in the Subdomain adds _acme-challenge >> in the “Responds with” add the value shown in console, ours is “XL1S8jJ9gNTUU1M7QxDBWv6_m5lC1Lf2YTE_I7iTnH4” and save it by clicking the green checkmark.

TXT record for acme challenge for SSL

Please wait for some time so that it propagates, after around 10 mins we click Continue in the Console.

Sometimes, it asks to add multiple TXT records. This must be set up in addition to the previous challenges; do not remove, replace, or undo the previous challenge tasks yet. Note that you might be asked to create multiple distinct TXT records with the same name. This is permitted by DNS standards.

Create links to the Let’s Encrypt certificate files in the Apache server directory by running the following commands:

sudo /opt/bitnami/ctlscript.sh stop
sudo mv /opt/bitnami/apache/conf/bitnami/certs/server.crt /opt/bitnami/apache/conf/bitnami/certs/server.crt.old
sudo mv /opt/bitnami/apache/conf/bitnami/certs/server.key /opt/bitnami/apache/conf/bitnami/certs/server.key.old
sudo ln -s /etc/letsencrypt/live/$DOMAIN/privkey.pem /opt/bitnami/apache/conf/bitnami/certs/server.key
sudo ln -s /etc/letsencrypt/live/$DOMAIN/fullchain.pem /opt/bitnami/apache/conf/bitnami/certs/server.crt
sudo /opt/bitnami/ctlscript.sh start

Configure HTTP to HTTPS redirection for your web application by running the following commands:

sudo vim /opt/bitnami/apache2/conf/bitnami/bitnami.conf

Add the following lines of code:

https redirect
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R,L]

After adding the code click the ESC key, and then enter:wq to save your changes, and quit Vim. Then restart the LAMP stack

sudo /opt/bitnami/ctlscript.sh restart

With these changes your SSL certificate is ready. Now you need to change a setting in Opencart admin and change the URL in the config.php and admin/config.php

cd /opt/bitnami/apache2/htdocs
sudo nano config.php

Change the define(‘HTTPS_SERVER’, ‘http://dpsignadvertising.com/’); to add https://

define('HTTPS_SERVER', 'https://dpsignadvertising.com/');

Exit it by pressing Ctrl + O to save and then enter, after that Ctrl + X to exit

Similarly, open admin/config.php and change the following to HTTPS://

define('HTTPS_SERVER', 'https://dpsignadvertising.com/admin/');
define('HTTPS_CATALOG', 'https://dpsignadvertising.com/');

Exit it by pressing Ctrl + O to save and then enter, after that Ctrl + X to exit.

Now go to https://dpsignadvertising.com/admin and System >> Settings >> Edit the store >> go to the Server tab >> in the security section select Yes for “Use SSL”. Then click Save.

SSL setting Opencart

With these steps, your SSL is activated for your domain.

Rename .htaccess.txt to .htaccess

Pull the .htaccess.txt of the Opencart and rename it to .htaccess

sudo wget https://raw.githubusercontent.com/opencart/opencart/master/upload/.htaccess.txt
sudo mv .htaccess.txt .htaccess

Read more about SEO friendly URL of Opencart

Activate the SEO URL

Once the .htaccess.txt is renamed to .htaccess, then we can activate the SEO URL at the admin. Go to admin >> System >> Settings >> Edit the Store >> Server tab >> Select Yes for “Use SEO URL”.

SEO URL Opencart

Read more for some best practices of Opencart SEO.

How to set up FileZilla SFTP in AWS Lightsail to transfer files?

In the Protocol field, you need to select SFTP – SSH File Transfer Protocol. The Host is your public IP. In Logon Type, you need to select the Key file. In the User field, you need to type bitnami. Finally in the Key file field, add the public key (where can you find the public key).

SFTP SSH setting for AWS

Then, click Connect button. You will get a list of folders, your code will be at htdocs.

SFTP AWS setup

PHPMyadmin access

Download the Lightsail SSH public key and change its permission to 0644 and make a tunnel to connect to PHPmyadmin. First, run the following command. Change the path of the key as per yours.

sudo chmod 0644 '/Applications/MAMP/htdocs/webocreation-bk/LightsailDefaultKey-us-east-1.pem'
sudo ssh -N -L 8888: -i /Applications/MAMP/htdocs/webocreation-bk/LightsailDefaultKey-us-east-1.pem bitnami@

Then, go to and you will be able to log in to the PHPMyadmin. The username is the root and you can get the password by running the following command the first time you logged in:

Where can you find the SSH public key in AWS Lightsail?

To get your SSH public key in AWS Lightsail, go to the top menu “Account“, then click on the SSH Keys tab, where you can see the lists of keys as per your region. Download the key as per your region. (How to find the region key pair of your EC2 instance?)

Find SSH key in AWS

How to find the region key pair of your EC2 instance?

Click on the instance and go to Connect tab, then at the bottom, it shows which key pair is used for this instance.

You configured this instance to use default (us-east-1) key pair.
Find AWS instance key pair

How to upgrade to a higher Lightsail package?

To upgrade your Lightsail plan to a larger instance, take a snapshot and then create a larger instance from the snapshot.

New Instances from Snapshots

Setup CDN Content Distribution in AWS

Go to Lightsail dashboard >> Networking tab >> Click the “Create distribution” button >> Then, in Choose your origin, select your Instance

CDN setup AWS

You can “Best for Dynamic Content” or Custom settings. Change the default cache behavior to cache nothing, then change the “Directory and file overrides” and give a path to the image cache.

Cache Default Behavior

In the Custom domains, first, create the SSL certificates and then enable the custom domains.

Custom Domain for CDN Opencart

You can leave the remaining setting as it is or change it as per your requirement and click the “Create Distribution” button and your CDN is set up.

Then, change A record with the AWS Cloudfront URL by removing the Static IP.

DNS Record changes Opencart. CDN

To check if the Cloudfront is working or not, just inspect the page and in the Network tab of the console, click the image and see the details. In the response, if it is serving via CloudFront URL and see the x-cache: “Hit from Cloudfront”, then CloudFront is serving the images.

Debug CDN Cloudfront Check. Opencart lightsail


Error 1: Installation error because of ownership issues

Warning: fopen(/opt/bitnami/apache/htdocs/system/storage/session//sess_bb5cfd84f55cef397e6edd17cb): failed to open stream: Permission denied in /opt/bitnami/apache/htdocs/system/library/session/file.php on line 29Warning: flock() expects parameter 1 to be resource, bool given in /opt/bitnami/apache/htdocs/system/library/session/file.php on line 31Warning: fwrite() expects parameter 1 to be resource, bool given in /opt/bitnami/apache/htdocs/system/library/session/file.php on line 33Warning: fflush() expects parameter 1 to be resource, bool given in /opt/bitnami/apache/htdocs/system/library/session/file.php on line 35Warning: flock() expects parameter 1 to be resource, bool given in /opt/bitnami/apache/htdocs/system/library/session/file.php on line 37Warning: fclose() expects parameter 1 to be resource, bool given in /opt/bitnami/apache/htdocs/system/library/session/file.php on line 39

Solution Error 1: run command ‘sudo chown daemon:daemon -R .’

Error 2: Fatal error: Uncaught Exception: Error: Variable ‘sql_mode’

Fatal error: Uncaught Exception: Error: Variable 'sql_mode' can't be set to the value of 'MYSQL40'<br />Error No: 1231<br />SET @@session.sql_mode = 'MYSQL40' in /opt/bitnami/apache/htdocs/system/library/db/mysqli.php:40 Stack trace: #0 /opt/bitnami/apache/htdocs/system/library/db.php(45): DB\MySQLi->query() #1 /opt/bitnami/apache/htdocs/install/model/install/install.php(35): DB->query() #2 /opt/bitnami/apache/htdocs/system/engine/loader.php(248): ModelInstallInstall->database() #3 /opt/bitnami/apache/htdocs/system/engine/proxy.php(47): Loader->{closure}() #4 /opt/bitnami/apache/htdocs/install/controller/install/step_3.php(11): Proxy->__call() #5 /opt/bitnami/apache/htdocs/system/engine/action.php(79): ControllerInstallStep3->index() #6 /opt/bitnami/apache/htdocs/system/engine/router.php(67): Action->execute() #7 /opt/bitnami/apache/htdocs/system/engine/router.php(56): Router->execute() #8 /opt/bitnami/apache/htdocs/system/framework.php(165): Router->dispatch() #9 /opt/bitnami/apache/htdocs/system/startup.php(104): requir in /opt/bitnami/apache/htdocs/system/library/db/mysqli.php on line 40

Solution Error 2: Remove the MYSQL40. Find the code $db->query(“SET @@session.sql_mode = ‘MYSQL40′”); and remove the MYSQL40 so that the code looks like $db->query(“SET @@session.sql_mode = ””);

Error 3: AWS LightSail 500 Internal Server Error

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at you@example.com to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.

Solution Error 3: check if the .htaccess is there and rename it to a different till you fix the .htaccess file


Permissions 0644 for '/Applications/MAMP/htdocs/webocreation-bk/LightsailDefaultKey-us-east-1.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Applications/MAMP/htdocs/webocreation-bk/LightsailDefaultKey-us-east-1.pem": bad permissions
bitnami@ Permission denied (publickey).

Solution Error 4: Give permission to the key file of 0644 by running “chmod 0644 pathofkeyfile

Error 5: Error while generating the SSL certificate

Failed authorization procedure. dpsignadvertising.com (dns-01): urn:ietf:params:acme:error:unauthorized :: The client lacks sufficient authorization :: Incorrect TXT record "oujxGkfDXUloV5IUO3__gNQA47b1wePnF4rvUcQWclM" found at _acme-challenge.dpsignadvertising.com

Solution Error 5: Check the TXT record and wait till it propagates.

Error 6: Class ‘Scssc’ not found

Fatal error: Uncaught Error: Class 'Scssc' not found in /opt/bitnami/apache/htdocs/admin/controller/startup/sass.php:9 Stack trace: #0 /opt/bitnami/apache/htdocs/system/engine/action.php(79): ControllerStartupSass->index() #1 /opt/bitnami/apache/htdocs/system/engine/router.php(67): Action->execute() #2 /opt/bitnami/apache/htdocs/system/engine/router.php(46): Router->execute() #3 /opt/bitnami/apache/htdocs/system/framework.php(165): Router->dispatch() #4 /opt/bitnami/apache/htdocs/system/startup.php(104): require_once('/opt/bitnami/ap...') #5 /opt/bitnami/apache/htdocs/admin/index.php(26): start() #6 {main} thrown in /opt/bitnami/apache/htdocs/admin/controller/startup/sass.php on line 9

Solution Error 6: Check the vendor folder and upload the right Opencart version vendor folder.

Error 7: This site can’t be reached

This site can’t be reached 
dpsignadvertising.com’s server IP address could not be found.
Checking the connection
Checking the proxy, firewall, and DNS configuration

Solution Error 7: Either you just make DNS changes, so better to wait up to 1-2 hours. Or the IP address given is not correct.

Error 8: mysqli::__construct(): (HY000/2002): Connection refused

Warning: mysqli::__construct(): (HY000/2002): Connection refused in /opt/bitnami/apache/htdocs/system/library/db/mysqli.php on line 7Warning: DB\MySQLi::__construct(): Couldn't fetch mysqli in /opt/bitnami/apache/htdocs/system/library/db/mysqli.php on line 10Warning: DB\MySQLi::__construct(): Couldn't fetch mysqli in /opt/bitnami/apache/htdocs/system/library/db/mysqli.php on line 10
Fatal error: Uncaught Exception: Error: <br />Error No: in /opt/bitnami/apache/htdocs/system/library/db/mysqli.php:10 Stack trace: #0 /opt/bitnami/apache/htdocs/storage12/modification/system/library/db.php(35): DB\MySQLi->__construct() #1 /opt/bitnami/apache/htdocs/system/framework.php(80): DB->__construct() #2 /opt/bitnami/apache/htdocs/system/startup.php(104): require_once('/opt/bitnami/ap...') #3 /opt/bitnami/apache/htdocs/index.php(31): start() #4 {main} thrown in /opt/bitnami/apache/htdocs/system/library/db/mysqli.php on line 10

Solution Error 8: Make sure your database server is not down.

In this way, you can set up the Opencart in AWS Lightsail. You can see how to set up Opencart in google cloud. Hope you liked this opencart tutorial, please subscribe to our YouTube Channel for Opencart video tutorials. You can also find us on Twitter and Facebook.



How to create Opencart 4 modules or extensions?

With the launch of Opencart 4, there are changes in extensions or module management and code structure so we are creating Opencart 4 extension tutorial to create Opencart 4 modules or extensions and try to understand the flow and ways to develop Opencart 4 extensions. We will create a new module called “showallproducts” and others will be similar to it. Check Opencart 4 demo.

Files and folder structure of the Opencart module

The modules are in the extension folder in Opencart 4, now it is available in the root folder. When you see in the extension folder, by default there is an opencart folder and index.html, in the opencart folder, you will see all default extensions provided by default.

Files and folder structure opencart extensions
  • The file name should be between 1 letter and up to 128 letters.
  • The filename should end with “.ocmod.zip”
  • The uploaded file should not exceed the max file size: of 32 megabytes
  • Opencart extension installer checks if the file already exists, if it exists then it will throw an error.
  • It validates if the file can be opened and if there is an install.json that can be read. So, every extension should have install.json

How to create an install.json file in the Opencart extension?

Create a folder, in our example, it is “showallproducts” and inside it create a file name called install.json. It supports the following keys: name, version, author, and link. 

As per our module, the following is an example:

	"name": "Show all Products OC 4",
	"version": "0.1",
	"author": "Rupak Nepali",
	"link": "https://webocreation.com"

Once install.json is inside the folder, you can zip it and name it that ends with .ocmod.zip, then uploads it from the Opencart extension installer.

For our example we named it show_all_products.ocmod.zip and uploaded in Admin >> Extensions >> Installer and click the upload blue button and we get details like the below:

Opencart module extension installer

While uploading, if you don’t get anything then you need to go to the storage folder and inside it see the marketplace folder and remove the existing zip file.

With this, you are ready to start coding and adding files for your module. Now, in our next opencart tutorial we will create all the files needed for the showallproducts module and start adding code to install it and create an admin form and show the link in the header when activated.

It will contain files and folders like the below:

Files and folder Opencart module

Looks like we need to create a unique filename as well so for example as we are creating these files so our extension will be like webocreation_showallproducts.php and similar naming conventions.

In this Opencart 4 tutorial, we set up install.json for the opencart module and upload it, and we are ready to install it and create a way to add the functionalities. Please don’t forget to post your questions or comments so that we can add extra topics. You can follow us at our Twitter account @rupaknpl, and subscribe to our YouTube channel for an opencart tutorial. Click to see all Opencart 4 tutorials.

How to upgrade from Opencart to Opencart and minor versions of 4

We started upgrading some of our clients to Opencart from Opencart Here are the steps that we follow and some of the issues that we face and their solution to fix the issue.

Before upgrading:

Undertake a meticulous pre-upgrade assessment to identify and address potential issues

  • Backup Backup Backup – database, files and folders, and images, if you are using downloads, don’t forget to backup both the system and the storage download.
  • Review system requirements – mainly Opencart 4 needs PHP 8.0+, so make sure your hosting or servers can be upgraded to PHP 8.0+
  • Plan and check for extensions and themes – ensure all extensions, modules, and themes are available in Opencart version 4 to fulfill your requirements. Many modules are still not upgraded to Opencart 4 version.
  • Review the custom modifications that are added to OpenCart 3 installation, you’ll need to upgrade those changes to OpenCart 4. All OCMOD customization will not work on Opencart 4. Either you have to convert it to an event system or install the VqMod in Opencart 4 and change the OCMOD to VqMod
  • Prepare the staging/testing: Set up a staging environment and test the upgrade process there first. This allows you to identify and resolve any issues before applying the changes to your live store.

Backup of all things before you start and make sure twice everythinG is Backed up

While upgrading:

First, do everything in the development or testing environment and then only do the same thing to live servers. Download the Opencart version, this is the latest while we were upgrading. Then, extract the zip file and upload all of the files inside the Upload folder to your server. In some of the cases we use SFTP, this is a way we do this if we have not set up any CI/CD for clients else we follow Continuous integration and continuous deployment.

File override while Opencart Upgrade

Once you upload all the files and folders, now run YOURWEBSITEURL/install, then you will see like below:

Opencart 4 admin url to upgrade

Patch one and Patch two are easily applied.

Opencart Upgrade process

We started seeing errors in Patch Third. We see errors like below:
Error one:

SyntaxError: Unexpected token '<', "<b>Excepti"... is not valid JSON
<b>Exception</b>: Error: Table storage engine for '#sql-263_175e' doesn't have this option<br/>Error No: 1031<br/>ALTER TABLE `oc_product_discount` ENGINE = `InnoDB` in <b>/home/rupaknpl/merging/system/library/db/mysqli.php</b> on line <b>68</b>
Opencart upgrade steps error

Maybe this issue is only for us in one client, some of their database tables were in InnoDB and some were in MyISAM. So to fix it we ran the following query.

AND table_schema = 'YOUR_DATABASE_NAME';

Successful upgrade

After the above fix, we ran YOURWEBSITEURL/install again and it went smoothly. The 3, 4,5,6, and 7 are also quick but 8 takes some time, so just have some patience and wait, 9 was quick overall time taken was around 7 mins. If you guys see any console errors that we did not mention above then please let us know and we can help you to fix them.

Upgrade process completion

Once the upgrade is complete.

Admin login issue

Now we tried to go to the admin section. We were not able to log in with the old username and password, so we have to insert the username and password from SQL. Here is the SQL that we use:

INSERT INTO `oc_user` (`user_group_id`,`username`,`password`,`firstname`,`lastname`,`email`,`image`,`code`,`ip`,`status`,`date_added`) VALUES (1,'admin','$2y$10$3Tofs9U7zGWhbQ67l7uageuxOjo6zU88pRESFZaxY.D3Ms4RSSIAu','John','Doe','youremail@gmail.com','','','::1',1,'2022-06-04 11:39:23');

With the run of the above query, now you can log in with username: admin and password: admin123. After you logged in you can remove the /install folder, set the new storage folder, and rename the admin folder to your desired name.

Missing extensions:

In one of our clients, we saw all the installed extensions are missing, install Extensions are empty like below:

Missing extension in Opencart 4

We upload all the files and folders inside the /extension folder of the Opencart 4 zip extract. Then we ran the following queries to add all the opencart extension paths.

INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (1,1,'opencart');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (2,1,'opencart/admin');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (3,1,'opencart/admin/controller');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (4,1,'opencart/admin/controller/analytics');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (5,1,'opencart/admin/controller/analytics/index.html');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (6,1,'opencart/admin/controller/captcha');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (7,1,'opencart/admin/controller/captcha/basic.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (8,1,'opencart/admin/controller/currency');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (9,1,'opencart/admin/controller/currency/ecb.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (10,1,'opencart/admin/controller/currency/fixer.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (11,1,'opencart/admin/controller/dashboard');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (12,1,'opencart/admin/controller/dashboard/activity.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (13,1,'opencart/admin/controller/dashboard/chart.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (14,1,'opencart/admin/controller/dashboard/customer.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (15,1,'opencart/admin/controller/dashboard/map.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (16,1,'opencart/admin/controller/dashboard/online.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (17,1,'opencart/admin/controller/dashboard/order.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (18,1,'opencart/admin/controller/dashboard/recent.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (19,1,'opencart/admin/controller/dashboard/sale.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (20,1,'opencart/admin/controller/feed');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (21,1,'opencart/admin/controller/feed/index.html');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (22,1,'opencart/admin/controller/fraud');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (23,1,'opencart/admin/controller/fraud/ip.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (24,1,'opencart/admin/controller/module');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (25,1,'opencart/admin/controller/module/account.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (26,1,'opencart/admin/controller/module/banner.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (27,1,'opencart/admin/controller/module/bestseller.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (28,1,'opencart/admin/controller/module/category.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (29,1,'opencart/admin/controller/module/featured.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (30,1,'opencart/admin/controller/module/filter.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (31,1,'opencart/admin/controller/module/html.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (32,1,'opencart/admin/controller/module/information.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (33,1,'opencart/admin/controller/module/latest.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (34,1,'opencart/admin/controller/module/special.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (35,1,'opencart/admin/controller/module/store.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (36,1,'opencart/admin/controller/payment');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (37,1,'opencart/admin/controller/payment/bank_transfer.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (38,1,'opencart/admin/controller/payment/cheque.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (39,1,'opencart/admin/controller/payment/cod.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (40,1,'opencart/admin/controller/payment/free_checkout.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (41,1,'opencart/admin/controller/report');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (42,1,'opencart/admin/controller/report/customer_activity.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (43,1,'opencart/admin/controller/report/customer_order.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (44,1,'opencart/admin/controller/report/customer_reward.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (45,1,'opencart/admin/controller/report/customer_search.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (46,1,'opencart/admin/controller/report/customer_transaction.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (47,1,'opencart/admin/controller/report/customer_subscription.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (48,1,'opencart/admin/controller/report/marketing.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (49,1,'opencart/admin/controller/report/product_purchased.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (50,1,'opencart/admin/controller/report/product_viewed.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (51,1,'opencart/admin/controller/report/sale_coupon.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (52,1,'opencart/admin/controller/report/sale_order.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (53,1,'opencart/admin/controller/report/sale_return.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (54,1,'opencart/admin/controller/report/sale_shipping.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (55,1,'opencart/admin/controller/report/sale_tax.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (56,1,'opencart/admin/controller/shipping');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (57,1,'opencart/admin/controller/shipping/flat.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (58,1,'opencart/admin/controller/shipping/free.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (59,1,'opencart/admin/controller/shipping/item.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (60,1,'opencart/admin/controller/shipping/pickup.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (61,1,'opencart/admin/controller/shipping/weight.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (62,1,'opencart/admin/controller/theme');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (63,1,'opencart/admin/controller/theme/basic.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (64,1,'opencart/admin/controller/total');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (65,1,'opencart/admin/controller/total/coupon.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (66,1,'opencart/admin/controller/total/credit.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (67,1,'opencart/admin/controller/total/handling.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (68,1,'opencart/admin/controller/total/low_order_fee.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (69,1,'opencart/admin/controller/total/reward.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (70,1,'opencart/admin/controller/total/shipping.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (71,1,'opencart/admin/controller/total/sub_total.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (72,1,'opencart/admin/controller/total/tax.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (73,1,'opencart/admin/controller/total/total.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (74,1,'opencart/admin/controller/total/voucher.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (75,1,'opencart/admin/language');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (76,1,'opencart/admin/language/en-gb');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (77,1,'opencart/admin/language/en-gb/captcha');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (78,1,'opencart/admin/language/en-gb/captcha/basic.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (79,1,'opencart/admin/language/en-gb/currency');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (80,1,'opencart/admin/language/en-gb/currency/ecb.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (81,1,'opencart/admin/language/en-gb/currency/fixer.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (82,1,'opencart/admin/language/en-gb/dashboard');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (83,1,'opencart/admin/language/en-gb/dashboard/activity.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (84,1,'opencart/admin/language/en-gb/dashboard/chart.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (85,1,'opencart/admin/language/en-gb/dashboard/customer.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (86,1,'opencart/admin/language/en-gb/dashboard/map.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (87,1,'opencart/admin/language/en-gb/dashboard/online.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (88,1,'opencart/admin/language/en-gb/dashboard/order.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (89,1,'opencart/admin/language/en-gb/dashboard/recent.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (90,1,'opencart/admin/language/en-gb/dashboard/sale.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (91,1,'opencart/admin/language/en-gb/fraud');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (92,1,'opencart/admin/language/en-gb/fraud/ip.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (93,1,'opencart/admin/language/en-gb/module');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (94,1,'opencart/admin/language/en-gb/module/account.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (95,1,'opencart/admin/language/en-gb/module/banner.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (96,1,'opencart/admin/language/en-gb/module/bestseller.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (97,1,'opencart/admin/language/en-gb/module/category.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (98,1,'opencart/admin/language/en-gb/module/featured.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (99,1,'opencart/admin/language/en-gb/module/filter.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (100,1,'opencart/admin/language/en-gb/module/html.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (101,1,'opencart/admin/language/en-gb/module/information.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (102,1,'opencart/admin/language/en-gb/module/latest.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (103,1,'opencart/admin/language/en-gb/module/special.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (104,1,'opencart/admin/language/en-gb/module/store.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (105,1,'opencart/admin/language/en-gb/payment');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (106,1,'opencart/admin/language/en-gb/payment/bank_transfer.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (107,1,'opencart/admin/language/en-gb/payment/cheque.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (108,1,'opencart/admin/language/en-gb/payment/cod.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (109,1,'opencart/admin/language/en-gb/payment/free_checkout.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (110,1,'opencart/admin/language/en-gb/report');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (111,1,'opencart/admin/language/en-gb/report/customer_activity.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (112,1,'opencart/admin/language/en-gb/report/customer_order.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (113,1,'opencart/admin/language/en-gb/report/customer_reward.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (114,1,'opencart/admin/language/en-gb/report/customer_search.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (115,1,'opencart/admin/language/en-gb/report/customer_transaction.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (116,1,'opencart/admin/language/en-gb/report/customer_subscription.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (117,1,'opencart/admin/language/en-gb/report/marketing.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (118,1,'opencart/admin/language/en-gb/report/product_purchased.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (119,1,'opencart/admin/language/en-gb/report/product_viewed.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (120,1,'opencart/admin/language/en-gb/report/sale_coupon.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (121,1,'opencart/admin/language/en-gb/report/sale_order.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (122,1,'opencart/admin/language/en-gb/report/sale_return.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (123,1,'opencart/admin/language/en-gb/report/sale_shipping.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (124,1,'opencart/admin/language/en-gb/report/sale_tax.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (125,1,'opencart/admin/language/en-gb/shipping');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (126,1,'opencart/admin/language/en-gb/shipping/flat.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (127,1,'opencart/admin/language/en-gb/shipping/free.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (128,1,'opencart/admin/language/en-gb/shipping/item.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (129,1,'opencart/admin/language/en-gb/shipping/pickup.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (130,1,'opencart/admin/language/en-gb/shipping/weight.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (131,1,'opencart/admin/language/en-gb/theme');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (132,1,'opencart/admin/language/en-gb/theme/basic.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (133,1,'opencart/admin/language/en-gb/total');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (134,1,'opencart/admin/language/en-gb/total/coupon.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (135,1,'opencart/admin/language/en-gb/total/credit.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (136,1,'opencart/admin/language/en-gb/total/handling.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (137,1,'opencart/admin/language/en-gb/total/low_order_fee.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (138,1,'opencart/admin/language/en-gb/total/reward.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (139,1,'opencart/admin/language/en-gb/total/shipping.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (140,1,'opencart/admin/language/en-gb/total/sub_total.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (141,1,'opencart/admin/language/en-gb/total/tax.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (142,1,'opencart/admin/language/en-gb/total/total.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (143,1,'opencart/admin/language/en-gb/total/voucher.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (144,1,'opencart/admin/model');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (145,1,'opencart/admin/model/dashboard');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (146,1,'opencart/admin/model/dashboard/map.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (147,1,'opencart/admin/model/fraud');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (148,1,'opencart/admin/model/fraud/ip.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (149,1,'opencart/admin/model/payment');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (150,1,'opencart/admin/model/report');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (151,1,'opencart/admin/model/report/activity.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (152,1,'opencart/admin/model/report/coupon.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (153,1,'opencart/admin/model/report/customer.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (154,1,'opencart/admin/model/report/customer_transaction.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (155,1,'opencart/admin/model/report/marketing.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (156,1,'opencart/admin/model/report/product.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (157,1,'opencart/admin/model/report/returns.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (158,1,'opencart/admin/model/report/sale.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (159,1,'opencart/admin/view');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (160,1,'opencart/admin/view/template');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (161,1,'opencart/admin/view/template/captcha');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (162,1,'opencart/admin/view/template/captcha/basic.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (163,1,'opencart/admin/view/template/currency');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (164,1,'opencart/admin/view/template/currency/ecb.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (165,1,'opencart/admin/view/template/currency/fixer.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (166,1,'opencart/admin/view/template/dashboard');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (167,1,'opencart/admin/view/template/dashboard/activity_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (168,1,'opencart/admin/view/template/dashboard/activity_info.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (169,1,'opencart/admin/view/template/dashboard/chart_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (170,1,'opencart/admin/view/template/dashboard/chart_info.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (171,1,'opencart/admin/view/template/dashboard/customer_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (172,1,'opencart/admin/view/template/dashboard/customer_info.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (173,1,'opencart/admin/view/template/dashboard/map_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (174,1,'opencart/admin/view/template/dashboard/map_info.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (175,1,'opencart/admin/view/template/dashboard/online_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (176,1,'opencart/admin/view/template/dashboard/online_info.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (177,1,'opencart/admin/view/template/dashboard/order_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (178,1,'opencart/admin/view/template/dashboard/order_info.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (179,1,'opencart/admin/view/template/dashboard/recent_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (180,1,'opencart/admin/view/template/dashboard/recent_info.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (181,1,'opencart/admin/view/template/dashboard/sale_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (182,1,'opencart/admin/view/template/dashboard/sale_info.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (183,1,'opencart/admin/view/template/fraud');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (184,1,'opencart/admin/view/template/fraud/ip.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (185,1,'opencart/admin/view/template/fraud/ip_ip.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (186,1,'opencart/admin/view/template/module');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (187,1,'opencart/admin/view/template/module/account.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (188,1,'opencart/admin/view/template/module/banner.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (189,1,'opencart/admin/view/template/module/bestseller.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (190,1,'opencart/admin/view/template/module/category.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (191,1,'opencart/admin/view/template/module/featured.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (192,1,'opencart/admin/view/template/module/filter.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (193,1,'opencart/admin/view/template/module/html.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (194,1,'opencart/admin/view/template/module/information.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (195,1,'opencart/admin/view/template/module/latest.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (196,1,'opencart/admin/view/template/module/special.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (197,1,'opencart/admin/view/template/module/store.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (198,1,'opencart/admin/view/template/payment');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (199,1,'opencart/admin/view/template/payment/bank_transfer.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (200,1,'opencart/admin/view/template/payment/cheque.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (201,1,'opencart/admin/view/template/payment/cod.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (202,1,'opencart/admin/view/template/payment/free_checkout.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (203,1,'opencart/admin/view/template/report');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (204,1,'opencart/admin/view/template/report/customer_activity.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (205,1,'opencart/admin/view/template/report/customer_activity_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (206,1,'opencart/admin/view/template/report/customer_order.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (207,1,'opencart/admin/view/template/report/customer_order_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (208,1,'opencart/admin/view/template/report/customer_reward.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (209,1,'opencart/admin/view/template/report/customer_reward_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (210,1,'opencart/admin/view/template/report/customer_search.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (211,1,'opencart/admin/view/template/report/customer_search_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (212,1,'opencart/admin/view/template/report/customer_transaction.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (213,1,'opencart/admin/view/template/report/customer_transaction_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (214,1,'opencart/admin/view/template/report/customer_subscription.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (215,1,'opencart/admin/view/template/report/customer_subscription_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (216,1,'opencart/admin/view/template/report/marketing.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (217,1,'opencart/admin/view/template/report/marketing_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (218,1,'opencart/admin/view/template/report/product_purchased.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (219,1,'opencart/admin/view/template/report/product_purchased_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (220,1,'opencart/admin/view/template/report/product_viewed.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (221,1,'opencart/admin/view/template/report/product_viewed_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (222,1,'opencart/admin/view/template/report/sale_coupon.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (223,1,'opencart/admin/view/template/report/sale_coupon_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (224,1,'opencart/admin/view/template/report/sale_order.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (225,1,'opencart/admin/view/template/report/sale_order_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (226,1,'opencart/admin/view/template/report/sale_return.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (227,1,'opencart/admin/view/template/report/sale_return_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (228,1,'opencart/admin/view/template/report/sale_shipping.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (229,1,'opencart/admin/view/template/report/sale_shipping_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (230,1,'opencart/admin/view/template/report/sale_tax.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (231,1,'opencart/admin/view/template/report/sale_tax_form.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (232,1,'opencart/admin/view/template/shipping');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (233,1,'opencart/admin/view/template/shipping/flat.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (234,1,'opencart/admin/view/template/shipping/free.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (235,1,'opencart/admin/view/template/shipping/item.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (236,1,'opencart/admin/view/template/shipping/pickup.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (237,1,'opencart/admin/view/template/shipping/weight.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (238,1,'opencart/admin/view/template/theme');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (239,1,'opencart/admin/view/template/theme/basic.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (240,1,'opencart/admin/view/template/total');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (241,1,'opencart/admin/view/template/total/coupon.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (242,1,'opencart/admin/view/template/total/credit.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (243,1,'opencart/admin/view/template/total/handling.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (244,1,'opencart/admin/view/template/total/low_order_fee.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (245,1,'opencart/admin/view/template/total/reward.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (246,1,'opencart/admin/view/template/total/shipping.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (247,1,'opencart/admin/view/template/total/sub_total.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (248,1,'opencart/admin/view/template/total/tax.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (249,1,'opencart/admin/view/template/total/total.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (250,1,'opencart/admin/view/template/total/voucher.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (251,1,'opencart/catalog');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (252,1,'opencart/catalog/controller');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (253,1,'opencart/catalog/controller/captcha');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (254,1,'opencart/catalog/controller/captcha/basic.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (255,1,'opencart/catalog/controller/module');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (256,1,'opencart/catalog/controller/module/account.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (257,1,'opencart/catalog/controller/module/banner.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (258,1,'opencart/catalog/controller/module/bestseller.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (259,1,'opencart/catalog/controller/module/category.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (260,1,'opencart/catalog/controller/module/featured.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (261,1,'opencart/catalog/controller/module/filter.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (262,1,'opencart/catalog/controller/module/html.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (263,1,'opencart/catalog/controller/module/information.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (264,1,'opencart/catalog/controller/module/latest.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (265,1,'opencart/catalog/controller/module/special.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (266,1,'opencart/catalog/controller/module/store.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (267,1,'opencart/catalog/controller/payment');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (268,1,'opencart/catalog/controller/payment/bank_transfer.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (269,1,'opencart/catalog/controller/payment/cheque.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (270,1,'opencart/catalog/controller/payment/cod.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (271,1,'opencart/catalog/controller/payment/free_checkout.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (272,1,'opencart/catalog/controller/total');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (273,1,'opencart/catalog/controller/total/coupon.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (274,1,'opencart/catalog/controller/total/reward.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (275,1,'opencart/catalog/controller/total/shipping.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (276,1,'opencart/catalog/controller/total/voucher.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (277,1,'opencart/catalog/language');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (278,1,'opencart/catalog/language/en-gb');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (279,1,'opencart/catalog/language/en-gb/captcha');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (280,1,'opencart/catalog/language/en-gb/captcha/basic.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (281,1,'opencart/catalog/language/en-gb/module');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (282,1,'opencart/catalog/language/en-gb/module/account.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (283,1,'opencart/catalog/language/en-gb/module/bestseller.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (284,1,'opencart/catalog/language/en-gb/module/category.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (285,1,'opencart/catalog/language/en-gb/module/featured.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (286,1,'opencart/catalog/language/en-gb/module/filter.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (287,1,'opencart/catalog/language/en-gb/module/information.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (288,1,'opencart/catalog/language/en-gb/module/latest.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (289,1,'opencart/catalog/language/en-gb/module/special.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (290,1,'opencart/catalog/language/en-gb/module/store.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (291,1,'opencart/catalog/language/en-gb/payment');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (292,1,'opencart/catalog/language/en-gb/payment/bank_transfer.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (293,1,'opencart/catalog/language/en-gb/payment/cheque.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (294,1,'opencart/catalog/language/en-gb/payment/cod.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (295,1,'opencart/catalog/language/en-gb/payment/free_checkout.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (296,1,'opencart/catalog/language/en-gb/shipping');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (297,1,'opencart/catalog/language/en-gb/shipping/flat.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (298,1,'opencart/catalog/language/en-gb/shipping/free.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (299,1,'opencart/catalog/language/en-gb/shipping/item.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (300,1,'opencart/catalog/language/en-gb/shipping/pickup.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (301,1,'opencart/catalog/language/en-gb/shipping/weight.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (302,1,'opencart/catalog/language/en-gb/total');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (303,1,'opencart/catalog/language/en-gb/total/coupon.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (304,1,'opencart/catalog/language/en-gb/total/credit.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (305,1,'opencart/catalog/language/en-gb/total/handling.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (306,1,'opencart/catalog/language/en-gb/total/low_order_fee.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (307,1,'opencart/catalog/language/en-gb/total/reward.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (308,1,'opencart/catalog/language/en-gb/total/shipping.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (309,1,'opencart/catalog/language/en-gb/total/sub_total.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (310,1,'opencart/catalog/language/en-gb/total/total.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (311,1,'opencart/catalog/language/en-gb/total/voucher.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (312,1,'opencart/catalog/model');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (313,1,'opencart/catalog/model/fraud');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (314,1,'opencart/catalog/model/fraud/ip.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (315,1,'opencart/catalog/model/payment');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (316,1,'opencart/catalog/model/payment/bank_transfer.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (317,1,'opencart/catalog/model/payment/cheque.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (318,1,'opencart/catalog/model/payment/cod.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (319,1,'opencart/catalog/model/payment/free_checkout.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (320,1,'opencart/catalog/model/shipping');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (321,1,'opencart/catalog/model/shipping/flat.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (322,1,'opencart/catalog/model/shipping/free.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (323,1,'opencart/catalog/model/shipping/item.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (324,1,'opencart/catalog/model/shipping/pickup.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (325,1,'opencart/catalog/model/shipping/weight.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (326,1,'opencart/catalog/model/total');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (327,1,'opencart/catalog/model/total/coupon.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (328,1,'opencart/catalog/model/total/credit.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (329,1,'opencart/catalog/model/total/handling.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (330,1,'opencart/catalog/model/total/low_order_fee.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (331,1,'opencart/catalog/model/total/reward.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (332,1,'opencart/catalog/model/total/shipping.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (333,1,'opencart/catalog/model/total/sub_total.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (334,1,'opencart/catalog/model/total/tax.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (335,1,'opencart/catalog/model/total/total.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (336,1,'opencart/catalog/model/total/voucher.php');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (337,1,'opencart/catalog/view');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (338,1,'opencart/catalog/view/template');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (339,1,'opencart/catalog/view/template/captcha');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (340,1,'opencart/catalog/view/template/captcha/basic.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (341,1,'opencart/catalog/view/template/module');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (342,1,'opencart/catalog/view/template/module/account.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (343,1,'opencart/catalog/view/template/module/banner.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (344,1,'opencart/catalog/view/template/module/bestseller.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (345,1,'opencart/catalog/view/template/module/category.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (346,1,'opencart/catalog/view/template/module/featured.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (347,1,'opencart/catalog/view/template/module/filter.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (348,1,'opencart/catalog/view/template/module/html.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (349,1,'opencart/catalog/view/template/module/information.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (350,1,'opencart/catalog/view/template/module/latest.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (351,1,'opencart/catalog/view/template/module/special.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (352,1,'opencart/catalog/view/template/module/store.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (353,1,'opencart/catalog/view/template/payment');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (354,1,'opencart/catalog/view/template/payment/bank_transfer.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (355,1,'opencart/catalog/view/template/payment/cheque.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (356,1,'opencart/catalog/view/template/payment/cod.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (357,1,'opencart/catalog/view/template/payment/free_checkout.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (358,1,'opencart/catalog/view/template/total');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (359,1,'opencart/catalog/view/template/total/coupon.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (360,1,'opencart/catalog/view/template/total/reward.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (361,1,'opencart/catalog/view/template/total/shipping.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (362,1,'opencart/catalog/view/template/total/voucher.twig');
INSERT INTO `oc_extension_path` (`extension_path_id`,`extension_install_id`,`path`) VALUES (363,1,'opencart/install.json');

Likewise, to fix the above issue we ran another query to insert the extension install.

INSERT INTO `oc_extension_install` (`extension_install_id`,`extension_id`,`extension_download_id`,`name`,`code`,`version`,`author`,`link`,`status`,`date_added`) VALUES (1,0,0,'OpenCart Default Extensions','opencart','1.0','OpenCart Ltd','http://www.opencart.com',1,'2020-08-29 15:35:39');

With those above three steps, we were able to see all the extensions again.

Admin Dashboard is empty

All of the admin dashboard reports were missing.

Empty dashboard

To add reports in the admin dashboard of Opencart 4, we follow the instructions on this blog:

SEO URL changes in Opencart 4

Database SEO table oc_seo_url was not updated or transferred fully as the Opencart version 4 change add a new table structure. The oc_seo_url table is fixed by running the following queries:

UPDATE oc_seo_url
  key = SUBSTRING_INDEX(query, '=', 1),
  value = SUBSTRING_INDEX(query, '=', -1);
SEO table changes

Install Extensions

After upgrading, make sure you install all the extensions again so that you don’t conflict with any other things.

After upgrade

Functionality Testing: Thoroughly test all website functionalities, check for add to cart, all pages like home, product, category, cart, checkout, etc, sign up, log in, forget the password, etc.

Extensions Testing: Check all extensions are installed, and make sure you check the Order Totals, payments, shipping, modules, etc.

Checkout Page: Opencart 4 has one-page checkout by default so check if it is showing the right shipping address, payment address, shipping methods, and payment methods and see if the totals are correct.

Coupon Functionalities: Check for coupon functionalities.

SEO Review: Verify that SEO elements such as meta titles, meta descriptions, header tags, and URLs are showing correctly on the page. See the top 25 opencart SEO best practices.

Security Audit: Perform a security audit to identify and address any potential vulnerabilities.

Mail Function: Don’t forget to check the email functionalities.

Product Feeds: Enabled your feed and sitemap. And don’t forget to submit your sitemap to Google Webmaster.

Test Thoroughly: After upgrading, test your store to ensure that all functionalities, extensions, and themes are working correctly. Check for any broken links (we mostly check with https://www.brokenlinkcheck.com), missing images, or other issues.

Monitor Performance: After the upgrade, keep an eye on your store’s performance, and address any performance issues.

Analytics and Tracking: Check your analytics and tracking codes.

Please take a look at OpenCart Site Launch Checklist, we have listed most of the functionality to test before launch.


In this way, you can upgrade Opencart from version 3 to 4, it is a complex process, and it’s common for some issues to surface post-upgrade. Being proactive in testing, monitoring, and addressing issues will help ensure that your website remains functional and user-friendly after the upgrade.  Upgrade your OpenCart e-commerce platform effortlessly with our professional services. Enjoy enhanced features, improved security, and a smoother user experience. Contact us for a seamless upgrade process. Please let us know if you faced any problems while upgrading Opencart and have questions or concerns so that we can help you out, similarly, let us know if there are other best solutions. Till then please subscribe to our YouTube Channel for Opencart video tutorials. You can also find us on Twitter and Facebook.

Opencart API, Opencart 4 and 3 API documentation for developer, postman

Opencart API documentation for the developer: supports output formats that return a JSON response. Output formats are defined by specifying the output request parameter. With opencart API we can perform CRUD functionalities.

Opencart 4 API documentation

In Opencart 4 there are some changes on the API endpoints, here is the login API endpoint /index.php?route=api/account/login:

Here is the POSTMAN testing:


Here are the API username and API key in the Opencart admin.

Opencart API username key

IP Addresses to allow to access the Opencart API endpoints:

Opencart API IP addresses

If you are not using the master branch and using the Opencart then your endpoints may not work, and looking at the code there is a session of api_id that is checked and that session is not set. So there are some issues, so to make it work, we uncomment the following lines of code at catalog/controller/startup/api.php

namespace Opencart\Catalog\Controller\Startup;
class Api extends \Opencart\System\Engine\Controller {
	public function index(): object|null {
		if (isset($this->request->get['route'])) {
			$route = (string)$this->request->get['route'];
		} else {
			$route = '';
		// if (substr($route, 0, 4) == 'api/' && $route !== 'api/account/login' && !isset($this->session->data['api_id'])) {
		// 	return new \Opencart\System\Engine\Action('error/permission');
		// }
		return null;

Example of Opencart API call

Here is an example of an Opencart API call

$url = 'https://www.yourdomain.com/index.php?route=api/account/login&language=en-gb&store_id=0';
$request_data = [
	'username' => 'Default',
	'key'      => 'YOURSECRETKEY'

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $request_data);

$response = curl_exec($curl);

$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);


if ($status == 200) {
	$api_token = json_decode($response, true);

	if (isset($api_token['api_token'])) {

		// You can now store the session cookie as a var in the your current session or some of persistent storage
		$session_id = $api_token['api_token'];

$url = 'http://www.yourdomain.com/opencart-master/upload/index.php?route=api/sale/order.load&language=en-gb&store_id=0&order_id=1';

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $request_data);

// Add the session cookie so we don't have to login again.
curl_setopt($curl, CURLOPT_COOKIE, 'OCSESSID=' . $session_id);

$response = curl_exec($curl);


Opencart 3 API documentation

When we see API at Admin >> System >> Users >> API, then we are interested to explore it. We checked the catalog folder and found the image below:

Opencart API folder structure

All these tests are made in demo.webocreation.com. Checking the code we have to log in first. So we type the following URL but it gives me the following error.


<b>Notice</b>: Undefined index: key in <b>D:\xampp\htdocs\opencart2302\catalog\controller\api\login.php</b> on line <b>11</b>[]

Again we checked the code and found the following:

// Login with API Key
$api_info = $this->model_account_api->getApiByKey($this->request->post['key']);
if ($api_info) {

Which means we have to log in through the POST request. So we wrote the following curl code to log in through the POST URL.

We write the following code in opencartapi.php and upload it to webocreation.com root server:


$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://webocreation.com/index.php?route=api%2Flogin",
  CURLOPT_POSTFIELDS => "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"key\"\r\n\r\nG63RZVjNnkPS3KdI8DZRrDph4LueZCRJcPwTfgnH8KzMFvVrsjp4g73YM1W3RdkTHRHyXK7c6vDVUsadxtx8c8r1uW2NWt0flPFNm5pVCq862jrBbrmztbBlPi4GWf9kQeB3YqT3uyOp7KldgRrvRu3eROSyGZZH2HEJ9sh9zSbXpm0u6wIOOdBoaNARzUOD74fHSn5iAYwCwPHeVkA29p3tkIPr8OFIzA9r3UGOXJ9xhWKojsGuKwnWEyaKuMB0\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--",
    "cache-control: no-cache",
    "content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
    "postman-token: dc6b20c6-b84d-3b12-3b89-e586d0058347"

$response = curl_exec($curl);
$err = curl_error($curl);


if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;


Below is the part of the code where you add your key that you have to change to yours:


Then I run http://telgap.com/opencartapi.php

{"error":{"ip":"Warning: Your IP **.**.**.** is not allowed to access this API!","key":"Warning: Incorrect API Key!"}}

I add my telgap.com IP at Admin >> Users >> API >> edit >> IP Addresses tab:

Whitelist IP in Opencart

After I add my IP and run the URL http://telgap.com/opencartapi.php again I got the successful message:

{"success":"Success: API session successfully started!","token":"kyJoxIKh9wEShzUxvBz2urUZSq"}

Following is the POSTMAN workout to achieve it.


I hope it will help somewhat to dig more about the OpenCart API.

You can check the following Opencart API-related posts:

Please let us know where and how are you using the Opencart API that you have used in eCommerce websites or have any questions or suggestions, please subscribe to our YouTube Channel and read more about Opencart 4 tutorial, opencart 3 tutorials, custom module theme development. You can also find us on Twitter and Facebook.

How to add an Analytics extension in Opencart 4? Third-party JS free Opencart extension

With the launch of Opencart 4 we did not find the Google Analytics Opencart 4 module that we used to have in Opencart 3, so to fulfill that requirement we created a free Opencart extension called Third Party JS extension where you can add the Javascript code provided by third-party like Google Analytics, Facebook pixel, etc and add it on this extension.

How to install the Opencart 4 module?

Log in to Admin >> Extensions >> Installer >> Click the Upload button and select the file that ends with .ocmod.zip. In the above download example, it is third_party_js.ocmod.zip. Once it is installed you will see the “Third Party JS” in the installed extensions.

Once you uploaded the zip file, you click the install green icon to install the extension.

Installed extensions Opencart 4

Once you clicked the install button, your extension is installed successfully

opencart 4 extension installation success

Once you see the success message. Now you can go to Admin >> Extensions >> Extension. Then, choose the extension type “Analytics”  and click the install green install button.

Read More: Add HTML, google analytics, tag manager, and third-party JS code in Opencart

google analytics opencart 4

Once you click the install button, you can edit the store and you will see a form where you can install the third-party JavaScript like below and enable the status and click the blue save button.

Google Analytics Opencart 4 extension

After clicking the save, now the JavaScript code is shown at the head tag.

code added in the header Opencart 4

In this way, you can install the Opencart 4 extensions and use our free Opencart 4 analytics extension for your website.  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 Google Analytics Opencart 4 module!

40 cool final year college projects for students in 2023

The final year project plays a vital role in deciding your career as a Computer Science student. The era of technology is constantly evolving and so is the need for great projects in the field. There are multi-billion dollar industries that demand great projects in the respective field – in order to be considered for recruitment. This raised the billion dollars question: What final-year project should I choose as a Computer Science Student in 2023? 

Well, we have got some answers and ideas that you can choose from. In this blog, we have gathered some of the most reliable final-year projects for the students of Computer Science for 2022. By the end of this blog, you will be able to:

  • Analyze different cool final-year projects for Computer Science. 
  • Get a hands-on idea of final project ideas. 
  • Decide the cool final-year project that will help you flourish in your career. 

Read More: Internship SWOT analysis final year report

Cool Final Year College Projects That You Can Do As A Computer Science Student in 2022

The field of Computer Science is one of the vast domains to study. It has an unwavering demand in the marketplace. Enterprises and high-paying companies yearn for efficient talents in the Computer Science field. Likewise, the final year college project is also equally important. This project opens the arenas of opportunities to be considered in these marketplaces. Here are some cool final year projects for Computer Science in 2022 that you can work on, we have made collections of around 40 projects, and we keep on writing for each project in our upcoming posts, so don’t forget to subscribe to our email list:

Decentralization projects ideas like:

Web 3.0 Stacks
  • eCommerce with Web 3.0 implementation
    The technology you can use are below and can make eCommerce implementation with Web 3.0 and decentralization environment:
    Frontend development with HTML, CSS, JS, React.
    Node Provider: Infura, Quicknode, Alchemy etc
    Smart Contracts: Solidity, Vyper, Rust etc
    Blockchain: Ethereum, Polygon, Solana etc
  • Decentralisation Finance (DeFi)

If it was Web 2.0 then the Currency Converter project would have been one good idea but with decentralization, it is better to work with Defi projects.

  • Non-fungible token (NFT)

Non-fungible token (NFT) generally alludes to a cryptographic resource on the blockchain that addresses a theoretical and interesting advanced thing like a piece of craftsmanship, a photograph, an in-game collectible, or a tweet that different resources can’t supplant on the grounds that it has a bunch of outstanding properties.

  • Decentralized Identification

Create a decentralized identification system so users don’t need to keep on sharing their information again and again on different platforms. Simplify access to DApps with single sign-on (SSO).

  • Marketplace for Cryptocurrencies
  • Decentralisation Applications (DApps)
  • Create new Cryptocurrencies
  • Peer to Peer (P2P) sharing

The popularity of Uber, Lyft, Didi, etc, nowadays ridesharing, delivery sharing, etc are becoming popular so these project ideas can also be one.

Read More: Final year E-commerce project eShopping Process model and functional diagram

Artificial Intelligence-related projects:

  • Location Detection
    Face detection is normal nowadays, how about location detection, let’s say big construction sites where each location work is detected and updated the Apps, so they can know what timing and things are needed to move forward? 
  • Spam & Fake Detector AI Apps
    Everyone wants to get rid of spam and remove them, so Spam and Fake Detector App can be a good project like you can create Fake Spam Detector by analyzing the patterns for the Products, etc.

Other Artificial Intelligence related projects include:

  • Artificial Intelligence-Based Staffing Solution. 
  • Android Assistant like Apple’s Siri. 
  • Workflow Automator Software. 
  • Auto-monitoring Software for Workspace. 
  • Communication Tracker & Scheduler App and Extension. 
  • Chatbot – App, Software, and Extension
  • Virtual Assistant (VA) for Windows and Desktops. 
  • Online Task Assignment and Management Tools like Hubspot and Trello. 
  • Shipment Tracker for Logistics. 
  • Artificial Data Validation Software like Plagiarism Checker

API related projects

Opencart API
  • Integrated API endpoints
    Build a single and integrated platform for all APIs and your one Endpoint will call all the APIs needed.
  • NASA free APIs
  • RapidAPI free APIs
  • Google free APIs like Google Maps projects

Read More: API call in eCommerce


  • Copyright system and implementation with NFT and cryptocurrencies
  • Manage multiple ads in one system and implement Prebid, so marketers can use Google ads, media ads, and other ads from one place
  • Search Engine Marketing (SEM) Monitoring Tool
  • Search Engine Optimization (SE0) Monitoring Software
  • Product Auto-analyzer to See How the Product is Performing in the Market
  • Google Double Click Evaluation Tool
  • Micro & Macro Content Performance Evaluator 
  • Auto Lead Generation App

Read More: 13 proven tips and tricks to boost conversions for eCommerce

Future Predictor Applications

  • Stock Price Predictor application
    Fluctuation in Stock price is one of the growing concerns of modern marketplaces. The stock price sees numberless ebbs and flows every day. Once you reckon this as a problem, you can come up with a solution to it. The best solution would be to come up with software that detects the real-time stock price. 
    Essentially, you will assemble a stock valuation indicator that can foresee the future costs of stock. The best thing about working with financial exchange information is that it by and large has short input cycles. 
    This makes it simple for information examiners to utilize new market information to approve stock value forecasts. This financial exchange information will in general be exceptionally granular, different, and unpredictable.
    You can demonstrate it to find and gather comparative stocks dependent on their value developments and distinguish periods when there are critical changes in their costs.
  • Product stock prediction and data prediction as per the shipping timing, seasonal requirement, and emotional adjustment. Order the product as per the Stock needed.
  • We see lots of Weather predictors, how about Agriculture Product Predictor as per the weather so we can control what is needed? 
  • Music Recommendation App
  • Predictive Analyzer of Products before launching them
  • Luck Predictor App Based on Age and Interest

Health-related projects ideas:

  • Blood Gift and Blood Donation Center Locator
    This online blood gift device is intended to help individuals in finding blood benefactors in case of a crisis. Clients can join to give blood to a blood donation center or present a solicitation for blood. Clients can check out the benefactors’ profiles and request help from them.
    Crises ought to forever be tended to first. Therefore, this final year project makes Computer Science understudies foster this 2022. This framework will address the requirement for blood gifts when required by a patient. Patients can check their blood classification match and ask for help from the prospects.
  • Coronavirus-infected person locator
  • Disease Detector Apps, like Cancer, Allergy, etc
  • Tools for the Management of Medications:
    Automated Software to Monitor Medicines and Healthcare Products and Record Tracker App of Medicines and Drugs

Read More: Project Objectives for health Nutrition Program and Targets of Nutrition

Programming and Developer support systems

  • Continuous integration and continuous delivery which supports the developers
  • 24/7 Website Monitoring Software
  • Designing Multi-page Functional Website where you will auto-generate HTML & CSS, as you drag and drop modules

Read more: Best extensions of Visual Studio Code for PHP developer

Robotics Projects

  • Functional Robot for Multitasking
  • Goods Transporters Robot to Handle Logistics 
  • Bluetooth-controlled Robot for Cell Phones 
  • Remote Controlled Robot as a Virtual Assistant 
  • Intermediate and Higher Level Arino Robot

Fitness Project Ideas 

  • Exercise Tracker App
  • Recess Movement Analyzer
  • Auto Yoga Trainer Software 
  • Exercise Training Virtual Assistant Tool 
  • Goal Setter for Daily & Weekly Outing


  • Currency Convertor – With Real Time Conversion Rate
    Designing a Currency Converter – both app and extension – is one of the exciting projects for the final year project. As a Computer Science student, it is a noteworthy idea to come up with a solution to modern era’s challenges. 
    This undertaking includes incorporating a money converter that can change over one cash’s worth into another money unit. For example, you can change the Indian rupee into dollars or pounds – as well as the other way around. 
    The test that lies here is that the worth of monetary standards changes day by day. Nonetheless, you can address this issue by bringing in a dominant accounting page containing the refreshed cash esteems. To assemble this task, you should have the fundamental information on python programming and the Pygame library.
  • Banking System Reformation
  • Real-time Price Determinator
  • Export and Import Management on National and International Level
  • Micro and Macro Economics & Their Impacts on Currency Values 
  • Real Time Cost Opportunity Detector 
  • Fundamental Economics & Current State Budget

We hope these titles and some details help you to select your final year project easily and wish you the best of luck for your final year project. Let us know which project you are working on, maybe we work on providing you details to complete the project successfully. Please let us know if you have any questions or suggestions, please click to see other internships projects. You can also find us on Twitter and Facebook.

A Complete Guide to the UI Design Process, with an example of e-commerce checkout

Did you know that 88% of users will never use an app or site again after one bad experience? From this, you can see how vital UI design is. UI design goes far beyond aesthetics and has a decisive impact on user experience. In the guide below, we’ll tell you everything you need to know when designing user interfaces, from what UI is, to key elements, and the latest UI trends for 2022 and beyond.

What is UI design?

UI design, short for User Interface Design, refers to the process of creating the graphic layout of a digital product to support the final look and feel of the application. It includes images, animations, sliders, text fields, buttons, and various other elements that users interact with. Good UI design services lead to a friendly user experience, which is why UI design should be part of the software development process. Now let’s take a look at the elements you can use when designing your interface.

UI elements that designers should know

There are various UI elements in user interface design, which can be grouped into three categories:

Input element

Input elements are the most popular category. In the input element, the user provides various required information, such as age and reason for purchase. Input can be in a variety of formats, including text, graphics, and audio, but input elements can take the following formats:

  • dropdown
  • combo box
  • button
  • Toggle
  • text/password field
  • date picker
  • Checkbox
  • Radio button
  • Confirmation dialog

Output element

Output elements are the result of actions you take on input elements. It displays alerts, warnings, completions, errors, etc., and is never neutral. For example, if you upload an image in an unsupported format, you’ll see an “Unsupported Image” message, letting you know right away that you’ll need to submit an image in a different format.

Helper element

The third category is a general term for all elements that cannot be classified into the output or input categories. As the name suggests, it helps users understand what the site is about and how to use the interface. Helper elements are further divided into three subcategories:

Navigation: This helps you navigate the interface. Examples include menus, breadcrumbs, links lists, etc.

Information: Tells the user what step they are currently in or what process the website is currently performing. Examples include progress bars, icons, toolbars, etc.

Responsive checkout progress bar design

Container/Group: A container that holds various UI components together. These elements often come in the form of popups, sidebars, and widgets. For example, a newsletter sign-up box like the one pictured below is a good example.

Subscribe box best practice

 The importance of understanding the differences between UI design elements

As you can see from the three groups above, each element (output, input, and helper) has a different purpose, but UI designers must also distinguish between elements within the same group. Let me give you an example, you are trying to add a filter to an online supermarket page. You want to display only “vegan” products in search results. From a UI perspective, you’ll find several input elements.

Radio button list: Tap the correct option

List: Find the matching element and click “Vegan”

Dropdown: Scroll and tap the relevant product tag (selections are typically listed alphabetically)

Checkbox: Select not only “vegan” but also other elements such as “sugar-free” and “fair trade”

To see which elements to choose in terms of UI, you have to understand the user’s purpose and make it as simple and useful as possible to fulfill it! Speaking of simplifying user intent and interaction, this brings me to the next topic.

 Best principles of UI design

What is UI design? To make life easier for users. That is the main principle that leads to the success of UI design. By putting users at the center of your ongoing UI UX development company process, you’ll better engage and retain them. This means reading your users’ minds and using data to understand their behavior. The result is a more sophisticated product that meets user needs and expectations.

And there are high expectations for it. Users are spending more and more time online and are becoming more demanding than ever before. Even if you don’t realize it, or even if you don’t call it “UI design,” you know what kind of interface is good.

After all, what happens when users struggle to navigate an app or site?

I’ll stop using it. I’ll uninstall it. So applying the right principles to simplify the user journey is critical for your business. To get started, please do the following:

1. Minimize actions and steps per screen

Users want to get where they want to go with as few clicks and taps as possible. Especially when designing user interfaces for devices with small screen sizes, space is limited and navigation techniques need to be big, thick, and thumb-friendly.

UI UX best practice to minimize actions and steps

Keep your design focused both aesthetically and intentionally. It should be clear what the page or screen is, what the user needs to know, and what they need to do. For example, think of Amazon’s checkout page. Focused on product and price, auto-populated with details and shipping options, all you have to do is hit ‘buy’. Time is precious. With so many companies trying to capture the attention of their users, they can’t afford to risk “losing” to their competitors by not streamlining their tasks and actions.

2. Reducing cognitive load

Remember the Million Dollar Homepage? This is an order-of-magnitude example of cognitive overload. The bright colors and barely legible clusters of letters are eye-catching. You might be able to spot a business, like a casino or a small retail store, but before that, you’ll see another flashy pixel ad and forget everything that came before that. Cognitive load is the amount of information occupied in the brain. With that in mind, when designing an interface, your goal is to remove the clutter that users don’t need and make it easy for them to get the information they need back and forth. A common example is to toggle the color of links that the user has already clicked. You can see where you went at a glance without having to remember which page you visited. Her great UI design means users don’t have to think. It’s intuitive, and tasks are completed without you having to worry about your unsung design skills.

3. Make sure the dialog ends

Think about the last time you purchased something online. There was a three-part story there. The first part is to look for products. Part 2: Choose your product and proceed to checkout. The third part, receive your order confirmation. feel well. “If you do this, it will happen” is the simplest rule in the world, so it enters our brains. Throw this ball against a wall and it bounces back, R2D2 has the blueprint so Luke can destroy the Death Star, clicking “Buy” will notify you that the item is in your basket, and so on. Add “three parts” to user actions and feedback such as “added” notifications at each step.

4. Provide clear and easy-to-understand next steps

Have you ever scrolled through a web page and found yourself in a barren space like Arrakis? You’ll have to suddenly stop what you’re doing and have no choice but to scroll up, click back, or close the tab.

Please be very careful to prevent this from happening on your app or site. You’ve got the user where you want to go, what next?

At the core of UI design is guiding the user through the process. Subtly (or explicitly) tell them where to go and what to do next. Think about the location and function of your call-to-action ( CTA ) button. Use data to focus on user intent and placement to maximize engagement. For more information, check out our Guide: Basic Principles of User Interface Design.

Direction process path UI UX

A Hands-On Guide to Mobile-First Responsive Design

A method of UI design called “mobile-first design” puts the experience on small screens first.

It makes sense to build a variety of arrangements for your consumers since different devices require different layouts depending on their screen size and orientation. This post will demonstrate how to develop a product prototype for mobile devices first and then adapt it for tablet and desktop screens.

In UXPin, you can easily create your own responsive or adaptive variants. In UI UX design services, a sophisticated prototype tools, creates a mobile-first design and scales it up for tablet and desktop viewing. Create a free trial now and continue reading below.

What is the Mobile-First Approach?

Designing on the smallest screen first and working your way up is the mobile-first strategy. It is among the greatest methods for producing responsive or adaptive designs.

The mobile-first strategy is one of the tenets of progressive improvement. The idea is that since mobile design is the most difficult, it should be finished first. Designing for other devices will be simpler once the concerns around mobile design have been resolved. What it all comes down to is that the simplest designs will only include the most important elements, therefore you have already created the core of your UX.

The other strategy is gentle deterioration. This integrates all of the complexity from the beginning and eventually simplifies it for smaller devices. The issue with graceful degradation is that when you start with an all-inclusive design, the core and auxiliary components combine and become more difficult to tell apart. Since you’re “cutting down” the experience, the entire strategy runs the danger of considering mobile design as more of an afterthought.

Along with others, we highly advise adopting a mobile-first strategy for progressive development. In this post, we’ll go over several tips and tricks before concluding with a practical lesson in which we design a fictitious website using the mobile-first methodology.

Mobile-First = Content-First

Your website will perform better across all devices if it is user-friendly on mobile. The fact that a mobile-first strategy also puts content first is more significant. Mobile has the most restrictions, including those related to screen size and bandwidth, thus designing for it pushes you to prioritize content harshly.

The mobile-first strategy naturally produces designs that are more user- and content-focused. Users visit the site primarily for its content, which is its beating heart.

With that said, mobile users occasionally need different materials than desktop users. Context may be used to determine what your user would value more in a certain circumstance and place when determining device-specific content. Making user scenarios is the most effective technique to prepare in advance for this.

The ability of the small-screen breakpoints to better accommodate the information surrounding them is another benefit of the mobile-first strategy. Again, the poorest option is trying to fit an existing large design into a little framework. However, when using a mobile-first strategy, the breakpoints organically form around the content, eliminating the need for unpleasant modifications.

The Mobile-First Design Process

We’ll outline a procedure that benefits UXPin’s designers.

Wireframing is always advised as the first stage in order to arrange your layout as effectively as possible. We utilize the responsive breakpoint menu to speed up switching between different screen sizes, starting with the smallest, when wireframing or prototyping.

These settings lay out the ideal screen size for you, allowing you to wireframe while focusing solely on the information.

Our procedure follows these steps:

1. Content Inventory 

This is a spreadsheet or other document that has all the components you wish to be present.

2. Visual Hierarchy 

Determine how to present the most crucial components prominently by giving the content inventory’s components a priority.

3. Create the lowest breakpoints possible before scaling them up.

Utilize the mobile wireframe as a model for bigger breakpoints after constructing the mobile wireframe. When there is no more room on the screen, expand it.

4. Enlarge touch targets 

Fingers require larger components to tap on since they are broader than pixel-accurate mouse cursors. Apple now that touch targets are 44 pixels square (learn more about mobile design for iOS and Android). Make sure there is adequate space around all the interactive components, give hyperlinks enough room, slightly increase buttons, and give links plenty of room.

5. Don’t count on hovers

Although it should almost go without saying, hover and mouseover effects are frequently used by designers in their interactive work. Avoid doing that if you’re thinking of becoming mobile-friendly.

6. Think “app”

Users of mobile devices are used to the movement and some degree of control in their experiences. Consider expanding widgets, AJAX calls, off-canvas navigation, and other items on the page that visitors may interact with without needing to refresh the page.

7. Avoid large graphics 

Landscape photographs and intricate graphics don’t look good on a screen that is only a few inches wide. Images that can be read on portable screens should be targeted at mobile consumers.

8. Test it in a real device

There is nothing better than determining for oneself how usable (or not) a website is. Put your product on an actual phone or tablet instead of your desktop or laptop computer. Slide the pages. Is it simple to navigate the site? Is the loading speed fast enough? Are the images and text simple to read?

A Mobile-First Design Tutorial

Set your content priorities

In contrast to “desktop-first,” the “mobile-first approach” adds information to each increasingly bigger layout rather than removing it as we build smaller ones. Information is not to be eliminated when thinking mobile. Sorting data into primary, secondary, and tertiary content is what it signifies.

In this case, we already know that the home page has to include the name of the business and links to its products. It wouldn’t hurt to write a blog entry. But as we’ve already mentioned, not everything will fit into a smartphone view, so we prioritized what would help the site’s main objective—selling bikes—be achieved.

1. The newest model bike

2. The best-selling bike

3. “Find your perfect ride” CTA

4. Company name and hero image

5. Navigation

6. Search

7. The second-best-selling bike

8. Gift certificates

9. A testimonial

10. The latest blog post

Smartphone View

What quantity do consumers need?

Thinking mobile-first compels us to consider what matters most. Can we leave other things, UI/UX design services company such as gift certificates, a less popular model, and the most recent news, for interior pages in this smartphone view where the best-selling bike and the newest model will directly drive to sales? The last call to action is very clear and simple to activate with a single finger press.

Tablet View

We are better equipped to provide ancillary information like extra items (like “The Capacitor”) since we build for a tablet-sized display. We may also include more information that stimulates purchases without actually generating them, such as testimonials, and enlarge the navigation bar at the top of the page.

This may often be even more challenging than choosing what to put in a smartphone UI because there are more alternatives accessible. The line separating secondary from tertiary parts is hazy, and the desire to incorporate everything is great.

Defy the desire. Use the list of the sorted content. Space remains an issue, much with cell phones

Desktop View.

Finally, the desktop view may accommodate any amount of data you deem significant. The home page may now accommodate whatever information you deem appropriate, whether or not it does so. Take note of a few of the additions we made:

Gift cards Testimonials from clients

Examining the newest Lightning Bolt bike in a blog post

Design device-appropriate layouts yourself

It’s quite simple to design several layouts for these views if you’re using UXPin.

  • Open a UXPin prototype.
  • Tap “Add new adaptive version” at the bottom right of the UXPin editor
  • Select a predetermined size or insert your own measurements.
  • You don’t have to recreate everything from scratch. Select a size to copy your design’s components.

The end of that. By pressing the various canvas sizes above it, you may toggle between breakpoints and change each one to fit your needs. You are welcome to experiment with mobile-first prototyping yourself. Sign up for a free trial of UXPin.

How is the disruption of 2023 changing the way organizations manage their supply chains?

Disruption in the supply chain

The supply chain encompasses all stages from the time the customer generates the order for a product until it is delivered and charged, covering phases such as the supply chain of goods for its manufacture or quality control. Any variation throughout this process can cause inefficiencies or, ultimately, breach the objective of the supply chain: that the merchandise reaches the final customer with the required quality and in the agreed time and place.

It is understood as disruption in the supply chain, therefore, the alteration of any phase of the supply chain caused by agents external to the product: climatology, changes in legislation or cyberattacks, among others.

We can classify the different disruptions according to their origin:

Natural: These are nature-related catastrophes, such as earthquakes, tsunamis, or volcanic eruptions.

Biological: originate from epidemics or pandemics, such as coronavirus or Ebola. Given the globalization and internationalization of an increasing number of companies, a good prevention policy in the supply chain will be crucial to prevent its spread.

Policies: derive from government decisions or supranational institutions that directly influence the proper functioning of the supply chain. This is the case of the trade war between the United States and China or the 1973 oil crisis.

Technological: from errors or malicious use of certain technologies ( global server drops, data leaks, cyberattacks, etc ).

How to prevent risks in the supply chain

Although there are unexpected disruptions that can alter industrial activity, prevention is key to avoid or mitigate the effects of such alterations.

To that end, organizations should analyze each phase of the product supply chain and identify possible risks related to its operation: excessive dependence on a supplier, tight room for maneuver due to errors in the management of the last mile or excessive seasonality of a product, among others.

What is the solution then? Beyond knowing the product and determining possible threats, today there are tools to monitor and analyze the performance of all parts that make up the supply chain, in addition to how to apply continuous improvement projects to increase the productivity of its operations.

How to manage a disruption: logistical action plan

As part of the process of preventing a disruption, every company must, based on an examination of the threats present in its supply chain, develop an action plan to alleviate or nullify the effects of a catastrophe on your premises.

Thus, any action plan must follow the following guidelines:

Analyze the causes and consequences that disruption causes in the production, storage or transportation of merchandise to the end customer.

Prioritize by importance, to guarantee the safety of personnel and those who may be exposed to the effects of the catastrophe. Once this is checked, the stored material, raw materials and installation must be secured.

Listen to all the participants of the supply chain: An action plan should not be limited to information specific to the company’s activity, but should also integrate that of other participants in the supply chain. After all, this is the only way to ensure correct traceability on the product.

Collaborate with external agents: either with other logistics companies, such as 3PL ― have more knowledge on the ground ―, with other links in the supply chain mangement or the relevant authorities.

Once the guidelines that any action plan must contain to be effective in the face of supply chain risks have been described, its execution must be prepared. The consultant PwC points out the following phases: prepare ― the planning we just saw, which is to assess the main threats and how to mitigate their effect ―, answer ― execute the agreed lines of action to reduce the impact on the company’s productivity ― and, finally, recover and collect information on what impact the disruption has had ― and thus interpret how the plan has worked and what aspects need to be improved in the event of a possible repetition ―.

Examples of disaster risk management

Any company specialized in the design and construction of infrastructures must take into account not only the materials and the land destined to build, but also the weather conditions, in addition to seismic risk or the presence of volcanoes in the area, etc.

Thus, when Mecalux develops self-supporting warehouse projects, in which the shelves form the structure itself, bearing the weight of the complex, company engineers also assess the impact of all external variables: wind force, snow overload, type of terrain, etc.

These are some of our projects where risk management played a crucial role:

Iron Mountain

Five months before the devastating 8.8 earthquake on the Richter scale that devastated Chile in 2010, the documentary registration company Iron Mountain had hired Mecalux to build one of its many warehouses in the South American country. After the earthquake, the company lost seven of its facilities, but Mecalux resisted.

Big data and analytics

Macrodata, analytics, and automation are enabling organizations to mitigate shocks through agile and digital management of the supply chain. The implementation of predictive and prescriptive analyzes, as well as advances in big data, algorithms and robotics, will have far-reaching effects. Organizations that harness the power of these solutions will benefit from increased synchronized visibility, planning and execution, data-driven decision making, predictability, agility, and profitability.

2. Digital supply chains

Digital supply chains will continue to be essential elements of many trends on this list, such as risk, resilience and security. Successfully digitizing supply chains requires large-scale sensor deployment over the Internet of Things; digital twins; shared internal and external interfaces, as cloud-based networks; and automation and process verification. The best organizations will embrace the capabilities of the digital supply chain or lag behind more agile and more efficient competitors.

3. Supply chain risk and resilience

Risk and resilience of the supply chain require collaboration between global networks that are very complex and highly interconnected. Key strategies include supplier diversification, production capacities, and transportation processes, as well as searching for alternative materials and non-traditional partnerships. Many supply chains will become more compact and localized. Resilient supply chain design will also be critical to mitigating adverse events faster than competition, offer excellent customer service and generate value and market share.

4. Artificial intelligence and machine learning

Artificial intelligence and machine learning, key components of many trends on this list, are becoming a driving force to maximize and enable systems thanks to interoperability in various business scenarios. They are essential for integrating people, processes and systems into a wide range of operating environments. The evolution driven by technology towards industry 5.0 -which implies a more collaborative approach-, as well as between humans and robots, will have a significant impact on numerous functions of the supply chain.

5. Robotics

Labor shortages, supply disruptions and increases in demand are forcing organizations to resort to robotics and, as a result, Smart robotics is transforming supply chains by transforming supply chains. Driven by rapid technological and affordable advancements, mobile and fixed robots will assist workers in the tasks of last mile storage, transportation and delivery. Safer, more efficient warehouses, with fewer staff, will reduce costs. Although the initial capital investment will be high, the cost savings will be spectacular.

6. Data security and cybersecurity

The more digital supply chains become, the more vulnerable their global networks are to cyber attacks. This interconnectedness means that supply chain actors can unintentionally expose themselves and their customers to privacy violations, identity theft, and worse. Greater collaboration is to be expected in protecting networks, devices, people and programs.

Smart Selling Strategies: Programming, E-commerce, and the Art of Budgeting

Success isn’t just about what you sell. It’s about how you sell it. At the core of your business lies smart selling strategies, directing your journey toward profitability. A well-crafted sales strategy has the capacity to pinpoint your target audience, gain insight into their requirements, and present your products or services in a manner that resonates with them. It constitutes the distinction between mere sales and the art of selling with finesse.

Making the Most of Smart Selling Strategies

Smart selling, often referred to as strategic selling or consultative selling, represents an evolution in the world of sales. Diverging from conventional sales methods, it adopts a more forward-thinking and customer-centric approach to marketing products or services.

Here are the key principles and characteristics of smart selling:

Customer-Centric Approach

Smart selling begins by delving into the customer’s requirements, identifying their pain points, and understanding their objectives. It entails actively listening to the customer, posing insightful questions, and focusing on how your product or service can effectively address their distinct challenges.

Remember, it’s not merely about sealing a one-time deal; it’s about building enduring, trust-based relationships with your customers. Smart sellers aim for repeat business and referrals by providing exceptional value and service.

Data-Driven Problem Solving and Insights

Smart selling focuses on solving problems and adding value. Sellers actively look for ways their offerings can address specific challenges or opportunities for the customer. It often incorporates data and analytics to understand customer behavior, track sales trends, and make informed decisions about strategy and approach.

Long-Term Scalability and Adaptability

The modern sales landscape is dynamic, so you must become adaptable to be a smart seller. Smart selling looks beyond immediate sales quotas. It considers the long-term impact of each sale on the customer’s business and the potential for ongoing business growth. Thus, you will need to pivot your approach and strategies as market conditions and customer needs change.

The Role of Employees in Smart Selling Strategies

Your team constitutes the essential foundation of your business. Achieving success requires more than just a skilled workforce; it demands a team that is motivated and fully engaged. Strategizing work schedules is a powerful tool to boost productivity and engagement. 

Empower your employees by offering flexible work arrangements, advocating for a harmonious work-life balance, and creating avenues for skill enhancement. When your team is motivated and fully engaged, they are more inclined to exert the additional effort needed to drive your business towards success.

Adapting Smart Selling Strategies to Your Business

The best smart selling strategies can vary depending on your industry, target audience, and specific business goals. However, some core smart selling strategies are universally effective.

Smart Selling for Programming

Whether you’re selling software, coding services, or tech solutions, you need a deep understanding of your target audience and the unique challenges they face in the tech industry. Here are some smart selling strategies tailored to programming:

  • Targeted Niche Marketing: Identify a specific niche or industry where your programming services or solutions excel. Tailor your marketing efforts to address the pain points and needs of that niche.
  • Demonstrate Technical Expertise: Showcase your technical knowledge and expertise in programming languages, frameworks, and tools. Prospective clients are more likely to trust you if they see you as a technical authority.
  • Custom Software Development: If you offer custom software development, emphasize the benefits of tailored solutions. Highlight how your programming team can create software that aligns precisely with the client’s requirements.

E-commerce Excellence: The Digital Frontier

The digital world is where businesses thrive today. Regardless of whether you’re an experienced e-commerce expert or embarking on your journey, mastering the art of e-commerce is non-negotiable. It revolves around crafting a seamless online shopping experience that entices customers to return for more. Below, you’ll discover a set of strategies designed to guide you in achieving your sales objectives:

  • User-Friendly Website: Your website is your virtual storefront. Make sure that it is user-friendly, visually appealing, and easy to navigate.
  • Optimize Online Presence: Use SEO and social media to increase your online visibility. Reach more potential customers where they spend their time.
  • Efficient Fulfillment: Streamline order fulfillment to provide quick and reliable service. Satisfied customers are repeat customers.

Additionally, for an e-commerce business, the quality of your products can make or break your reputation. Investing in inventory quality control is essential to ensure your products meet the highest standards. By rigorously inspecting and testing your inventory, you can minimize defects and reduce product returns. Not only does this save you money, but it also enhances customer satisfaction and loyalty.

Budget Like a Pro

Every dollar counts, and in the ever-evolving landscape of business, mastering the art of budgeting is the key to financial stability and growth. Effective budgeting doesn’t just involve knowing where your money goes; it’s about allocating resources strategically to maximize ROI. Master this art by doing the following:

  • Create a Detailed Budget: Break down expenses, revenue streams, and goals. A detailed budget is your financial GPS.
  • Prioritize Spending: Allocate resources where they’ll yield the most significant return on investment. Trim unnecessary expenses and invest in growth.
  • Regularly Review and Adjust: A budget is a dynamic tool. Regularly review it and make adjustments as needed to stay on course.

The Bottom Line

Smart selling revolves around the recognition that successful sales aren’t solely about imposing products on customers, but rather aiding them in accomplishing their objectives. It involves cultivating mutually beneficial relationships, centering on the customer’s requirements, and providing substantial value. It is a continuous journey of acquiring knowledge, adjusting to changing circumstances, and delivering solutions that ultimately culminate in enduring success in sales.

Opencart tutorial – how to code single and multi-instance module?

In this Opencart tutorial, we are showing you the difference between the coding structure of a single instance Opencart module and an Opencart multi-instance module both in the admin section and the catalog section. In a single instance module, you install and can create only one setting and can use it in multiple places, but everything will be the same. In the multi-instance module, you install and can create multiple modules and can add different settings and can use them in multiple places with different content.

Single Instance Opencart moduleMulti-Instance Opencart module
After installation, it will create only one moduleAfter installation, it can create many modules as many as needed
Single vs Multi instance opencart module
Example of core available only one instance Opencart module are: Account module, Category module, Information module, etcThe name of the form field can be any
Admin section code change
$this->model_setting_setting->editSetting(‘module_login’, $this->request->post);if (!isset($this->request->get[‘module_id’])) {
his->model_setting_module->addModule(‘bestseller’, $this->request->post);
} else {
$this->model_setting_module->editModule($this->request->get[‘module_id’], $this->request->post);
Name of the form field should start with the extension initials, for the module, it is like name=”module_*****”, for the shipping extension, it is like name=”shipping_***”, for payment extension name=”payment_***” etc.Data are saved in the oc_module database table
Some other extra codes for multi-instance opencart module are:
– Form action link needs to be if-else as per module id
– Last Breadcrumbs link need to link to module id link
Extra code:
if (isset($this->request->get[‘module_id’]) && ($this->request->server[‘REQUEST_METHOD’] != ‘POST’)) {
    $module_info = $this->model_setting_module->getModule($this->request->get[‘module_id’]);
In the oc_layout database table, the code dot module id is stored in the code column
Catalog section code change
The code difference in the controller is at the index method.
public function index() {
public function index($setting) {
Data are saved in the oc_setting database tableIn the oc_layout database table, the cod will be stored in the code column
Opencart database layout
Some other extra codes for multi-instance opencart module are:
– Form action link needs to be if-else as per module id
– Last Breadcrumbs link needs to link to the module id link
Extra code:
if (isset($this->request->get[‘module_id’]) && ($this->request->server[‘REQUEST_METHOD’] != ‘POST’)) {
    $module_info = $this->model_setting_module->getModule($this->request->get[‘module_id’]);

These are the differences between a single-instance module and a multi-instance module of Opencart. If you are looking for an Opencart module development tutorial, here are the two videos and four posts that will help you understand the code and flow of Opencart modules.

Please let us know if you have any questions or suggestions, please subscribe to our YouTube Channel for Opencart video tutorials and you can see more at Opencart tutorial category. You can also find us on Twitter and Facebook. Enjoy!

How to use VqMod in Opencart 4? Installation, configuration, and example use.

In the Opencart tutorial, we are showing you how to use VqMod with examples in Opencart, vqmod installation steps, configurations, example and discuss what kind of issues can occur and its solutions. With this installation, you can use the vqmod XML file to override the core file without changing core files.

Looking for OcMod click here.


Installation steps of VqMod for Opencart 4

Following the steps below will install Vqmod for Opencart 4:

  • Before doing anything please back up your OpenCart installation so that you can revert if unexpected results happened.
  • Download the VqMod from the above download button
  • Extract the zip that you download, vQmod-oc4-master.zip
  • You will get vqmod folder and readme file and copy the vqmod directory in your OpenCart root directory, alongside the admin, catalog, extension, system, etc. directories.
  • If you’ve renamed your admin directory, you’ll have to do this bit manually for now:
    • Open vqmod/install/index.php and change $admin = ‘admin’; on around line 33 to match your new admin directory name. We have used wpadmin, so that line is $admin=’wpadmin’
    • Open vqmod/pathReplaces.php and change the line you’d add would be:
$replaces[] = array('~^admin\b~', 'wpadmin');


Now, open your website and add /vqmod/install/ at the end of the URL something like https://demo.webocreation.com/vqmod/install/. If everything is correct, you will get messages like:


vqmod installation

Errors and Solutions:

1. Administrator index.php is not writeable

vqmod issues solution

For this issue, first, check and please make sure you replace your admin folder correctly on the vqmod/install/index.php and vqmod/pathReplaces.php, and then you can check the file permission if your server can write on index.php file.


For this issue also, we need to make sure you replace your admin folder correctly on the vqmod/install/index.php and vqmod/pathReplaces.php

Example use of Vqmod in Opencart 4

Here is one demo XML file in which you show the “Special Offers” links in the main menu. Open the project in your text editor and go to vqmod folder and then the XML folder create a file named speciallink.xml and add the following lines of code:

	<version>OpenCart Version 4</version>
	<author>Rupak Nepali</author>
	<file name="catalog/view/template/common/menu.twig" error="skip">
			<search position="after"><![CDATA[
				<ul class="nav navbar-nav">
				<li class="nav-item"><a class="nav-link" href="index.php?route=product/special">Special Offers</a></li>
Vqmod xml file example for Opencart 4

Once, you add the above code and then refresh the frontend URL, then you will see a menu item added at the beginning of the Opencart top menu.

Special links in the Menu Opencart vqmod example

In this way, you can use VqMod, know how to install vqmod, and its configurations, for example, and learn how to fix issues that may occur. Hope you liked this article, please subscribe to our YouTube Channel for Opencart video tutorials. You can also find us on Webocreation Twitter and Webocreation Facebook. Please let us know if you have any questions or concerns.

How to add reports in the admin dashboard of Opencart 4?

As we were in the process of upgrading the Opencart from 3 to 4, we complete the upgrade and saw our admin dashboard reports are all gone, and it took us some time to figure out where we can enable the dashboard reports. Here is our finding which was so simple:

Empty Dashboard:

Empty dashboard

Dashboard reports

Every report is created as the dashboard extension, so to add the reports, go to admin >> Extensions >> Extensions >> Filter out with Dashboard >> Install all the extensions needed >> Edit it >> Give the width >> Enable the status >> Add sort order where you want to show and Save. As we need all of the reports so we enable all of the Dashboard reports.

Dashboard extensions reports

Read More: Dashboard extensions details of Opencart 4

With the above settings, you will be able to see reports like below:

Reports admin dashboard

In this way, you can enable or disable the required admin dashboard reports. Please don’t forget to post your questions or comments so that we can add extra topics. You can follow us at our Twitter account @rupaknpl and subscribe to our YouTube channel for opencart tutorials.

Import youtube videos as WordPress posts – free WordPress plugin

Free WordPress plugin to import youtube videos as WordPress posts, it imports youtube titles, youtube descriptions, and youtube date and assigns them to the selected author and category. Video content has become increasingly popular, and YouTube remains the go-to platform for sharing and consuming videos. If you have a WordPress website and want to import YouTube videos as WordPress Posts into your content strategy, then you can download and use this free WordPress plugin. Click below to download:

Introducing the Youtube Video Importer Plugin:

The “YouTube Video Importer” plugin helps to import YouTube videos as WordPress posts. To import you need to create a JSON file and upload it to the plugin. Download the plugin by clicking the above button and it seamlessly integrates with WordPress and makes it easy to import YouTube videos directly as posts. The plugin offers various customization and you can import it to any specified category and assign it to specific authors as well.

Install the Youtube Video Importer Plugin

Download the plugin by clicking the above button and go to the word press admin >> plugins>>add new>> upload plugin>> install now >> activate the plugin.

Upload youtube import plugins
Activate youtube JSON post plugin

Create Google Cloud Youtube API V3 API key:

Now you need to create an API key in Google Cloud to get the JSON file. For that follow the following steps:

Go to https://cloud.google.com and log in with your Gmail account and click on the “Console”

Google Console

Now agree to the “Terms of Service” and click “Agree and Continue“.

Google Cloud Terms of Services

After that, click the “Select a project”


New Project Google Cloud

Enter the “Project name” and click “Create”

New Project creation

Once you click the create, it will take some time to create the Project. Once it is created, select the project.

Select project youtube wordpress

Once you select the project, in the left menu select the “APIs & Services” >> “Enabled APIs & services”

Youtube WordPress APIs service setup


Enabled Youtube API V3

Search for “Youtube” and select “Youtube Data API v3”

Youtube Data API v3

Once you selected the YouTube Data API v3, you will see like below, click the “ENABLE” button to activate the YouTube Data API v3.

Youtube data API v3 Enable

Once you enabled the Youtube Data API v3, you need to create the credentials. To create the credentials, click the “CREATE CREDENTIALS”

Youtube Credentials API key

Once you click the Create Credentials, you will fill out the form below, select the “Youtube Data API v3” select “Public data” and click “NEXT”.

API public Data activate

You will see the API Key like below:

API key

Click the “RESTRICT KEY” and add your website or IP and assign to the API key.

Restrict Key API

Now your API key is generated. You copy that key, save it, and click DONE. Here is the API key that is generated for our website AIzaSyA_rOzyU9duJzIQZkFrBX35YkO3SvgWoDo

How to find the Youtube Channel ID?

You can find the Youtube channel ID from the URL as well, for example, if you find the URL like https://www.youtube.com/channel/UCVsTBiG6oCFg0LyrF5l37Hw then the channel ID is UCVsTBiG6oCFg0LyrF5l37Hw But sometimes you will find username at the URL like https://www.youtube.com/@OnlineGyanNepal so you can get the channel ID by entering the name in the following input field and get the channel ID.

Get the JSON file of the Youtube videos

Now the full URL is like below where the channel ID is the channel ID of your youtube and the key is the API key that you created in the Google Cloud console.


Change the above URL with your channel id and key and open it and you will find the JSON for youtube video data. So, save it as a .json file and your file is ready to upload in the Youtube JSON importer as a Post plugin.

Youtube JSON

Now, upload the saved JSON file to the “Youtube JSON Importer as Post” plugin, and select the category, and author that you assigned to the videos.

Youtube video Import as wordpress post

Once the import is completed, you will see the posts in the selected category:

Youtube Video imported as Posts


The “Youtube JSON Importer as Post” plugin helps to import youtube videos as WordPress posts, it imports youtube titles, youtube descriptions, and youtube date and assign them to the selected author and category. Hope you liked this post, please 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 a free WordPress plugin to import Youtube Videos as WordPress posts.

Free Opencart module to show WordPress blog posts in Opencart 4

Another free Opencart 4 module by the Webocreation team to show WordPress blog posts in Opencart. In the WordPress blog posts show extension you will have the option to add a custom title, change the WordPress URL, add a number of blog posts, and module status. Download the module for free from the link below:


Go to Opencart Admin

Left menu >> Extensions >> Installer

Opencart WordPress

Once installed, you can go to Extensions >> Extensions >>Choose the extension type “Modules” and in the list of modules, you will see the new module called “Show WordPress Posts“, click the install button and the installation is complete.

Configuring the “Show WordPress Posts” module

Go to Extensions >> Extensions >> Choose the extension type “Modules” and in the list of modules, go to “Show WordPress Posts” and then click Edit, and you will see the form below and start adding the details.

Opencart WordPress setting

Frontend Blog Title: This is the title that will show at the top of the blog posts.

WordPress Full URL: This module uses the WordPress REST API endpoints to fetch the posts. You just need to enter the full URL of the WordPress blog. If the blog is installed in the sub-folder then you need to enter the full URL, like https://rempub.com/blog/ or similar.

Number of Posts to Show: This will pull the number of posts to show in the front end where the module is added to the layout.

Status: Enable the status.

In this way, you can configure this WordPress Opencart module.

Add WordPress Opencart module to Layout

Once you install and configure the module, now you need to add to the layout to show at the front end. We are showing you to show on the home page, so we will add it to the home layout. To do that, go to admin >> Design >> Layout >> edit the Home and add the module and select “Show WordPress posts”. In the below screenshot, we added the module at the Content Top and Save.

WordPress Opencart layout

Frontend view of WordPress Opencart blog posts show

Here is how the WordPress blog posts are shown in the Opencart 4.

Opencart WordPress blog post show


In this way, you can show WordPress blog posts in Opencart with this free Opencart module. Please let us know if you need any support or find any issues with this Opencart extension. Please subscribe to our YouTube Channel for Opencart video tutorials and get many other Opencart free modules. You can also find us on Twitter and Facebook

Scaling E-commerce Businesses: Private Equity’s Impact on Growth Strategies

The e-commerce industry has boomed within the last few years. Technological advancements and customer preferences make it easy to scale your e-commerce business quickly. As such, it’s important to find various ways and strategies that will help scale your business. This is where private equity comes into play. 

Private equity provides an impact on your business’ growth strategies. They provide substantial capital to fuel your business’ growth and help guide your strategic decisions. With the right private equity firm, you can accelerate growth and maximize your returns. 

In this article, we’ll talk about private equities and how they can help scale your e-commerce business. 

What Is  Private Equity?

Private equity is an investment involving the purchase and ownership of shares or ownership stakes in privately-held companies. These firms typically raise funds from institutional investors, such as:

  • Pension funds
  • Endowments
  • Wealthy individuals

Then, the firm uses these funds to acquire companies they think have high growth potential. They also target companies they believe have undervalued assets or opportunities for operational improvements. A private equity fund administration is often required to manage these investments so they can make smart decisions. 

A private equity firm usually aims to gain substantial returns on their investments. Investments are typically long-term, with a typical holding period of several years. 

Benefits of a Private Equity on an E-Commerce Business 

Private equity investments provide various benefits to an e-commerce company. It’s a great way to jumpstart their business to achieve more successful operations. 

Here are some of the top benefits of private equity in an e-commerce business: 

  1. Access to Capital

First and foremost, a private equity company provides an e-commerce business access to capital. You can use the money to fund growth initiatives and capital expenditures. This provides the business with a competitive edge over its competitors. 

For example, you can use the money from a private equity fund to expand your product lines. These can help if you don’t have enough capital to release a new product. If successful, the product will bring in more money and success for your e-commerce business.

  1. Strategic Guidance and Expertise 

Private equity companies aren’t just there to bring in money. They also provide helpful guidance and expertise for your business. Many people in private equity companies are professionals with years of experience in the industry. This means you can rely on them to provide advice on how to grow your business. 

These professionals usually have access to deep insights into the e-commerce sector, market trends, and consumer behavior. They work side-by-side with the company’s management team to optimize their investments. The advice from private investors usually includes knowing when to pivot and how to scale.

  1. Operational Improvements

Another benefit of private equity companies is operational improvements. Before investing in an e-commerce company, a private equity firm will usually thoroughly analyze the company’s operations. They’ll look at which strategies are working and which ones aren’t. Afterward, they’ll decide whether they want to invest in your company. 

If a private equity company decides to invest in your company, they’ll provide you with funds and other resources for operational improvements. Remember, these companies want to optimize their investments. This means they’ll do their best to help improve the company’s processes, systems, and operations.

Private equity companies usually have a team of well-versed experts in business operations. This team can help identify areas where the company needs to improve to maximize profits.

  1. Network Industry and Connections

In the e-commerce industry, your network is very important. These people help increase your company’s visibility and open up different opportunities. Fortunately, private equity companies usually have a wide network of contacts in the industry.

These professionals also have access to potential investors, customers, and partners. They can help build relationships with these people that can benefit your business.

Private equity companies are also usually connected with other industry players, such as venture capitalists, debt providers, and merger and acquisition firms. As a result, you can access more resources and capital to help your business succeed.

  1. Long-Term Perspective and Support

Lastly, private equity companies bring a long-term perspective to the table. This means they’re willing to invest in your company for the long haul. They’re there to support you for a long time, so you don’t have to worry about losing their support quickly.

Private equity companies are there to help you grow your business. They work with you on a long-term basis so that your company can reach its full potential. This helps create stability for the company and peace of mind for the management team and shareholders.


Private equity investments can help e-commerce businesses succeed in many ways. They provide capital and other benefits for e-commerce businesses that want to achieve growth in their industry.

We’ve talked about the various benefits that private equity companies provide above. All of these can help you achieve success in the e-commerce sector. So if you’re looking for an investment partner to help your business grow, consider working with a private equity company.

Crypto Wallet Integration for E-commerce Platforms: Enabling Secure and Convenient Transaction

Cryptocurrencies have emerged as a game-changer for e-commerce transactions in today’s rapidly evolving digital landscape. As businesses and consumers seek secure and convenient payment methods, integrating crypto wallets into e-commerce platforms has become increasingly essential.

Crypto wallets offer a seamless way to transact with digital currencies, ensuring the privacy and control of funds.

This post explores the significance of crypto wallet integration in e-commerce, highlighting its role in enabling secure and convenient transactions for merchants and customers.

Understanding Crypto Wallets

Crypto wallets, also known as digital wallets or cryptocurrency wallets, are digital tools that enable users to store, manage, and transact with their cryptocurrencies. They are designed to securely store the private keys required to access and control the user’s digital assets on the blockchain.

Crypto wallets do not store the currencies themselves; instead, they store the keys that allow users to access their funds on the blockchain network.

Types of Crypto Wallets

There are several types of crypto wallets available, each with its characteristics and level of security:

  • Hardware Wallets: These wallets are physical devices (e.g., USB drives) that store private keys offline, providing enhanced security by isolating the keys from potential online threats.
  • Software Wallets: Software wallets are applications installed on computers or mobile devices. They can be further categorized into:
    • A. Desktop Wallets: Installed on a computer and accessible only from that device.
    • B. Mobile Wallets: Installed on smartphones or tablets, offering convenience and mobility.
  • Online Wallets: Also known as web wallets, these wallets operate on cloud servers and can be accessed through web browsers. While they provide ease of use and accessibility, they are considered less secure than hardware or software wallets.

Benefits of Using Crypto Wallets in E-commerce

Integrating crypto wallets into e-commerce platforms brings several advantages:

  • Security: Crypto wallets employ encryption techniques to secure private keys, protecting funds from unauthorized access and potential hacks.
  • Privacy: Transactions with crypto wallets offer anonymity, as personal information is not directly tied to the transactions.
  • Fast and Borderless Transactions: Cryptocurrencies enable quick and frictionless transactions, especially for cross-border payments, bypassing traditional banking systems.
  • Lower Transaction Fees: Cryptocurrencies often have lower transaction fees than traditional payment methods, benefiting merchants and customers.
  • Empowering Financial Control: With crypto wallets, users have full control over their funds without relying on intermediaries, providing a sense of empowerment and ownership.

Integrating Crypto Wallets in E-commerce Platforms

Integrating crypto payments in business operations has emerged as a transformative trend in e-commerce. With the increasing popularity and adoption of cryptocurrencies, businesses recognize the value of incorporating crypto wallets into their e-commerce platforms.

Overview of Popular E-commerce Platforms Supporting Crypto Payments

As cryptocurrencies gain popularity, several prominent e-commerce platforms have started supporting crypto payments.

Some popular platforms include:

  • Shopify: Shopify has integrated with various crypto payment gateways, allowing merchants to accept cryptocurrencies such as Bitcoin, Ethereum, and Litecoin.
  • WooCommerce: This WordPress-based e-commerce platform offers plugins that enable seamless integration with crypto payment gateways, expanding payment options for merchants.
  • Magento: Magento, a widely used e-commerce platform, has also embraced cryptocurrencies by providing extensions and integrations for accepting digital currencies.

Steps to Integrate a Crypto Wallet into an E-commerce Platform

  • Select a compatible crypto payment gateway: Choose a reliable one that aligns with the e-commerce platform’s requirements and supports the desired cryptocurrencies.
  • Set up a crypto wallet: Create a wallet to securely store and manage the received digital currencies. Select a suitable wallet type based on security, ease of use, and compatibility with the chosen payment gateway.
  • Configure the payment gateway: Connect the chosen payment gateway to the e-commerce platform and configure the settings, including API integration, pricing, and supported currencies. 
  • Implement the payment option: Customize the e-commerce platform’s checkout process to include the crypto payment option. This may involve modifying the user interface, adding payment buttons or widgets, and integrating with the selected payment gateway’s API.
  • Test and launch: Thoroughly test the integration to ensure seamless functionality and conduct end-to-end transactions. Once testing is successful, launch the crypto payment option for customers.

Technical Considerations and Security Measures

Crypto wallet integration into e-commerce platforms necessitates careful attention to technical considerations and security measures:

  • API integration: Ensure the e-commerce platform’s API supports the chosen crypto payment gateway and allows seamless communication between the platform and the wallet.
  • Wallet security: Implement strong security measures for the crypto wallet, including robust encryption, multi-factor authentication, and offline storage options like hardware wallets.
  • Transaction monitoring: Implement real-time transaction monitoring and fraud detection mechanisms to identify and mitigate suspicious activities or fraudulent transactions.
  • Compliance with regulations: Adhere to applicable legal and regulatory requirements, such as KYC (Know Your Customer) and AML (Anti-Money Laundering) regulations, to ensure compliance and protect against illicit activities.

Enhancing Security for Crypto Transactions

In the crypto world, secure transactions are of paramount importance due to the decentralized and irreversible nature of blockchain-based transactions. Here’s why secure transactions are crucial:

  • Protecting Digital Assets: Cryptocurrencies are digital assets with monetary value. Ensuring secure transactions safeguards users’ funds from unauthorized access, theft, or fraud.
  • Trust and Confidence: Secure transactions foster trust and confidence among users, encouraging the widespread adoption of cryptocurrencies. When users feel confident in the security of their transactions, they are more likely to engage in crypto-related activities.
  • Privacy and Anonymity: Cryptocurrencies provide a level of privacy and anonymity. Secure transactions protect users’ identities and transaction details, preserving their privacy in the digital realm.

Implementing Two-Factor Authentication and Encryption

Two-Factor Authentication (2FA): 2FA adds an extra layer of security by requiring users to provide two different verification forms. This could include something the user knows (e.g., a password) and something the user possesses (e.g., a verification code sent to their mobile device). Implementing 2FA for crypto wallets adds a barrier against unauthorized access.

Encryption: Encryption converts sensitive data into an unreadable format, which can only be decrypted with the correct encryption key. Encrypting data stored in crypto wallets and during transmission protects transactions from unauthorized interception and access.

Robust encryption algorithms ensure the confidentiality and integrity of the data involved in crypto transactions.

Benefits for Merchants and Customers 

Crypto wallets offer numerous benefits for both merchants and customers:

  • Lower transaction fees and reduced chargebacks: Using crypto wallets can significantly decrease transaction costs for merchants and mitigate the risk of chargebacks, saving time and resources.
  • Global accessibility and elimination of currency conversion: With crypto wallets, businesses can accept payments from customers worldwide without needing currency conversions, facilitating seamless cross-border transactions.
  • Increased privacy and control over personal data: Crypto wallets provide users greater privacy and anonymity, reducing the risk of identity theft and data breaches. Merchants can conduct transactions without storing extensive customer data, simplifying compliance with data protection regulations.
  • Enhanced financial control: By utilizing crypto wallets, merchants and customers have direct ownership and control over their digital assets, eliminating the need for intermediaries and enabling greater financial autonomy.


Integrating crypto wallets into e-commerce platforms offers a compelling solution for secure and convenient transactions. By leveraging the benefits of crypto wallets, such as enhanced security, privacy, fast transactions, and lower fees, businesses can cater to the evolving needs of their customers in the digital age.

With the availability of popular e-commerce platforms supporting crypto payments and the clear steps for integration, businesses can tap into the growing crypto market and empower their customers with greater financial control.