SkillAgentSearch skills...

V2pagecache

Page Cache for OpenCart V2.X

Install / Use

/learn @budgetneon/V2pagecache
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

pagecache

v2pagecache - Fast, free, open source page cache for opencart v2.X

VERSION

Version 1.4

##IMPORTANT NOTE

This is beta quality software, with VERY LITTLE support. Opencart has made numerous changes to things that are important to a pagecache. For example, $registry and $response used to be global...that changed in OpenCart 2.3. Several other changes to areas like session, cart, etc, also happened. We have done testing, but not extensively. You are "ON YOUR OWN" to test this module.

Also, if you're running 3rd party modules or templates that could cause a single url to output different content, the pagecache will likely not work well. We cannot, an will not help, with issues encountered with 3rd party modules. However, if you find and fix an issue, please feel free to submit it as a pull request to http://github.com/budgetneon/v2pagecache.

In short, we are very unlikely to be to able to help with issues. We are not a software development shop. We made this module for our own use, and released it open source so others could use it as well. We don't have the resources, however, to offer support.

DESCRIPTION

This page level cache for opencart version 2.x is a port of our very similar page cache for opencart 1.5.x, which you can find on github. Please see octurbo.com for the full story behind both of these opencart modules.

This page cache is simple, but it's very fast and also includes an administration panel. Installation is straightforward, using the ocmod installer that is built into opencart since version 2.X.

It has been tested so far only in an apache/mod_php environment, but should also work under fastcgi, provided you are using PHP 5.4 or greater.

This is a new piece of software, and unlike our page cache for earlier versions of opencart, we aren't running this in production. Thus, we recommend you test it thoroughly before deploying to production. See the CAVEATS section at the bottom for more detail.

Requirements

  • Opencart 2.X
  • PHP 5.4 or greater

Installation

First, you need to install a separate opencart mod that fixes problems with the stock opencart installer:

  • Install this "Quick Fix" module that fixes the opencart extension loader so that it doesn't require you to enable ftp
  • Go to Extensions -> Modifications, and refresh the modification cache:

Refreshing the modification cache

Now, you can install the page cache:

  • Download the v2pagecache-1.0.1.ocmod.zip file
  • Log into your opencart admin panel
  • Go to Extensions -> Extension Installer, and upload this extension
  • Now, go to Extensions -> Modules, and click the green button install the module, then the blue button to enable and configure it.

Install the Module

  • Now that you're on the module's config page, enable the page cache.

Enabling the Page Cache

Manual Installation

This extension has to make changes to your main index.php before it will work. There is an "Enable Cache" button in the extension's admin page that can make those changes. However, in some environments, this button may not be able to do that, due to file permissions, a customized installation of opencart, etc. If that's the case, you'll have to make the changes to the index.php manually.

NOTE: THESE MANUAL INSTALLATION INSTRUCTIONS ARE ONLY FOR PEOPLE HAVING ISSUES WITH THE "ENABLE CACHE" BUTTON WITHIN THE PAGECACHE ADMIN PANEL.

There's two changes that need to be made.

  1. At the top of your main index.php file, find this section of code:
    if (is_file('config.php')) {
        require_once('config.php');
    }  

Then, add these 6 lines, exactly as shown below, just after the section of code above:

require_once(DIR_SYSTEM . 'library/v2pagecache.php');         //V2PAGECACHE
$pagecache = new V2PageCache();                               //V2PAGECACHE
if ($pagecache->ServeFromCache()) {                           //V2PAGECACHE
    // exit here if we served this page from the cache        //V2PAGECACHE
    return;                                                   //V2PAGECACHE
}                                                             //V2PAGECACHE

2. At the very bottom of your main index.php, find this section of code:

For opencart 2.0.x and 2.1.x:

    // Output
    $response->output();

For opencart 2.2.x:

    // Application
    require_once(DIR_SYSTEM . 'framework.php');

For opencart 2.3.x

    // Startup
    require_once(DIR_SYSTEM . 'startup.php');
    start('catalog');

Then, add these 3 lines of code, just after the section of code above: For opencart 2.0.x through opencart 2.2.x:

if ($pagecache->OkToCache()) {                                //V2PAGECACHE
    $pagecache->CachePage($response);                         //V2PAGECACHE
}                                                             //V2PAGECACHE

For opencart 2.3.x or greater:

if ($pagecache->OkToCache()) {                                //V2PAGECACHE
    $pagecache->CachePage();                                  //V2PAGECACHE
}                                                             //V2PAGECACHE

OVERVIEW

Very early in opencart's main index.php file, some lines of code are added when you enable the page cache. This section of code looks to see if there's a previously cached file for the url that's currently being requested. If there is, and it's not expired, the request is served from the cache. Because this is very early in the index.php file, and because it exits if served from the cache (via the return() call), it skips over almost all of the processing that opencart normally does. No database calls, etc..so it's very fast.

Later, towards the end of the index.php, a few more lines of code are also added. This is very near the end of the file, after whatever page was requested has already been generated by opencart, and served to the end user. At this point, the code is checking if we should take the page that opencart just generated and save it to the cache. This adds a small amount of overhead because it writes out the content twice (once to the browser, and once to the cache file). That is, however, the only notable overhead added, and it's very small.

ADMIN PANEL

This extension includes an easy to use admin panel that allows you to:

  • Enable and disable the cache. (adds and removes code from your index.php file)
  • Purge cached files (either all of them, or just the expired ones)
  • View statistics on the number of cache files, as well as consumed disk space, for both valid and expired items
  • View, but not change, the settings (you have to manually edit system/library/v2pagecache.php to change settings).

Here's a screenshot of the admin panel:

V2Pagecache Admin Panel Screenshot

SETTINGS

In order to keep this page cache lightweight, we do not store settings in the opencart database like a normal opencart extension would. This allows a cached page to be served with almost no opencart code running, and no database calls at all. Therefore, to make changes to settings, you have to hand edit the v2pagecache.php file. Here's the settings you can safely change:

// These are all near the top of the v2pagecache.php file  
private $expire='14400'  ; // expire time, in seconds 14400 = 4 hours
private $lang='en'       ; // default language for site
private $currency='USD'  ; // default currency for site

private $addcomment=true ; // set to true to add a comment to the bottom
                            // of cached html pages with info+expire time
                            // only works where headers_list() works

private $wrapcomment=true; // if this is set to true (and $addcoment is
                           // also set to true), we will use a comment
                           // that most html minifiers won't remove, like:
                           // <!--[if IE]><!--comment--><![endif]-->


private $end_flush=false ; // set to true to do an ob_end_flush() before
                           // serving a cached page. Slightly faster
                           // "first byte received" times, but it creates
                           // issues in some environments, hence, it's off
                           // by default

// If using a 3rd party theme that serves different html to
// mobile/tablet/desktop, you can enable "cachebydevice"
// For the standard opencart theme, use false
// For journal theme, use 'mobiledetect';
// For Opencart Mobile Framework, use 'categorizr'
// For Omtex Mobile Framework, use 'categorizr'
//
// make sure only one of the three lines below is uncommented
private $cachebydevice=false;
//private $cachebydevice='mobiledetect';
//private $cachebydevice='categorizr';


private $skip_urls= array(
    '#checkout/#',
    '#product/compare#',
    '#/captcha#',
    '#account/#',
    '#register/#'
);

A new notes on these settings:

  • $expire : Because it's in the declaration section of the class, your options to set this are limited...you can't, for example, do $expire=242460. Just figure out the number of seconds you want cached pages to exist before they expire. We used 14400, which is 4 hours.
  • $lang and $currency : We cache pages for different languages and currencies in different files. These two settings control what the default language and/or currency is if we get an http request that does not have the session variable(s) for each respective setting already set.
  • $addcomment : Set to true if
View on GitHub
GitHub Stars60
CategoryDevelopment
Updated11mo ago
Forks27

Languages

PHP

Security Score

72/100

Audited on Apr 21, 2025

No findings