Sunday, August 29, 2010

My Review of Opencart

I first found out about Opencart from a friend who runs her clothing store on this software. (ThickGirl Threads, an online thrift store for women sizes 12 and up!). I'm relatively new to Ecommerce software, but have heard about some of the bigger dogs such as Magento. Wanting to fiddle with something other than Wordpress for a bit, and wanting to be able to tell people I have ecommerce experience (ha) I decided to dive in.

What drove me to want to learn more about Opencart was that it seemed like a system that was extremely simple to set up. Small shop owners and artsy folks that sell their wares out of their homes (which we have a lot of here in Lansing!) probably want something they can easily set up and get running with in a small amount of time. This is a major selling point, and at first glance this is what Opencart appears to be.

Before we start, here are some screenshots of the theme that I started before writing this post. Its not anywhere near finished, and is mostly serving as a skeleton.


Product Page

First Impressions
OpenCart Demo Theme
My first impression of Opencart's demo theme was less than enthusiastic. Rounded corners, ugly generic graphics, gaudy icons. I can't imagine anyone using this theme as their store front has actually succeeded in creating a successful online presence for their store; though the same could be said for almost anyone using a default, unbranded theme. Ok, fair enough! It just needs some TLC. Simply restyling some things, removing some of the 1995-esque fluff, and this rough stone can be bling-blang-diamondified. And before you say anything, yes, that is the proper way of describing a beautiful website. I don't have much to say about any of the themes available on Opencart's website. If you're using this software, hire a designer. Stay clear of the free bin.

Admin UI
After browsing around my demo store I set up (Opencart comes prepackaged with a catalog of items which helps out quite a bit with the development process), I made my way to the admin section. The Admin ui is cleanly laid out, though I do have a few gripes here and there, which all in all are design/user experience related and not so much "Hey, I can't figure out how to do this" related. There are some features that are, in my eyes, missing from the UI.

Product List
The list view of products could use some work. I see headings and data that tell me if an item is enabled or not and I see the quantity of an item right in front of me. What I would like to see are drop down/input options to change these values without having to click edit first. This is a  small gripe, but these are the things that enhance the experience for the user.  If you often find yourself thinking "Hey, I wish I could do this" all the time, odds are it needs to change because thats what many others are probably thinking as well.

Product Edit Page
Clicking edit on a product gives you a tabbed list of all the options you have to describe your product. Note: the default image for the product is set on the "General" tab. All other additional image views are set on the "Image" tab. After a bit of "Why the heck is my image not showing up?" I quickly figured out that I had set my default image as an additional image. Again, a small gripe. Easily fixed. Generally adding any image via the admin UI, though, feels less fluid than it should be.

Adding options for an item (such as size or color) feels clunky, and there isn't a default way of adding the same options for several items at a time. A quick google search led me to find some premium modules you can buy that do this for you, but I feel like this should be something added to the core. Currently, you are left re-adding the same options for every single item that needs it. Ouch.

TLDR: The meat of the UI is there. It needs a lot more polish though.

Digging Around the Backend
The developer(s?) of OpenCart neglected to comment their code. This... irks me... to no end. First rule of programming class: Comment your code or don't hand it in. At least thats how my very FIRST programming teacher made me feel. This is borderline juvenile and I wonder how they felt it was OK. Never be so arrogant as to believe that its OK to not comment anything especially when you know other people will be viewing it. I would say very bad words about this, but I'm trying... to restrain... annoyance... ANGER....

Moving on. If you're familiar with the MVC  system (Model–View–Controller), you won't have too hard of a time digging around and finding which template files need to be changed and which don't when you get down to creating your own theme. Sidenote: If anyone can tell me why they didn't use .php extensions instead of .tpl, please share your great wisdom with me. If you're NOT familiar with MVC don't let that affect your opinion of Opencart; get to reading and maybe head to Net Tuts for their great CodeIgniter tutorials for a nice intro to MVC.

When I started creating my own OpenCart theme, I decided to make it as simple as possible so that it would work right out of the box, with as little adjusting as possible. That means the main files I've changed are located in your theme's template files, and of course your theme's stylesheet. This way a user can upgrade to the newest version of OpenCart, without having to change a bunch of other files just to make it work with your theme. Note: Anything you can't do via the admin, however, is going to mean that you'll be changing a lot of files; be sure to note which ones will be overridden when upgrade time comes.

Example of Default Code
I was pretty taken back to discover how unclean these template files were for the default theme. There are extra divs all over the place named "div1" and "div2". There are others above and below each div; which I assume are to make it easier should you want to add pretty rounded corners to all of your boxes. Its always a good idea to name your ids and classes something that is representative of what it is for. Please tell me what div4 does. No? Ok, then tell me what "top_navigation" and "main_navigation" might be. Makes a little more sense, yeah?

 I'm also a little annoyed when menu items aren't wrapped in an unordered list and are instead wrapped in their own divs.   Unordered lists and menus just go together well, do it! It makes them far easier to style.

My suggestion if you're going to make a theme thats not a knock off of the default, would be to start from scratch and add in the PHP hooks and filters when you need them, or to DELETE out every bit of html in the default templates (I did the latter). Trying to base your theme on the default too much, is just going to make it look... "default"-ey, and thats something users can spot within seconds.

TLDR: AHGOD. Stay away from the default theme. Learn the hooks and functions you need, and start from scratch. Be mindful of what files you are changing.

The idea of modules is great, though I have to say they are poorly implemented into Opencart. Its not that easy to install another author's module. Its not hard, but its not as smooth as one might hope for. I think I'm spoiled coming from Wordpress which has one click installs of widgets from your admin page, not lengthy uploading of files into their appropriate folders. Also, to get any of the modules to match your theme, expect to spend some time mucking about in the module's template files to restructure them to match your own.

Also, I really want a wishlist module. Thats pretty much a staple part of any online store you go to and would be a very nice touch to polishing OpenCart even more.

The OpenCart Community
Heading to any forum for help can be a scary thing. There are always people, on any forum, that frequent it daily, and will protect that forum until their dying breath. How dare you come there with your noob questions and not know as much as they do. What were you thinking? Go back to Oops, I mean.... what?

This is the impression I got when first visiting the OpenCart forums; questions in hand, thirsty for knowledge! Needless to say I was a little discouraged by some of the arrogance of the, ahem, regulars, and their unwillingness to listen to any suggestions for change. Like this gem of a posting. (The original poster in that thread, Eric Lamb, also wrote up his own review of Opencart on his website here.) Yes, that is the lead developer of OpenCart calling somebody an idiot. After finding this article, I was ready to abandon my OpenCart templating project and move on to something new, preferably filled with software developers that dish out hugs and candy instead of insults.  Its a sad thing, because there are a lot of genuinely helpful people on the OpenCart forums, there are plenty of people looking for a simple shopping cart solution, and there are plenty of developers wanting to sink their teeth into producing high quality themes and modules.

Whats that thing, where you overthrow the dictator? Yeah, lets do that. We'll see how my theme turns out. Its easy to get attached to a new piece of code that you've spent a considerable amount of time tearing apart. Like a puppy. Minus the tearing apart bit... Expect more OpenCart posts should I find the heart to continue.