Why is that so good?

  1. First is the speed. It's faster than Amazon.
  2. Next thing is Ajax - pages are loaded without reloading. Just content is loaded and no page refresh.
  3. 90% ajaxfied pages in customer and admin areas. 80% ajaxfied forms in admin area.
  4. Another good thing that all pages are clean URL even in the admin area.
  5. Fully and easy customizable. It’s plain and pure PHP. No 3rd party classes or frameworks – just PHP.
  6. Own templates engine similar to Smarty and well documented. It makes it very fast generated and also cached. Also easy to code with it saving time from writing PHP tags every time.
  7. Images are resized with ImageMagick(Photoshop 100% quality) and cached. All images auto-generation script included. Say product details has big images, products list has small images – it’s not only products, also all other images types.


What customers mostly need is in popups

  1. Product quicklook.
  2. View cart.
  3. Checkout.
  4. Login.
  5. Registration.
  6. My account with tabs.
  7. Wishlist


What features are here in the Customer area

  1. Homepage details with banners and testimonials. Homepage featured products, bestsellers, most viewed products, new arrivals. Category has featured products as well if defined.
  2. Products with quicklook, variants, options, wholesale prices, multiple images(Zoom preview effect), variant images. Options and variants modify price and weight. Social share links. Product details page tabs: description; related products; recommended products(random); send to friend.
  3. Categories, Brands, Blogs with moderated comments, Static Pages, Contact Us, Search products, News, Newsletter subscriptions.
  4. reCaptcha used to avoid guests to spam.
  5. Account details with orders history.
  6. Login, register, ajaxfied cart, ajaxfied checkout, ajaxfied profile, ajaxfied wishlist.
  7. Realtime cart and checkout calculations.
  8. Products pagination, sorting options.
  9. Email notifications for order, order status, new testimonial, new blog comment, contact us form, user registration.
  10. Instant search
  11. Support Desk – tickets can be submitted as Contact Us form and as Ask a question about product
  12. Products filter on brands, categories and search pages. Products filter allows to narrow products by Brand, Price, Products Options.
  13. Buy with one click – allow customer to send his phone to your email so you guide customer how to buy the item
  14. Products reviews – fully ajaxfied products reviews
  15. Abandoned cart reminder – sends two emails, after one hour and after 24 hours.
  16. Gift Cards
  17. PDF invoice
  18. Multi-currency
  19. Multi-language
  20. Recently viewed products, saved in user's session
  21. Remember user's login session(cookie), only for customers - admin's login does not remembered.
  22. Tawk.to Free live chat support


What features are here in the Admin area


First is meta tags on all pages are customizable. Next is all pages has own configurable clean URLs. Another is that each feature has many other options. And the last one is the WYSIWYG editor to customize all descriptions.

  1. Dashboard is displaying main statistics of your sales, bestsellers and most viewed products
  2. Orders – search orders, see order details, change order status, print invoice.
  3. Discount coupons – most needed options are implemented.
  4. Users with country/state dynamic drop-downs. Create new user – set it customer or admin.
  5. Membership levels, if you don’t use just have no membership levels defined.
  6. Products: all the needed details, images drag & drop, options, variants(you control which variants are exists or not), variant images, wholesale pricing, related products.
  7. Categories: unlimited subcategories levels, each category has own featured products, easy featured product selection, all needed category details, move category to another category/subcategory, category icon, category banners.
  8. Brands: All needed details with brand image(logo for example)
  9. Import/Export all catalog items
  10. Content: Blogs, testimonials, static pages, homepage(same as category page customizer)
  11. Shipping methods: offline shipping methods only supported for now. Realtime shipping methods module exists and need personal custom work. Shipping method can be as National(your country) and International(customer from another country)
  12. Shipping charges – you are free to set shipping charges for any destination zone and values per many different params.
  13. Payment methods: Stripe for credit cards and Paypal. Also offline payment methods. BrainTree module on request.
  14. Taxes – you are free to define taxes for any destination zone, membership level, set where tax will be applied. You can disable taxes if you don’t use them. Also set tax name, for example “VAT”.
  15. Destination zones – set zones by country, state, city, zipcode. City and zipcode support masks – just include ’%’ into string and it will mean that customer’s city/zipcode should just include that value.
  16. Manage countries and states
  17. General settings, Company information, Blog settings
  18. Easy to translate by export/import language variables.
  19. Support Desk
  20. Gift Cards
  21. PDF invoice
  22. Multi-currency management
  23. Multi-language management
  24. Roles management – you can define any page access to certain admin account
  25. Statistics
  26. Translate mode – edit language variables on the fly
  27. Design theme color


What is good on backend

  1. Own templates engine similar to Smarty but adapted even for Entry Level developer.
  2. Templates are multilingual - need little personal custom work, but for one language you can easy translate. They are stored in cache. JavaScript using {lng} tags as well and stored in cache as well.
  3. Easy only one settings.php file with development mode,
  4. In live mode(not development): JavaScript is obfuscated(it saves up to 90% of script size); CSS, HTML are in one line to save byte on line breaks.
  5. Images are resized with ImageMagick(Photoshop quality). Images are not displayed in full size - they are resized to the size of particular place where they are displayed. Resized images are cached and stored under the separate directory.
  6. Clean PHP core structure. No .php pages - just clean URLs. "index.php" processing all scripts and executed from .htaccess just from any URL.


Who made this E-Commerce CMS

  1. 14 years E-Commerce experience
  2. 11 years freelance. Around 200 successful projects
  3. Browse Upwork profile https://www.upwork.com/fl/ecommerce
  4. Author and owner of social network http://owohho.com (first project to create the core)


This is just a quick overview of SPA-Cart.


Thank you for reading this article. More things are to come.


Scripts structure


It has just few main folders

  1. Includes
  2. Pages
  3. Templates


All functions are with the includes/ folder.


All pages we see are in the pages/ folder. The file to process them is only one - index.php. It parse URL for example the /help url will load the pages/help.php script. So it makes all pages clean URLs.


Templates are grouped in the templates folder under folders same names as scripts under the pages/ folder.


Mobile version is very similar scripts under the templates/mobile/ folder.

Templates engine support PHP tags. Also it has own tags.


Supported tags are


a. Any template variable can be {$var} - it's like <?php echo $var; ?>. If it's array or object - use same way as PHP, for example {$var['var']}


{foreach $array as $k=>$v}



will be


foreach ($array as $k=>$v) {


You still can insert {$v} tag


And so on. So instead of <?php CODE ?> you simple write {CODE}, similar what saves you time. Look below to learn more(no PHP tags in examples).

c. {if $tmp == '1' or $var == '2'} {/if}


will be


if ($tmp == '1' or $var == '2') {


Same is

{elseif [CODE]}





{php $var = 1+2;}

It's just to wrap to the inside content.


e. {price $var}

It will ouput currency symbol and price with .00 at the end.


f. {weight $var}

It will ouput weight symbol and weight with .00 at the end.


g. {include="TEMPALTE PATH"}


for example {include="common/products.php"}


h. {lng[Hello world]} - language variable. Useful if you translate or use multi-lingual site.

All tags and {lng..} stored in cache and not processed on every page load.

{lng[Hello|lower]} - lowcase.
{lng[Hello|js]} - replace line breaks and " character with \".
{lng[Hello|escape]} - replace " character with \".

You can also use {lng} in JavaScript - they are processed as well. JavaScrpt already do all the work so it does not support additonal modifiers like "lower".


i. Easier than {php } for assignments
{assign $var=1+2}


$var = 1+2;



Full templates engine is in the includes/func/func.core.php file

function get_template_contents


Easy to customize or add new template tags for even new developer.

Here I write how to use MySQL syntaxes with SPA-Cart. MySQL or MySQLi - it is same functions.


As you know PHP function is simple mysql_query. But it makes complicated to work with data.


SPA-Cart MySQL connection is wrote in $db variable.


Here are functions list



$db->all("SELECT * FROM table");


It will output array of table.



$db->row(SELECT * FROM table WHERE field='$value'");


It will output just a line as array. No need to add "LIMIT 1".



$db->field("SELET field FROM table WHERE ...");


It returns single variable. It's not like $result['field'] - it's like $result just.



$db->array2insert("table", $array);


Array is like

$array = array(

'field'  => $value,



No need to put "addslashes" in that case.


To get recent inserted ID

$inserted_id = $db->insert_id();



$db->array2update("table", $array, "id='$value'");


same as above, third field is where to update.



$db->query("ANY QUERY");


just mysql_query.