Jump to content

Highest Reputation Content

#808 For those with issues, Few Tips

Posted by Jacob Bowen on 31 July 2013 - 08:37 PM

Hello People, So surfing thru the forums on alot of different sites that pertain to opencart, and even here on the openshop forum. I've noticed that people have alot of failings due to common things they did not due.

Remember, Always Delete your VqCache when adding/updating vqmods

Always keep your Cache folder clean (Located at /system/cache/)

Always Do backups, and with that do not use the built in backup/restore system in opencart as it CAN NOT HANDLE large databases(Mines roughly 40MB, couldn't use the backup once my DB became around 10-15MB)

When testing new Mods/Extentions, always use a test site, even if its http://www.stupiddomainname.com/Test , it doesn't have to be a subdomain.

With those things said, Here are a few files of use you guys might like:


A opencart Optimized .htaccess

<IfModule pagespeed_module>
	ModPagespeed off
	ModPagespeedEnableFilters move_css_above_scripts,move_css_to_head,rewrite_style_attributes,flatten_css_imports,make_google_analytics_async,combine_javascript,local_storage_cache
	ModPagespeedEnableFilters convert_jpeg_to_progressive,inline_preview_images,resize_mobile_images,remove_comments,collapse_whitespace,sprite_images,lazyload_images
	#ModPagespeedDisableFilters combine_css

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin: "*"
	BrowserMatch MSIE ie
	Header set X-UA-Compatible "IE=Edge,chrome=1"
    # mod_headers can't match by content-type, but we don't want to send this header on *everything*...
    <FilesMatch "\.(js|css|gif|png|jpe?g|pdf|xml|oga|ogg|m4a|ogv|mp4|m4v|webm|svg|svgz|eot|ttf|otf|woff|ico|webp|appcache|manifest|htc|crx|xpi|safariextz|vcf)$" >
      Header unset X-UA-Compatible

<FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"

AddType application/javascript         	js
AddType audio/ogg                      	oga ogg
AddType audio/mp4                      	m4a
AddType video/ogg                      	ogv
AddType video/mp4                      	mp4 m4v
AddType video/webm                     	webm
AddType image/svg+xml              		svg svgz 
AddEncoding gzip                       	svgz                      
AddType application/vnd.ms-fontobject  	eot
AddType application/x-font-ttf    		ttf ttc
AddType font/opentype                  	otf
AddType application/x-font-woff        	woff                                      
AddType image/x-icon                   	.ico
AddType image/webp                     	webp
AddType text/cache-manifest            	appcache manifest
AddType text/x-component               	htc
AddType application/x-chrome-extension 	crx
AddType application/x-xpinstall        	xpi
AddType application/octet-stream       	safariextz
AddType text/x-vcard                   	vcf

<FilesMatch "\.combined\.js$">
  Options +Includes
  AddOutputFilterByType INCLUDES application/javascript application/json
  SetOutputFilter INCLUDES
<FilesMatch "\.combined\.css$">
  Options +Includes
  AddOutputFilterByType INCLUDES text/css
  SetOutputFilter INCLUDES

<IfModule mod_deflate.c>

<IfModule mod_setenvif.c>
  <IfModule mod_headers.c>
    SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
    RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding

<IfModule filter_module>
  FilterDeclare   COMPRESS
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/html
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/css
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/plain
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/xml
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/x-component
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/javascript
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/json
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/xml
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/xhtml+xml
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/rss+xml
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/atom+xml
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/vnd.ms-fontobject
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $image/svg+xml
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/x-font-ttf
  FilterProvider  COMPRESS  DEFLATE resp=Content-Type $font/opentype
  FilterChain     COMPRESS
  FilterProtocol  COMPRESS  DEFLATE change=yes;byteranges=no

<IfModule !mod_filter.c>
  AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
  AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
  AddOutputFilterByType DEFLATE image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype

<IfModule mod_expires.c>
  ExpiresActive on

  ExpiresDefault                          		"access plus 1 month"
  ExpiresByType text/cache-manifest       		"access plus 0 seconds"
  ExpiresByType text/html                 		"access plus 0 seconds"
  ExpiresByType text/xml                  		"access plus 0 seconds"
  ExpiresByType application/xml           		"access plus 0 seconds"
  ExpiresByType application/json          		"access plus 0 seconds"
  ExpiresByType application/rss+xml       		"access plus 1 hour"
  ExpiresByType application/atom+xml      		"access plus 1 hour"
  ExpiresByType image/x-icon          	  		"access plus 1 month" 
  ExpiresByType image/gif                 		"access plus 1 month"
  ExpiresByType image/png                 		"access plus 1 month"
  ExpiresByType image/jpg                 		"access plus 1 month"
  ExpiresByType image/jpeg                		"access plus 1 month"
  ExpiresByType video/ogg                 		"access plus 1 month"
  ExpiresByType audio/ogg                 		"access plus 1 month"
  ExpiresByType video/mp4                 		"access plus 1 month"
  ExpiresByType video/webm                		"access plus 1 month"
  ExpiresByType text/x-component          		"access plus 1 month"
  ExpiresByType font/truetype             		"access plus 1 month"
  ExpiresByType font/opentype             		"access plus 1 month"
  ExpiresByType application/x-font-woff   		"access plus 1 month"
  ExpiresByType image/svg+xml             		"access plus 1 month"
  ExpiresByType application/vnd.ms-fontobject 	"access plus 1 month"
  ExpiresByType text/css                  		"access plus 1 year"
  ExpiresByType application/javascript    		"access plus 1 year"
  <IfModule mod_headers.c>
    Header append Cache-Control "public"

<IfModule mod_headers.c>
  Header unset ETag

FileETag None

BrowserMatch "MSIE" brokenvary=1
BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
BrowserMatch "Opera" !brokenvary
SetEnvIf brokenvary 1 force-no-vary

 <IfModule mod_rewrite.c>
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ $1.$3 [L]
Options +FollowSymlinks
Options -Indexes

<FilesMatch "\.(tpl|ini|log)">
 Order deny,allow
 Deny from all

RewriteEngine On

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

Do you have ALOT of Items in your OC site? Is it running Very slow(4+ seconds to load)

More then likely this is due to OC's shitty handling of queries for product counts, Try these fix's:


If you are running Try this Vqmod script (Just copy/paste into a file in your XML file such as making a file called say "Prodcutfix.xml"

    <!-- Created using vQmod XML Generator by UKSB - http://uksb.github.com/vqgen/ //-->
    <id><![CDATA[Fast Category Product Count Mod]]></id>
    <author><![CDATA[midgette ([email protected])]]></author>
    <file path="admin/model/catalog/" name="product.php">
    <operation info="Update category table whenever products are added to product_to_category table.">
    <search position="after" offset="1" index="1"><![CDATA[$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '" . (int)$product_id . "', category_id = '" . (int)$category_id . "'");]]></search>
    <add><![CDATA[ $this->updateCategory();]]></add>
    <operation info="Update category table whenever products are updated in product_to_category table.">
    <search position="after" offset="2" index="2"><![CDATA[$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '" . (int)$product_id . "', category_id = '" . (int)$category_id . "'");]]></search>
    <add><![CDATA[ $this->updateCategory();]]></add>
    <operation info="Update category table whenever products are deleted from product_to_category table.">
    <search position="after" index="3"><![CDATA[$this->cache->delete('product');]]></search>
    <add><![CDATA[ $this->updateCategory();
    public function updateCategory() {
    $query = $this->db->query("SELECT COUNT(*) as 'haveqty' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" . DB_PREFIX . "category' AND COLUMN_NAME = 'qty'");
    if (empty($query->row['haveqty'])) {
    $this->db->query("ALTER TABLE " . DB_PREFIX . "category ADD COLUMN qty INT(11) DEFAULT 0 AFTER `status`");
    $this->db->query("UPDATE " . DB_PREFIX . "category SET qty = (SELECT COUNT(*) FROM " . DB_PREFIX . "product_to_category WHERE category_id = " . DB_PREFIX . "category.category_id)");
    <file path="admin/controller/setting/" name="setting.php">
    <search position="after" offset="5" index="1"><![CDATA[if (isset($this->request->post['config_product_count'])) {]]></search>
    <add><![CDATA[ $query = $this->db->query("SELECT COUNT(*) as 'haveqty' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" . DB_PREFIX . "category' AND COLUMN_NAME = 'qty'");
    if (empty($query->row['haveqty'])) {
    $this->db->query("ALTER TABLE " . DB_PREFIX . "category ADD COLUMN qty INT(11) DEFAULT 0 AFTER `status`");
    $this->db->query("UPDATE " . DB_PREFIX . "category SET qty = (SELECT COUNT(*) FROM " . DB_PREFIX . "product_to_category WHERE category_id = " . DB_PREFIX . "category.category_id)");
    <file path="catalog/controller/common/" name="header.php">
    <search position="replace" index="1"><![CDATA[$product_total = $this->model_catalog_product->getTotalProducts($data);]]></search>
    <add><![CDATA[//$product_total = $this->model_catalog_product->getTotalProducts($data);]]></add>
    <search position="replace" index="1"><![CDATA['name' => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),]]></search>
    <add><![CDATA['name' => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $child['qty'] . ')' : ''),]]></add>
    <file path="catalog/controller/module/" name="category.php">
    <search position="replace" index="1"><![CDATA[$total = $this->model_catalog_product->getTotalProducts(array('filter_category_id' => $category['category_id']));]]></search>
    <add><![CDATA[//$total = $this->model_catalog_product->getTotalProducts(array('filter_category_id' => $category['category_id']));]]></add>
    <search position="replace" index="1"><![CDATA[$product_total = $this->model_catalog_product->getTotalProducts($data);]]></search>
    <add><![CDATA[//$product_total = $this->model_catalog_product->getTotalProducts($data);]]></add>
    <search position="replace" index="1"><![CDATA[$total += $product_total;]]></search>
    <add><![CDATA[//$total += $product_total;]]></add>
    <search position="replace" index="1"><![CDATA['name' => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),]]></search>
    <add><![CDATA['name' => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $child['qty'] . ')' : ''),]]></add>
    <search position="replace" index="1"><![CDATA['name' => $category['name'] . ($this->config->get('config_product_count') ? ' (' . $total . ')' : ''),]]></search>
    <add><![CDATA['name' => $category['name'] . ($this->config->get('config_product_count') ? ' (' . $category['qty'] . ')' : ''),]]></add>
    <file path="catalog/controller/product/" name="category.php">
    <search position="replace" index="1"><![CDATA[$product_total = $this->model_catalog_product->getTotalProducts($data);]]></search>
    <add><![CDATA[//$product_total = $this->model_catalog_product->getTotalProducts($data);]]></add>
    <search position="replace" index="1"><![CDATA['name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),]]></search>
    <add><![CDATA['name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $result['qty'] . ')' : ''),]]></add>

Or if you are running the new 1.5.6 Try this:


Open /catalog/controller/module/category.php and find this:

					'name'        => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),

Replace it with:

					'name'        => $child['name'] . ($this->config->get('config_product_count') ? : ''),

Also Find:

				'name'        => $category['name'] . ($this->config->get('config_product_count') ? ' (' . $total . ')' : ''),

Then replace with:

				'name'        => $category['name'] . ($this->config->get('config_product_count') ? : ''),

Then open /catalog/controller/common/header.php


Find line:

						'name'  => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),

Replace with:

						'name'  => $child['name'] . ($this->config->get('config_product_count') ? : ''),

The above fix for 1.5.6 Is a hack and slash fix, USE AT YOUR OWN RISK, as there is not a VQmod made yet for 1.5.6 that works,.









Well those are a few things, I'll add more little tid bits here and there and fix this up a bit, If MaxD wants to sticky this i'll make sure its updated so that people can have some go to place for small fix's.

  • 2

#995 how to backup news in news extension

Posted by Jacob Bowen on 27 August 2013 - 05:04 AM

Everything is stored in the database, OC/OS is NOT a file based storage system. Its all MySQL

  • 1

#984 Suggestions and feature requests

Posted by MaxD on 26 August 2013 - 10:52 AM

Yeah, that's a bunch of suggestions!

You can just overwrite to upgrade this time. But in general its a rule to delete vqmod/xml/OpenShop folder before.
  • 1

#956 Suggestions and feature requests

Posted by MaxD on 21 August 2013 - 08:20 PM

I havn't seen POS yet ))

  • 1

#953 how to remove menu in small screen?

Posted by MaxD on 21 August 2013 - 09:05 AM

Omg, my pleasure  :D

  • 1

#951 Suggestions and feature requests

Posted by MaxD on 21 August 2013 - 09:01 AM

ah more suggestion :D

row highlight when mouse over in admin would be great so i can see clearly

There is light yellow row highlight at OpenShop, take a look at the demo - http://openshop.org....ute=tool/tweaks

Isn't it visible for you?

  • 1

#762 Adding link in top menu

Posted by MaxD on 21 July 2013 - 02:40 AM

You can add the link to top menu another way. Create a category and specify the link at second tab.

  • 1

#2262 Cron job Clear Cache

Posted by MaxD on 17 July 2015 - 11:11 AM

Mail me your shop address to [email protected] and I will write you URL back.

  • 1

#2259 Cron job Clear Cache

Posted by MaxD on 17 July 2015 - 10:56 AM



Cache is cleared automatically if it is too old. All time values can be changed at system/lightning/config.php

Also cache can be cleared by opening special URL.

  • 1

#1636 Where is my previous data

Posted by MaxD on 08 April 2014 - 08:53 AM



You should use OpenShop-Extension.zip to upgrade existing shop. I advise you to return to backup - if its possible.


If no, try to edit config.php and admin/config.php and specify correct DB_PREFIX for your data.

  • 1

#1628 Admin Menu Icons

Posted by Ernst Jacob on 05 April 2014 - 02:47 PM

Oops, I just finished my own implementation into my New v1.7 Version, I took the Variables from the VQMOD .xml and implanted them with hardcoding into my Admin Section. Again, one less VQMOD required, every day, I move forward to eliminate them out of the XML-Sub.


This is what's left at present. I hope to implement most of them into the standard files soon.

It's my way of keeping the Serverload at a lower level , and prevent future VQMOD-incompatibilities wherever possible. Most Users work on shared Servers with hunderds of  'Inhabitants', every 'Gram' will eventually make a difference, if it ever comes to Traffic...


I've learned it this way, playing since the mid 90'es with Perl based Platforms and 'then' very small and slow Servers. So, keeping it will not harm, and it forces me to get used this this PHP stuff faster!


I love OpenShop, it's a great thing to make something out of it!


Best regards and thank you for your continued Engagement, something, many former 'Freaks' seem to have lost, at least from my point of view.





  • 1

#1619 Admin Menu Icons

Posted by Ernst Jakob on 30 March 2014 - 02:20 AM

It's a great Extension, but adding additional Icons to other Mods's is not so easy for many, so, I have created a small Workaround to avoid screwing up when trying to add Icons to New Links in the Admin Menu Section.

It's my first small contribution to this great Software.

best regards









  • 1

#1255 idea for news + rss

Posted by MaxD on 13 November 2013 - 01:03 PM

Let me know when pavblog will become a nice replacement for OpenShop news module.


All $this-> ... things are simple refs to "global" objects (like request, session and so on). I don't know why Daniel decided to stuff them into controller object.


$a += 3; is equal to $a = $a + 3; 

$a .= "x"; is equal to $a = $a . "x";


Dot (.) is strings concantenation operand at PHP. "a" . "b" = "ab"

  • 1

#1218 [SOLVED] Error when viewing news

Posted by Ivan Pramono Susanto on 09 November 2013 - 11:26 AM

for fresh install before using news mod it's ok

but after installing news that would be a problem

see my other post about news and how to upgrade it's database

hope it will help


  • 1

#2022 Remove Powered by OpenShop (based on OpenCart)

Posted by Ariel Chen on 05 January 2015 - 05:19 PM

you cannot do it. it's not legal. this people sit about hours trying to make you world better for free and now you wanna delete their rights?

what's wrong with you?!

  • 1

Community Skin by Fredson Nunes Junior