Category Archives: Open Source

Bits & bobs about open source software

Brand Reputation Management – EpiServer Fails

Online brand reputation management can be perilous & the internet is littered with failures and own goals. Here’s a recent example.

Swedish Drupal specialists NodeOne recently ran a banner campaign advertising the benefits of using Drupal over several proprietary CMS offerings. One of those compared, EpiServer, responded with a “cease and desist” letter from their lawyers, claiming that the comparison was misleading and calling on NodeOne to stop their advertising campaign. NodeOne took legal advice & then responded by publishing EpiServer’s letter (& helpfully an English translation).

EpiServer, regardless of the merits or otherwise of NodeOne’s comparison, scored several own goals by resorting to their lawyers. The appear arrogant, bullying and defensive – the perception is that they have something to hide, that NodeOne have touched a nerve. What was once a local Swedish issue is now an international one, thanks to NodeOne releasing English translations of EpiServer’s legal response.

EpiServer are now brand firefighting – they turned a product comparison into a brand defence, which is harder for people to forget. Their head of European Marketing even resorted to defending their position on NodeOne’s website – which smacks of desperation and only served to enhance NodeOne’s position as defender of free speech against an over mighty corporation.

Its a big bad world out there and companies are right to seek to protect their brand, but resorting to lawyers is rarely the best thing to do online, even when legally you may be correct. Online you have few controls over what happens and the story can spiral out of your control very quickly and messily. You have to be subtle in your responses – lawyers are not noted for their subtlety.

Skip Hire Leicester

Leicester skip hire home pageLeicester Skips, which promotes the Leicestershire skip hire service provided by Bakers Waste Services, has just launched.

Designed and developed by Leicester web design company Fresh Web Services, this Joomla! powered website has been designed to conform to existing branding and styles. The website also adheres to a ‘conversion led design’ approach, meaning that it is optimised for conversion – at every stage users are gently encouraged to either make contact or complete an online skip order form.

Stupid css error!

Recently I was working on a Magento 1.5 project, customising a theme. On the front page the client wanted repeating rows of images to link through to the shop’s categories. I did this using Magento’s “widget” links, and then used css to style background images.

Within the css I used “sprites” to control the rollover state of the image. The css I used to style this effect is below.

a#yarns{background: url(../images/main-clickthroughs-wool.jpg)0px 0px no-repeat; min-height: 126px; width:232px; position: relative;}

a#yarns:hover{background: url(../images/main-clickthroughs-wool.jpg) -232px no-repeat; height: 126px;width:232px;color:#333333; }

While testing using Firefox & Chrome, all was well. Wrapping up I switched to testing IE7 & suddenly I had no category images on the home page! If I hovered I would see the hover image, but not the default background image.

After googling I found the problem – there should be a gap or space between the “)” and the next value, “0” in this instance. So the code should read as follows:

a#yarns{background: url(../images/main-clickthroughs-wool.jpg) 0px 0px no-repeat; min-height: 126px; width:232px; position: relative;}

a#yarns:hover{background: url(../images/main-clickthroughs-wool.jpg) -232px no-repeat; height: 126px;width:232px;color:#333333; }

It seems Firefox & Chrome are more tolerant but Internet Explorer isn’t. So, something to note for future reference!

 

Joomla Intranet & shared services

I have just completed a Joomla intranet project. Two district councils are embarking upon a programme of “shared services” in an attempt to reduce costs and improve efficiencies.

As part of this programme, these district councils are to share a common intranet, removing the need to renew licences for a propriety content management system. This was part of the reasoning behind the choice of Joomla! to power the intranet. Another reason they chose Joomla! was the belief it would be cheaper than Drupal!

Magento + Highslide

I have a Magento client who wanted the Highslide javascript library integrated in several places on his store. Highslide itself is relatively straightforward to integrate & to customise – it really is an excellent javascript thumbnail viewer library (its actually a lot more than that) & is well documented, with an excellent support forum.

image of highslide popup
Highslide products list page popup

Where I came unstuck was that the client wanted a product popup on the product list page – where all the products are listed. In the popup he wanted the large product image, the title, price & ‘buy’ button.

 

The problem is that with Magento 1.3.2.4 you do not have access to the large product image on the products list page. So I initially developed an ajax call to load the product, its large image & other data, & used the highslide hs.htmlExpand() method to display it. I then encountered the problem that highslide hs.htmlExpand() method has a hard coded (in the css) width – so, while the popup expands to the height of the product, the width is fixed. So, I was having scroll bars on landscape images but portraits were fine. Not acceptable.

Hilde on the Highslide forum suggested I use the hs.expand() method, which takes its height & width from the image itself, and place the title, price, buy button in the “caption” (<div class=”highslide-caption”>) area that can be attached to the popup image. However, that brought me straight back to the original problem that Magento 1.3.2.4 does not make the large image available on the products list page!

image of the Magento products attributes management page
Magento product attributes

However, searching the Magento forums I eventually came across the solution. In Magento, almost everything associated with a product (price, title, images, etc) is an “attribute”. Within the admin system you are able to edit the attributes of these attributes (is it searchable, should it be “used in product listing”!, etc) , but not the attributes of the product images!

 

Changing eav_attribute properties
Changing eav_attribute properties

However, looking at the table “eav_attributes” the main product image can be edited so that it is available on the products list page. You must change the default value of the field “used_in_product_listing” from 0 (false) to 1 (true). Of course, you should backup your database before changing anything like this & always do this on a test system first!

Once this change has been made, you can then access the large product image on the products listing page. Voila! Now I was able to use the hs.expand() method & could abandon my ajax workaround too.

The resulting code in ../template/catalog/products/list.phtml is as follows:
<!--bof photo-->

<div><a href="<?php echo ( $this->helper('catalog/image')->init($_product, 'image'));?>"title="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'image'))   ?>"onclick="return hs.expand(this, {showCredits:false,      outlineType:'rounded-white',transitions:{ expand: true},                    wrapperClassName: 'highslide-white-background',                    align:'center'})">

<img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->constrainOnly(TRUE)->keepAspectRatio(TRUE)->keepFrame(FALSE)->resize(200, 200) ?>" alt="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>" title="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>"                 style="text-align:left;" align="left" /></a>

<div class='highslide-caption'><?php echo( $_product->getName());?> <br /> <?php echo $_coreHelper->currency($_product->getPrice()) ?> <?php if ($_product->isSaleable()): ?> <button onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><?php echo $this->__('add to basket') ?></span></button>  <?php endif; ?></div>

</div><!-- eof photo -->

Remember, this is for Magento 1.3.2.4. However, it now means I have a product popup on the products listing page that takes the main product image and scales the popup to the image’s dimensions, without any scroll bars.

Govt Considers Open Source – again

The Guardian recently reported that Bill McCluggage of the Cabinet Office met with ICT suppliers and that he,

emphasised that the government wishes to see the industry offer more solutions based on open source, and listed a number of approaches that it expects it to follow. These include: evaluating open source solutions in all future proposals; including open standards and interoperability as key components in IT systems; and moving towards the use of open source as normal practice.

Will this make a real difference to the SME market? Well, my Leicester web design company is currently working with two district councils implementing a joint intranet using Joomla! They already use Drupal to power their website & plumped for Joomla! for the intranet to save even more money. We’ve also implemented Joomla! websites for a number of Probation Trusts.

So, some local government and public bodies are certainly willing to go down the open source route. But there are compromises that taking this road sometimes entail. Few Open Source content management systems will offer the same level of functionality that the high end enterprise level systems often offer. They can be added, like workflow in Joomla! or snapshots & rollback in Drupal, but these rarely come out of the box.

I recently read a tender document from another district council for a new CMS. Looking at the “Highly Desirable” list of functionality, it had the appearance of a requirements document that was written several years ago, when money was relatively plentiful. It is certainly not a “austerity” shopping list. As it stands, I don’t know of a single Open Source CMS that could meet these requirements “out of the box”. So, this district council will either have to buy a commercial package or pay for someone to heavily customise Plone, Drupal, Joomla or ….. (add your favourite Open Source CMS here). This could even make Open Source as expensive as a proprietary solution to deliver.

Perhaps a better way round now would be to employ someone to investigate what an Open Source CMS can deliver, and then negotiate the requirements in the light of what is available. As part of this process, the people responsible should also employ the red marker pen more judiciously. For example, instead of insisting that the CMS pre-checks content for accessibility before publication, they should ensure that editors are trained to write accessible content (one of the “Highly Desirable” functions referenced above). Technology is always a poor substitute for personal responsibility.

So, Open Source can be a viable option for local and central government, but they need to cut their clothe accordingly. Only then will the SME market stand a chance of delivering cost effective solutions. Otherwise I fear that it will be the big consulting firms who will deliver Open Source to government, with a price tag that benefits only themselves.

Magento – multi currency display

Magento has multi currency capability built in. When it is configured and enabled, your customers will see a currency drop, like in the image below:

Magento multi-currency drop down
Magento multi-currency drop down

Where the currency drop down is displayed is determined by your template.

However, you won’t see the currency select control if you haven’t actually imported your currency exchange rates. You import your currency exchange rates within the Magento administration ui, under System/Manage Currency Rates. There you can use the “Webservicex” webservice, see below:

Magento - manage currency rates
Magento – manage currency rates

Only after these rates have been imported and saved will your customers be able to see the select currency control.

So, if you’ve setup multi-currency within your shop but the currency drop down is not visible on the front end, first make sure that you have actually imported and saved your currency rates.

MatrixRate Premium csv file

Magento – no shipping quote message

This is a common problem that gets raised in the Magento forums. You’re testing your checkout & when you select your shipping or delivery country, Magento responds with the message something like, “No shipping quotes are available for this country…”

This happened to me the other day. So, I checked that the country is question was one of those ‘allowed’ shipping countries, in both the default and store config. Still no joy. So, I then checked that this country was also enabled in the ‘Table Rates’ shipping method, & that this shipping method was enabled – all good but still no joy.

It was then that I twigged that my ‘Table Rates’ csv file was empty! Only after I’d exported my Table Rates csv file did I realise that I had not set up any actual values for the ‘Table Rates’ – doh! Adding these values & then uploading the csv fixed the ‘issue’.

You should also note that if  you ship using “weight vs destination” & the weight of an order is lighter than your minimum shipping weight, then you’ll also get the same ‘error’ message.

Magento Manage CMS Pages Issue

Today I came across a Magento issue I’ve not seen elsewhere – when I clicked on the Mange CMS Page within the admin UI (version 1.3.2.4), I was bounced back to the dashboard rather than the CMS page grid.

After fruitlessly searching the forums I had an idea. Earlier I had attempted to delete a store & shop view.  When you delete a store, you can take a database backup at the same time. For some reason this produced an error (timeout?), so I’d gone into PhpMyAdmin and manually deleted the store_id in the tables ‘cms_store’ & ‘cms_store_group’.

Here was the origin of my CMS page problem – there were references to the deleted store in the following tables, ‘cms_page_store’ & ‘cms_block_store’. Once I’d cleaned these tables up by removing the orphaned store_ids, all was good.

So, there’s a potential little gotcha to look out for.