<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Web Design &#38; Development Talk &#187; Rob</title>
	<atom:link href="http://www.web-design-talk.co.uk/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.web-design-talk.co.uk</link>
	<description>Web Design &#38; Development Blog</description>
	<lastBuildDate>Thu, 29 Dec 2011 15:34:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Object Oriented CSS (OOCSS) &#8211; My View</title>
		<link>http://www.web-design-talk.co.uk/447/object-orientated-css-oocss/</link>
		<comments>http://www.web-design-talk.co.uk/447/object-orientated-css-oocss/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 15:34:21 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=447</guid>
		<description><![CDATA[After reading an article about OOCSS (Object Oriented CSS) I was left a little numb and confused to be honest. I&#8217;d advise you read the full article before reading what follows. The idea is fairly simple &#8211; write your CSS using a &#8220;bottom up&#8221; approach, as opposed to a &#8220;top down&#8221; approach, treating your elements [...]]]></description>
			<content:encoded><![CDATA[<p>After reading an article about <abbr title="Object Oriented CSS">OOCSS</abbr> (Object Oriented CSS) I was left a little numb and confused to be honest. I&#8217;d advise you <a href="http://coding.smashingmagazine.com/2011/12/12/an-introduction-to-object-oriented-css-oocss/" target="_blank">read the full article</a> before reading what follows.</p>
<p>The idea is fairly simple &#8211; write your <abbr title="Cascading Styles Sheets">CSS</abbr> using a &#8220;bottom up&#8221; approach, as opposed to a &#8220;top down&#8221; approach, treating your elements as &#8220;objects&#8221;, using mainly classes, as opposed to IDs. The idea of this is to make classes more reusable and to encourage a greater css granularity architecture. The overall theory behind OOCSS is something I don&#8217;t dispute in the least, if anything it&#8217;s simply good practice when writing a CSS file.</p>
<p>For me, the whole article borders on the pedantic to the outright pretentious.</p>
<p>Firstly, I&#8217;m not a fan of the name. &#8220;OOCSS&#8221; implies a link to OOP (Object Orientated Programming), which it is not. I can see why they&#8217;ve named it OOCSS as I guess multiple classes could be similar to inheritance, an element on your page as an &#8220;object&#8221;, classes imply reusability etc. As a web developer, who uses OOP I was instantly put on the defensive, thinking &#8220;OOP for CSS, wtf&#8221;. I understand the name is simply a paradigm, but it sends out all the wrong signals for me personally.</p>
<p>Apologies if this article turns into a bit of a rant&#8230;..</p>
<p><span id="more-447"></span></p>
<h2>Descendant CSS Selectors</h2>
<p>OOCSS seems to have a odd rule whereby descendant CSS selectors (E&gt;g. .foo h4) are suddenly not allowed. Instead, to adhere to OOCSS principals you need to split the this into two separate classes and apply both classes within your HTML code:</p>
<pre class="brush: xml; title: ; notranslate">&lt;div class=&quot;button-basic button-skin&quot;&gt;&lt;/div&gt;</pre>
<p>Both methods &#8211; using a descendant selector and two classes &#8211; are perfectly valid for me.</p>
<h2>CSS Class Abstraction</h2>
<p>One of the ideas that I don&#8217;t agree with the fact that the article and whole concept implies that more class abstraction is good. People still learning could read into this idea the wrong way and (worse case scenario) end up with a plethora of abstract classes that produces some awful HTML:</p>
<pre class="brush: xml; title: ; notranslate">&lt;div class=&quot;padding center-element block text-italic floated-right&quot;&gt;&lt;/div&gt;</pre>
<p>I won&#8217;t go into the debate about speed of selectors either, as the article is little one sided here. Giving preference the use of classes over IDs is not a good way to go in my opinion.</p>
<h2>OOCSS Performance Benefits</h2>
<p>Another major selling point of OOCSS is that of site speed &#8211; which is of huge concern to web developers nowadays after recent Google changes, citing page speed as ranking factor. This part of the article is null and void for me as it&#8217;s so obvious. Small style sheets will result in smaller css files that download faster &#8211; that&#8217;s pretty obvious. Although after the CSS file has been gzipped there wouldn&#8217;t be a great deal of real world benefit. Saying all that however, OOCSS is something the majority of good developers do anyway &#8230;.</p>
<h2>OOCSS &#8211; Already Used &#8230;</h2>
<p>For me, OOCSS is an acronym someone has given to a technique they have suddenly realised they use, after comparing it to OOP &#8211; a fancy name if you like. It&#8217;s an acronym I imagine will be very common on CVs.</p>
<p>After reading the article I wondered why it existed in the first place. OOCSS is something any designer/developer worth their salts does by default after a longer enough period of time. One of the biggest sayings when relating to good CSS is &#8220;don&#8217;t use ID selectors for everything&#8221;. It doesn&#8217;t make a great deal of sense when you&#8217;re learning, but as time goes on you&#8217;ll realise that some commonly used IDs could just as well be a class &#8211; whallah, you have yourself the beginning of OOCSS. For instance, in pretty much all my projects I have a class called input-wide that one applied to an input field, makes it longer.</p>
<p>Hell, when I was first learning CSS years ago and ran my (awful, naff) sites through the <a href="http://jigsaw.w3.org/css-validator/" target="_blank">W3C CSS Validator</a> popped up a warning mentioning redundant CSS that could be better served using a class instead of ID &#8211; I never heard one mention of OOCSS then either.</p>
<p>To conclude, I&#8217;m not against OOCSS per se, I&#8217;m against the way it&#8217;s been described in the article as something new and revolutionary. In reality, everyone uses it, unknowingly as it&#8217;s simply a collection of best practices. The article would have a made a lot more sense if it was titled something along the lines of &#8220;CSS Best Practices&#8221;, as that&#8217;s simply what it describes, nothing more or less.</p>
<p>For me this whole area complicates CSS. Personally, I&#8217;ll keep using <a href="http://lessframework.com/" target="_blank">LESS</a> for rapid development of layouts on multiple devices and as a starting point for my CSS &#8211; which is just what I believe a CSS Framework should be &#8211; a starting point, not a long list of &#8220;do&#8217;s and dont&#8217;s&#8221;</p>
<p>I&#8217;m sure some people will totally disagree with me on this whole topic, so I apologise in advance. At the end of the day it&#8217;s a hugely subjective topic <img src='http://www.web-design-talk.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/447/object-orientated-css-oocss/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Magento as an ECommerce Platform &#8211; A Case Study</title>
		<link>http://www.web-design-talk.co.uk/440/magento-ecommerce-case-study/</link>
		<comments>http://www.web-design-talk.co.uk/440/magento-ecommerce-case-study/#comments</comments>
		<pubDate>Sun, 06 Nov 2011 17:23:36 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[ui design]]></category>
		<category><![CDATA[web companies]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=440</guid>
		<description><![CDATA[To date this year, I have inherited several Magento stores to perform web updates on. I thought I&#8217;d write a small post on my experience and thoughts in using the system and how that system translates to real world, non technical clients. As a bit of background, I&#8217;m by no means a fully fledged Magento [...]]]></description>
			<content:encoded><![CDATA[<p>To date this year, I have inherited several Magento stores to perform web updates on. I thought I&#8217;d write a small post on my experience and thoughts in using the system and how that system translates to real world, non technical clients.</p>
<p>As a bit of background, I&#8217;m by no means a fully fledged Magento developer in the least. After a few hours of experimenting I managed to get a template based upon my design, up and running.</p>
<p>It&#8217;s common knowledge that Magento is touted as the best thing since sliced bread &#8211; you constantly see companies selling the (what I call), &#8220;Magento experience&#8221;. Sales based pitches such as &#8220;you&#8217;ll never need to upgrade again&#8221;, &#8220;Magento can do everything out of the box&#8221; and &#8220;Magento will infinitely scale with your business&#8221; are very common from web companies. The latter does not apply to all businesses in my experience. To illustrate, I&#8217;ll use the example of a client who came to me in despair at their current web company and Magento based website &#8211; I won&#8217;t be using any real names.<br />
<span id="more-440"></span></p>
<h2>Magento &#8211; A Small Case Study</h2>
<p>My client has a small business consisting of 2-3 people, that sell hand made retro clothing. Their whole store contains 78 products &#8211; all with simple size and color attributes. Prior to using Magento, the client used oscommerce. Whilst oscommerce may be crap, the store did generate approximately £250.00 per day &#8211; which isn&#8217;t too bad at all for a small store. However, my client was approached by a web company (I&#8217;ll call them &#8220;Web Company ABC&#8221; going forward) proposing to upgrade their ecommerce platform. Web company ABC did sell them the whole Magento dream, albeit at the hefty price of £5,900.00 +vat. My client said they were impressed with the rich feature set and functionality. Hell, I am as Magento can literally do everything out of the box.</p>
<p>So, 4 months worth of delayed development later and Web company ABC had developed a rather standard looking Magento theme. Skip forward 7 months after the new site had been live on the internet and I was asked to look at doing some improvements due to it failing. Within 7 months, the store had taken ~ £450.00 &#8211; not good at all. The reason for this was clear from an SEO point of view &#8211; the site in question was total mess within Google. The upshot was that the site averaged 150 visitors per month. I promplty told my client to speak to her current web company about this, as they had paid £6,000.00 for a store and the SEO basics had not been applied. To summarise the main issues, there were lots of querystring based urls within Google and masses of duplicated content. Additionally, the company had allowed search results pages to be indexed (550 pages of them!) and all the customers login/info screens were indexed too. I suggested they install a small plugin for Magento that sets the correct canonical tag for each page.</p>
<p>The response from web company ABC: &#8220;Magento is industry leading software, as result we feel it needs no modification&#8221;. Industry leading maybe, but from what I saw it was extremely weak on the most basic SEO front. After 7 months, when Google hasn&#8217;t even indexed all your pages, something is wrong in my books.</p>
<p>Now, I haven&#8217;t looked at default SEO functionality of Magento out of the box, but a few things jumped out to me straight away:</p>
<ul>
<li>Far too many duplicated pages with no canonical tag</li>
<li>No canonical tag for category filter pages resulting in lots of additional pages indexed</li>
<li>Lots of issues with urls for products being in multiple categories, as discussed in a blog post about <a href="http://www.web-design-talk.co.uk/245/multiple-categorisation-seo/" target="_blank">multiple categorisation for seo</a></li>
<li>Unnecessary links indexed</li>
<li>Search results pages indexed</li>
</ul>
<p>Skip forward a few more weeks and the client was now asking me to design and customise some better transactional email templates as they don&#8217;t like the default Magento ones at all. They had previously spoken to their current web company (who used Magento to develop the site in question), who said it was not possible. I&#8217;m no Magento expert, but it is most definitely possible according to Google.</p>
<p>My client then asked the question that all clients who use Magento always ask &#8211; &#8220;Can you help me use the admin area, as it&#8217;s too complicated&#8221;. It&#8217;s also very common (as in this example with Web Company ABC), that full training had not been provided on how to use this area. I felt especially sorry for the client when they emailed me saying &#8220;I&#8217;ve been trying to add a new product for the last hour with no luck and no one has shown me how to do this&#8221;. Feeling very sorry for the client and knowing they had forked out close to £6,000.00 for a site I advised them to ask their current web company. The response was shocking in my opinion: &#8220;We can&#8217;t support your site to this level, there are lots of guides on the Magento official website&#8221;.</p>
<p>There are a few standout issues here when a web company has used Magneto as an ecommerce solution. Make sure you are actually Magento experts &#8211; know how the core files work, know how to customise core functionality and know more than being able to install a basic plugin. Whilst I agree Magento does have an impressive feature set, even in the community edition, it is inherently complicated and bloated. The latter is not a criticism, just something that naturally happens when a system is built that attempts to cater for a plethora of requirements.</p>
<p>Lots of web companies seem to hide behind the reputation of Magento and base their whole sales pitch around that. For the smaller clients I&#8217;ve dealt with they don&#8217;t need such a feature rich system &#8211; I&#8217;d go as far to say Magento is overkill for a lot of sites it&#8217;s used on. In my opinion, the whole system is geared towards larger companies and sites with complicated products. It is <em>not</em> geared towards small sized business with simple products. I put together a list of changes for web company ABC that would solve all the issues the client was experiencing, some involved installing small, third party plugins. The web companies response was simply: &#8220;we feel Magento works well of the box and doesn&#8217;t need any additional plugins&#8221;. Fail.</p>
<h2>The Infamous Magento Administration Area</h2>
<p>Now comes my major criticism about Magento &#8211; it&#8217;s insanely mammoth administration system. As a developer I personally like it &#8211; lot&#8217;s of functionality and settings to play with and lots of general control. For the end user, in my experience, this is the area that makes Magento fail as a platform for me &#8211; for a few reasons. For a normal user, there is simply too much functionality, and too many options to make even the most basic tasks extremely difficult. Does an end user really need functionality to control essential system settings for example? I felt really bad after accepting a small admin fee after the client emailed me the following out of pure frustration: &#8220;can you please add a discount code to my store as I&#8217;ve spent 20 minutes trying to get this to work&#8221;. All they wanted tom do was add a voucher code that knocked 20% off orders over £100, but due to the complexity they were unable to do this simple task. I personally liked this area, but can see why a non technical user would get confused.</p>
<p>If companies are going to push Magento as their platform of choice and tout it as the best thing to build your business on, they need to provide training on how to perform basic tasks within the administration area. It doesn&#8217;t matter the value of the project &#8211; the administration area remains complicated and end users need training. However good an ecommerce platform Magento may be, if end users have difficulty using it something is wrong. Web companies <em>should </em>realise this include training as part of the price.  Leaving a client with the advice of &#8220;go and read the Magento docs&#8221; (which are quite technical in their own right) is not acceptable and does little to help the client.</p>
<p>Please don&#8217;t misunderstand me here. I am not saying Magento is bad ecommerce platform. What I am saying, is that Magento does not have a place for every level of ecommerce store and that users require training. My advice, if you&#8217;re considering Magento for you platform, take note of the following:</p>
<ul>
<li>Don&#8217;t get caught up in the sales speak and try to ignore the shiny default template</li>
<li>Remeber you&#8217;ll need to set aside a great deal of time to learn the administartion area &#8211; you may need training here</li>
<li>Magento is not for every niche/business. The feature set and size of Magento implies you have a high volume of and complicated product variations</li>
<li>Remember that due to the complexity of Magento, you&#8217;ll no doubt pay a premium for updates where a plugin will not suffice</li>
</ul>
<p>What are your views on this matter?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/440/magento-ecommerce-case-study/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>How to Install CodeIgniter Within the Web Root</title>
		<link>http://www.web-design-talk.co.uk/432/install-codeigniter-web-root/</link>
		<comments>http://www.web-design-talk.co.uk/432/install-codeigniter-web-root/#comments</comments>
		<pubDate>Sat, 29 Oct 2011 14:34:27 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=432</guid>
		<description><![CDATA[By default, when installing CodeIgniter (CI), all the important files i.e. all files withing the application and systems folders are installed within the main web directory, that is visible to anyone. This is fine to an extent because all folders have a htaccess file that denys all incoming requests. The CodeIgniter developers did this intentionally [...]]]></description>
			<content:encoded><![CDATA[<p>By default, when installing <a href="http://codeigniter.com/" target="_blank">CodeIgniter</a> (CI), all the important files i.e. all files withing the application and systems folders are installed within the main web directory, that is visible to anyone. This is fine to an extent because all folders have a htaccess file that denys all incoming requests. The CodeIgniter developers did this intentionally to make things easy for people trying the framework out.</p>
<p>However, a much more secure method is to store the application and systems folders within the server webroot. This location is not directly accessible and helps with all around application security. Personally, I feel a lot safer knowing core files are not directly accessible. The latter is doubly as important when using a well known PHP framework, as anyone has a starting point to figure out your folder structure, simply by downloading the framework.</p>
<p>Here is how a typical <strong>CodeIgniter install</strong> looks on a production server:</p>
<p><span id="more-432"></span></p>
<pre class="brush: plain; title: ; notranslate">
- CodeIgniter_2.0.3
---- application
---- system
- public_html
---- assets
---- index.php
---- .htaccess
</pre>
<p>The &#8220;public_html&#8221; directory will vary from host to host and has many names depending on the hosting setup &#8211; it is the files from which the live website is served from. The major benefit now, is the only file directly accessible is index.php. The assets folder is included in all my projects, for things such as images, css files and JavaScript. For additional security, directory browsing is disabled by means of adding the following to the main htaccess file:</p>
<pre class="brush: plain; title: ; notranslate">
Options -Indexes
</pre>
<p>To complete the move of the core CodeIgniter files there are a couple of other small tweaks:</p>
<p>Open index.php, go to line 59 (CodeIgniter v 2.0.3) and change (several lines of PHP comments have been removed here for readability)</p>
<pre class="brush: php; title: ; notranslate">
$system_path = 'system';
$application_folder = 'application';
</pre>
<p>to</p>
<pre class="brush: php; title: ; notranslate">
$system_path = '../CodeIgniter-2.0.3/system';
$application_folder = '../CodeIgniter-2.0.3application';
</pre>
<p>The latter change simply tells CodeIgniter to look for those core files in an alternative location. The absolute path to the file could have also been used.</p>
<p>The name of the CI directory has the following format: CodeIgniter-x.x.x, where x.x.x is the CI version. Naming directories this way allows different versions of CodeIgniter to be more easily upgraded, without affecting the current used version. For instance, CI version 2.0.4 would be placed in CodeIgniter-2.0.4 &#8211; $system_path and $application_folder would be adjusted accordingly.</p>
<p>The above method can be applied to any website, it doesn;t have to be CodeIgniter or a PHP Framework. For instance, say you had a vanilla PHP site that used a single configuration file and a bootsrap file &#8211; both containg lots of important settings and data. Simply place the two files within the webroot and adjust your include paths within you application pages. Another example is with third party caching systems. An application may make use of <a href="http://www.web-design-talk.co.uk/423/php-array-caching-pear-cache-lite/">PEAR Cache Lite to Cache Arrays</a> for example. It would be good practice to set the cache directory directly within the web root, meaning cache files are not directly accessible.</p>
<p>That&#8217;s it &#8211; within a couple of minutes you&#8217;ve just improved the security of your application!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://www.365itbackup.co.uk/faq.php">Why backup data?</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/432/install-codeigniter-web-root/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHP Array Caching with PEAR Cache Lite</title>
		<link>http://www.web-design-talk.co.uk/423/php-array-caching-pear-cache-lite/</link>
		<comments>http://www.web-design-talk.co.uk/423/php-array-caching-pear-cache-lite/#comments</comments>
		<pubDate>Fri, 21 Oct 2011 20:04:55 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=423</guid>
		<description><![CDATA[In previous posts full page, block level caching with pear cache lite have been discussed. Full page level caching is fine under a lot of conditions. However, sometimes it is desirable to cache the contents of an array to a file. PEAR Cache Lite makes this very easy. The array used in the following example [...]]]></description>
			<content:encoded><![CDATA[<p>In previous posts full page, block level <a href="http://www.web-design-talk.co.uk/286/best-practices-with-pear-cache-lite/">caching with pear cache lite</a> have been discussed. Full page level caching is fine under a lot of conditions. However, sometimes it is desirable to cache the contents of an array to a file. PEAR Cache Lite makes this very easy.</p>
<p>The array used in the following example is for illustration only and very basic. On a real site the array may be the result of several database queries, or even a recursive function to display the full category structure on a website E.g. something a lot more database intensive and costly than a simple array!</p>
<p>The setup using PEAR Cache Lite is exactly the same, the only difference is within the constructor. There is an option called &#8216;automaticSerialization&#8217; (set to false by default) that enables the caching of none string data E.g. arrays. It is possible to achieve what following by using PHP&#8217;s <a href="http://php.net/manual/en/function.serialize.php" target="_blank">serialize</a> and <a href="http://php.net/manual/en/function.unserialize.php" target="_blank">unserialze</a> functions, but it&#8217;s preferable and neater to use what functionality the author of the PEAR Cache Lite class has provided. The code is very simple.</p>
<p>Firstly, include the PEAR Cache Lite class and pass the associative array of options (including the automaticSerialization key) to the class constructor (line highlighted):</p>
<p><span id="more-423"></span></p>
<pre class="brush: php; highlight: [6]; title: ; notranslate">
include 'Cache/Lite/Output.php';

$options = array(
    'cacheDir' =&gt; 'pear_cache/',
    'lifeTime' =&gt; 3600,
    'automaticSerialization' =&gt; true
);

$cache = new Cache_Lite_Output($options);
</pre>
<p>Secondly, for simplicity, include a function to generate the array to be cached. As previously mentioned, this array would come from some sort of database intensive operation under normal circumstances:</p>
<pre class="brush: php; title: ; notranslate">
function letters() {
    return range('A', 'Z');
}
</pre>
<p>Thirdly, check for a cache hit or miss. If there is a cache miss, generate the array and save it to a cache file (line 5). Otherwise, there is a cache hit and the cached data can be used directly (line 2):</p>
<pre class="brush: php; highlight: [2,5]; title: ; notranslate">
if( $data_array = $cache-&gt;get('array_of_letters') ) {
    $data =$data_array;
} else {
    $data = letters();
    $cache-&gt;save($data);
}
</pre>
<p>Lastly, use the array within your application normal (the following example simply outputs each letter with a semi colon after each item):</p>
<pre class="brush: php; title: ; notranslate">
$count = count($data);

for ( $i=0; $i    echo $data[$i];
    echo ($i != ($count-1)) ? ' : ' : null;
}
</pre>
<p>Looking at the actual cache file (open it using your PHP editor or Wordpad as it has no file extension), you can see the cached array has indeed been serialized (the letters at the beginning of the file are a timestamp and not part of your cached array):</p>
<pre class="brush: plain; title: ; notranslate">
715704231a:26{i:0;s:1:&quot;A&quot;;i:1;s:1:&quot;B&quot;;i:2;s:1:&quot;C&quot;;i:3;s:1:&quot;D&quot;; ... [removed for usability] ...   s:1:&quot;Z&quot;;}
</pre>
<p>That&#8217;s it! For reference, the full code can viewed below:</p>
<pre class="brush: php; title: ; notranslate">
include 'Cache/Lite/Output.php';

$options = array(
    'cacheDir' =&gt; 'pear_cache/',
    'lifeTime' =&gt; 3600,
    'pearErrorMode' =&gt; CACHE_LITE_ERROR_DIE,
    'automaticSerialization' =&gt; true
);

$cache = new Cache_Lite_Output($options);

function letters() {
    return range('A', 'Z');
}

if( $data_array = $cache-&gt;get('array_of_letters') ) {
    $data =$data_array;
} else {
    $data = letters();
    $cache-&gt;save($data);
}

$count = count($data);

for ( $i=0; $i    echo $data[$i];
    echo ($i != ($count-1)) ? ' : ' : null;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/423/php-array-caching-pear-cache-lite/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Appreciating Your Chosen Web Host</title>
		<link>http://www.web-design-talk.co.uk/410/appreciating-your-web-host/</link>
		<comments>http://www.web-design-talk.co.uk/410/appreciating-your-web-host/#comments</comments>
		<pubDate>Sat, 15 Oct 2011 14:29:44 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[LAMP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[web companies]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=410</guid>
		<description><![CDATA[Sometimes, you have small experiences that really make you appreciate your chosen web host. They leave you glad you spent the time doing your homework, testing out their support, features and generally ensuring everything is easy as possible with them. If it isn&#8217;t easy, then your job will be made all that much harder, unnecessarily. [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes, you have small experiences that really make you appreciate your chosen web host. They leave you glad you spent the time doing your homework, testing out their support, features and generally ensuring everything is easy as possible with them. If it isn&#8217;t easy, then your job will be made all that much harder, unnecessarily.</p>
<p>I experienced such a feeling last week with a client who wanted to use their own web hosting. I had updated a small website to include a blog and gallery, both updateable by the client. This wouldn&#8217;t usually be an issue at all if using my own hosting &#8211; simply upload the files, add in my custom htaccess file for some <a href="http://www.web-design-talk.co.uk/116/seo-friendly-urls-with-mod-rewrite/">mod rewriting</a> goodness and away we go.</p>
<p>However, the host in question was <a href="http://www.1and1.co.uk" rel="nofollow external">1and1.co.uk</a>. Now, I&#8217;ve read <a href="http://www.thespanner.co.uk/2007/08/06/1and1-suck/">some</a> <a href="http://tips.webdesign10.com/web-hosting/why-you-should-never-use-1and1-com-hosting">absolute</a> <a href="http://www.simonjones.info/1and1internet/">horror</a> <a href="http://www.chrisbeach.co.uk/view/tech/avoid_oneandone_internet">stories</a> about this company in the past &#8211; all such experiences seem very typical of a very large company, with their support teams based offshore.</p>
<p>So, back onto uploading the updated site in question. I had expressed initial concerns about the clients current 1and1 hosting package, noting that they&#8217;d most likely need to upgrade with 1and1, even though they were on an intermediate hosting package entitled the &#8220;1and1 Standard package&#8221;. I had also personally been forced to use their support about a year ago, which was hard work to say the least. Moving forward, I carried on and uploaded the site to 1and1&#8242;s servers and then visited site. Instant internal server error 500. Straight away I knew this was the hosting as I had previously given the client a link to a staging area on my preferred web host, that worked flawlessly. I&#8217;m aware 1and1 have some restrictive hosting on their basic packages (which seems to be inherant of such a large company, with thousands of customers in my experience), so I immediately headed towards to the .htaccess file (it&#8217;s essentially a variation of the <a href="http://html5boilerplate.com/">HTML5 Bolierplate template</a> with some of my own magic included, nothing out of the ordinary though) and renamed the htaccess file. Whallah &#8211; the site loaded, thus isolating the issue straight away. Great, I can inform 1and1 and find out what htaccess directives are allowed, it <em>should</em> be a run of the mill support request for any support department.</p>
<p><span id="more-410"></span>However, such a request to 1and1&#8242;s support department wasn&#8217;t easy in the least, in fact it was very challenging. After being on hold for roughly 10 minutes I was answered by one of their offshore support staff, who was quite difficult to understand, yet very polite. All I wanted to know was what, if any, features they support on custom htaccess files, on the clients current hosting package. Simple right?</p>
<p>This is the point things got a little messy unfortunately (yes, so early on in the telephone call). After putting me on hold for a further 5 minutes, the lady came back to telephone to tell me to &#8220;check my htaccess file for misconfigurations&#8221;. I  reiterated my previous statement (as there are no errors) and she told me to &#8220;please hold so she could check more things&#8221;, after saying it is easy to leave typos in htaccess access files (I guess that&#8217;s true, but it wasn&#8217;t the case here). After a further 5 minutes was told to go to a PHP script she had uploaded on the site, that displayed the output of a phpinfo call, that I should &#8220;check&#8221;.</p>
<p>Let&#8217;s take a step back here. I have isolated the error down to a server restriction on the 1and1 end. Their response has been to check my perfectly working htaccess file and to look at the output of a phpinfo call. It should be obvious to a person working on a technical support line that if I&#8217;m not getting an internal server error after removing a htaccess file, then the issue lies with the custom  htaccess file &#8211; it&#8217;s error isolation 101, surely? I explained this yet again to the operator who then suggested I &#8220;remove the htaccess file to prevent misconfigurations&#8221;. At this point I was getting a little impatient, decided to make my excuses and end the call &#8211; as we were getting no where. Granted, the lady was very polite on the phone, but my issue was not getting dealt with at all.</p>
<p>So after a 35 minute phone call, I was still left with a site, through no fault of my own, that wasn&#8217;t working. Not good for me, the client or my general sanity. I decided to call again, in order to get this resolved. I sometimes do this in the hope of speaking to a different, more informed member of staff. Sometimes I get lucky, others I don&#8217;t.</p>
<p>The second time I called I believe I spoke to someone a little more experienced, still in an offshore location though. I had to re explain my issue again (there were no recent calls logged, quite annoying &#8230;), I got equally as illogical replies as before. I was told one &#8220;solution&#8221; (said in the loosest sense here) was to go through each line of the htaccess one by one and keep commenting out lines until I tracked down the issue. The file is over 250 lines long &#8211; no thanks! That is not a solution at all in my books. At this point I gave up and decided to report back to client.</p>
<p>What was a little odd related to the emails that got sent the my client, about 20 minutes after my first call &#8211; my client forwarded these onto me. Here is a copy of paste (the gramatical errors are definately not mine!!!) of the email:</p>
<blockquote><p>This is an update regarding your previous call, abou your site &#8220;**********&#8221; that is showing error 500. When there is an error with a .htaccess file, all pages of the website will display a 500 error indefinitely until the .htaccess file is corrected or removed. As little as a simple spelling mistake or syntax error will cause a 500 error. If the .htaccess file has been edited recently, replace the file with a backup. If no backup is available, try to undo the changes to the file if you can remember what has been altered. If those options are not feasible, you can try commenting lines one by one by placing a pound sign(#) at the beginning of the line to comment it out. Then try to access a page of the site. Continue to add the pound sign to more lines until the 500 error stops which should help you pinpoint which line needs to be corrected.</p></blockquote>
<p><em>(email sent 14 October 2011 15:51:36 GMT, from support@1and1.co.uk)</em></p>
<p>I then got the following email from them re the second call:</p>
<blockquote><p>This is an update regarding your call awhile ago, please refer to our FAQ link below for you to check the php settings on the server. You will need to create a phpinfo.php file using notepad and copy the code then paste it in your phpinfo.php file: How can I check the PHP settings on the server? <a href="http://faq.oneandone.co.uk/server/managed/8.html" rel="external, nofollow">http://faq.oneandone.co.uk/server/managed/8.html</a></p></blockquote>
<p><em>(email sent 14 October 2011 16:42:00 GMT, from support@1and1.co.uk)</em></p>
<p>A little later, the following email came through, again a copy and paste:</p>
<blockquote><p>Please upload the phpinfo file for you to get hold of the list of all settings allowed on our servers. With regard to the .htaccess file, sometimes the problem is with the syntax you encoded. In this regard, we highly advise that you make sure you key in the correct directives in order to prevent further issues.</p></blockquote>
<p><em>(email sent 15 October 2011 06:23:00 GMT, from support@1and1.co.uk)</em></p>
<p>Great, yet more generic statements that don&#8217;t help. We have established several times now that the htaccess file was working correctly on the 1and1 hosting, that the issue was due to the 1and1 servers and that all I wanted to know was what, if any, htaccess directives are allowed/disallowed.</p>
<p>These emails are not helpful to anyone and needless to say, I won&#8217;t be chasing 1and1 up any further about this &#8211; it&#8217;s far too time consuming. Instead (and for the sake of my own sanity) I advised my client to transfer her site.</p>
<p>What is most concerning, apart from the fact 1and1 support have drastically failed to understand my rather basic issue, is that the replies are clearly written without appreciation for none technical people &#8211; everyone doesn&#8217;t know (read: probably doesn&#8217;t <em>want</em> to know) about the technical aspects of PHP settings and htaccess files.</p>
<p>I digres, all that is done now and the site has been uploaded to some quality web hosting where I can use a htaccess file. When I compare the poor level of customer service, the poor technical knowledge they demonstrated and the fact that a simple issue went on for much longer than it should have, to my current web host, the difference is night and day. With my preferred host, everything is so easy, if I need support I can get answered within a few minutes maximum.</p>
<p>At times like these and as a web developer, you really appreciate a good web host and things &#8220;just working&#8221;. However, the major difference between webhosts in my opinion, is flexibility and basic reason in my experience. Support teams/staff who take the time to understand your issue and have flexibility in solving your issue are easier to deal with. For instance, on my preferred hosts I was having a small issue with a php hashing framework, casuing my site to not work correctly. All that was required was quick email stating the problem and a response saying that they have added in a few commands to a custom php.ini file &#8211; the issue was essentially turned into a none issue &#8211; all sorted within 10 minutes (even though this issue was potentially more complicated than my little htaccess problem).</p>
<p>No drama, no drawn out telephone conversations to offshore locations &#8211; just my issue being solved within good time (thanks to Darren from tsohost for this by the way!). Another big benefit highlighted here is having knowledgeable people &#8211; when I stated my issue, they clearly know what they are talking about and clearly are not reading from prompt sheets &#8211; this alone, speeds up support requests significantly. I have personally come to the conclusion that the staff I was speaking to were using prompt sheets &#8211; purely due to the level of answer (or lack of answer) I was provided with.</p>
<p>Honestly, before you ever choose a webhost do yourself a huge favour. Do not look for the cheapest price. Do your research and test out your potential host first. Pay particular attention to quality and speed of support you receive. I couldn&#8217;t go through the above every time I needed a basic support question answering.</p>
<p>The above represent&#8217;s my own, personal opinion and is in accordance with my <a href="http://www.web-design-talk.co.uk/disclaimer/" rel="nofollow">blog disclaimer</a>. It does not represent any company I have ever or currently work for.</p>
<p>&nbsp;</p>
<p>LATE NIGHT UPDATE! I was just about to go to bed and the following email came through, very unhelpful (although very polite) &#8211; I&#8217;m not sure why this issue is such a huge deal? How is a server error out of the scope of a technical support department????? Anyway: the email (copy and pasted again):</p>
<blockquote><p>We deeply apologize for this inconvenience. Error 500 is misconfiguration of script in the .htaccess file. Please check it and we are no longer able to extend our help as this is already out of our scope of support. Again, we understand your frustration and we deeply apologize for the inconvenience.</p></blockquote>
<p><em>(email sent 15 October 2011 21:14:00 GMT, from support@1and1.co.uk)</em></p>
<p>If anyone is interested, I can post by email response to the latter email. But as you&#8217;d imagine, I was less than pleased at the exceptionally poor level of service from 1and1 <img src='http://www.web-design-talk.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/410/appreciating-your-web-host/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SEO Indexing Services and Why You Don&#8217;t Need Them</title>
		<link>http://www.web-design-talk.co.uk/393/seo-indexing-service-why-you-dont-need-it/</link>
		<comments>http://www.web-design-talk.co.uk/393/seo-indexing-service-why-you-dont-need-it/#comments</comments>
		<pubDate>Sat, 01 Oct 2011 09:15:52 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=393</guid>
		<description><![CDATA[SEO indexing is the idea of getting a new site indexed, or included within Google as quickly as possible. However, there are companies who prey on people not in the know, and sell seo indexing as a much bigger service. In reality getting your site indexed is something you can do yourself, if you have [...]]]></description>
			<content:encoded><![CDATA[<p>SEO indexing is the idea of getting a new site indexed, or included within Google as quickly as possible. However, there are companies who prey on people not in the know, and sell seo indexing as a much bigger service. In reality getting your site indexed is something you can do yourself, if you have a spare 15 minutes. Worse still, some companies are changing hundreds of pounds for seo indexing &#8211; it makes my eyes water.</p>
<p><span id="more-393"></span></p>
<h2>SEO indexing &#8211; The (very simple) Process</h2>
<p>To get your new site indexed you&#8217;ll need to do a couple of things:</p>
<ul>
<li>Create a sitemap (or big list of your webpages) at <a href="http://www.xml-sitemaps.com/">XML Sitemaps</a>, name it sitemap.xml and upload to your web server</li>
<li>View the list of ping URLs &#8211; or list of website addresses you can visit directly to notify search engines about your website &#8211; see <a href="http://www.seroundtable.com/archives/013113.html">SEO Ping URLs</a> E.g. for Google, visit http://www.google.com/webmasters/sitemaps/ping?sitemap=http:%3A//www.YOURWEBSITE.co.uk/sitemap.xml</li>
<li>If you get time, create a <a href="http://www.google.com/webmasters/">Google Webmaster Account</a> and add your site there too &#8211; not essential to get your indexed, but very useful in the long run</li>
</ul>
<p>However, you can ignore the above and get your site indexed even easier. In short, get a backlink from a site already included within Google. So if you have a friend who has a website, ask them to link back to you. In all honestly, if you site is simple and is doesn&#8217;t have a huge complicated nested structure, you probably won&#8217;t need a sitemap at all -  a simple backlink will do. Or even easier, simply mention the site within twitter. I experimented the latter using a new ecommerce site with ~300 pages. The single mention of the web address in a tweet got the site fully indexed with 2 days. You can speed things up even further if you get mentioned on a very popular or authoritative site.</p>
<p>That&#8217;s it in a nutshell &#8211; some questionable companies are charging £500 for this! For an easy life, I&#8217;m not going to mention the company name here.</p>
<p>I&#8217;ll go through some of the items included on the list of &#8220;seo indexing services&#8221; that are typically offered:</p>
<ul>
<li>Yahoo.co.uk submission (1-2 minutes)</li>
<li>Submit to Google.co.uk (1-2 minutes)</li>
<li>Create robots.txt &#8211; you don&#8217;t need a robots.txt file to get your site indexed in Google or any other search engine</li>
<li>Create sitemap (couple of minutes at most using <a href="http://www.xml-sitemaps.com/">XML Sitemaps</a></li>
<li>Submission to bing (1-2 minutes, Bing is MIcrosoft&#8217;s own search engine)</li>
<li>Upload sitemap to the latter 3 sites (bit of overlap here, but still, no more than 5 or 6 minutes for all 3)</li>
<li>Verify sitemap in the latter 3 sites. This is a common phrase a lot of the sites I looked at made. I&#8217;m not sure if this means checking the correctness of the actual generated sitemap (which you won&#8217;t need to do if using that online generator) or checking a few days later if your site is included within say, Google (go to Google and search for site:www.YOURSITE.co.uk to check) &#8211; 5 minutes work at most.</li>
</ul>
<h2>Repeat Submissions &#8211; &#8220;The Ultimate Con&#8221;</h2>
<p>There are companies out there who charge hundreds of pounds for this service AND charge for the service on a yearly basis. Yes &#8211; there is a further charge again the following year. You simply do not need this. If you site is relatively small you don&#8217;t need this at all &#8211; maybe get the odd backlink from twitter or facebook to keep Google interested. Or even easier, go to the official <a href="http://www.google.com/addurl/?continue=/addurl%20">Google Add URL</a> site &#8211; that allows you submit your site within in seconds. Additionally, after a year it&#8217;s a very plausable assumption to make that you will have naturally built up a few backlinks and Google will automatically revisiting your site.</p>
<h2>An Example &#8211; web-design-talk.co.uk</h2>
<p>To illustrate how easy it is to get new content included, yourself,  I&#8217;ll use this very blog as example. Whenever I publish a new entry on this site I do the following:</p>
<ul>
<li>Ping my XML Sitemap with Google (see above how to do this)</li>
<li>Post a link to the post from Twitter</li>
<li>Submit the post to digg</li>
<li>Mention the post on my status updates profile on the web designer forum</li>
</ul>
<p>This all takes roughly 5 minutes and gets my site included in Google within a couple of hours &#8211; sometimes faster.</p>
<p>Whenever you see an SEO or Web Company offering something as shady as &#8220;SEO Indexing&#8221; take a big step back and question it. As them why is it needed regularly, why does it cost so much and why a site will backlinks will not suffice &#8211; basically, ask questions about specifically thr steps they will be taking. It&#8217;s one of those grey areas of SEO that companies are only to happy to aggresively market. Worse still, it is aimed highly at people not in the know and therefore marketed to them. E.g. when the sales person asks if you would like your site to be included in Google the customer will instinctively say yes. It&#8217;s highly questionable in my opinion and should be questioned. If you&#8217;re ever unsure, ask on a forum.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/393/seo-indexing-service-why-you-dont-need-it/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Enchaning an Invoicing System for Reporting</title>
		<link>http://www.web-design-talk.co.uk/383/enchaning-a-invoicing-system-for-reporting/</link>
		<comments>http://www.web-design-talk.co.uk/383/enchaning-a-invoicing-system-for-reporting/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 19:44:04 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=383</guid>
		<description><![CDATA[At the start of the year I wrote a custom invoicing system for a client, using PHP and Smarty (hope to convert to use Twig at some point). The client has since come back to me to built in extra functionality &#8211; namely a reporting section. I thought I&#8217;d share my solution to the issue [...]]]></description>
			<content:encoded><![CDATA[<p>At the start of the year I wrote a custom invoicing system for a client, using PHP and Smarty (hope to convert to use Twig at some point). The client has since come back to me to built in extra functionality &#8211; namely a reporting section. I thought I&#8217;d share my solution to the issue I was faced with.</p>
<p>The client required some fairly involved reporting facilities, here is a sample of some of the requirements from the client:</p>
<ul>
<li>Aggregated report, split between two dates of our choosing, with totals split by either month, day or week (we want to choose)</li>
<li>A list of invoices for a day of our choosing with aggregated totals of for the day selected</li>
<li>Annual invoicing report &#8211; we want to show a summary of the total for the items sold, the total vat charged and summaries for average invoice values</li>
<li>Invoices totals grouped by customer</li>
</ul>
<p>There were several more, but they were all similar to the above.</p>
<p>Firstly, I&#8217;ll explain the database setup, for the invoicing, of the current system I built. It was basically two tables &#8211; one for the invoivce header and one table for the invoices items &#8211; nothing un typical there at all.</p>
<p><span id="more-383"></span></p>
<p>My first point of call to integrate the reporting was to use what I had already. This proved qwuite complicated as it involved fecthing large sets of data to calculate the totals required by the reports &#8211; this was also pretty slow when running the more intensive reports over a longer date range. It would get even more complicated and database intensive when I wanted totals for the other reports.</p>
<p>After some consideration, my solution to this was simple. I decided to add a few new columns to my invoice header table &#8211; &#8220;invoice_total&#8221;, &#8220;invoice_sub_total&#8221;, &#8220;invoice_vat&#8221; and &#8220;total_invoice_items&#8221;. For the reporting side of things, this made the whole process much easier. For example:</p>
<p>To get an aggreate total figure invoiced between two dates, I required a single sql statement, that required no joins, or loops in PHP:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT SUM(`invoice_total`) As total_invoiced FROM `invoice_header` WHERE (`invoice_issue_date` &gt;= :myDate AND `invoice_issue_date`
</pre>
<p>Equally as simple, to get a monthly total between two dates, grouped by month, the sql statement was just as simple:</p>
<pre class="brush: sql; title: ; notranslate"> SELECT SUM(`invoice_total`) As total_invoiced FROM `invoice_header` WHERE (`invoice_issue_date` &gt;= :myDate AND `invoice_issue_date`
</pre>
<p>Getting average invoice sub total between two dates:</p>
<pre class="brush: sql; title: ; notranslate"> SELECT AVG(`invoice_sub_total`) As average_invoice_subtotal FROM `invoice_header` WHERE (`invoice_issue_date` &gt;= :myDate AND `invoice_issue_date` </pre>
<p>The latter made the actual PHP code required to produce the required reports very straightforward &#8211; before I would have required joins to caluclate the totals and multiple sql queries &#8211; that could have got quite messy. I also gained a few added benefits of storing the totals within my header table:</p>
<ul>
<li>On the print invoice screen, there was need to calculate anything, as I simply read the totals from the datbase</li>
<li>On the invoice listing screens, I could now display an invoice total in a seperate column, as this was again, simply a database value &#8211; before I would have needed to calculate this total via the invoice items table</li>
</ul>
<p>However, this simplicity in one area, came at a cost &#8230; unfortunately. As all report data was now based from totals in the invoice header table, this figure needed to be correct at all times. I needed to amend the add and edit invoice functions. When adding an invoice, I needed another loop to calculate the aggregate totals to insert into the database. When editing the invoice, I needed to recalculate these totals each time the invoice was edited (in case a row was deleted for example). Whilst the latter added a little more work when adding/editing invoices, I feel that this is well worth it due to simplicity when dealing with the reporting side.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/383/enchaning-a-invoicing-system-for-reporting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ECommerce Content Source Ordering for Product Detail Pages</title>
		<link>http://www.web-design-talk.co.uk/326/ecommerce-content-source-ordering-for-product-detail-pages/</link>
		<comments>http://www.web-design-talk.co.uk/326/ecommerce-content-source-ordering-for-product-detail-pages/#comments</comments>
		<pubDate>Sat, 03 Sep 2011 19:07:37 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[CRO]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[google analytics]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[xHTML]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=326</guid>
		<description><![CDATA[Content source ordering or SOC (source ordered content) is the idea that content nearer the top of the raw  HTML source code has greater weight and meaning for search engines. For instance, a paragraph of text right at the top of the HTML source has more meaning than the same passage that may appear in [...]]]></description>
			<content:encoded><![CDATA[<p>Content source ordering or SOC (source ordered content) is the idea that content nearer the top of the raw  HTML source code has greater weight and meaning for search engines. For instance, a paragraph of text right at the top of the HTML source has more meaning than the same passage that may appear in the footer. It is very useful for those all too common generic menus (home, about, contact etc.) that has no SEO benefit at all, yet appears at the top of every page of your site. With SOC and absolute positioning of DOM elements, it is possible to position this HTML at the very bottom of the source code, thus gicing greater weight to your page content.</p>
<p>The latter is not a new idea by any means, but is generally considored to be a positive practice to implement on any site.</p>
<p><span id="more-326"></span></p>
<h2>SOC and Ecommerce</h2>
<p>The effect is compounded on ecommerce sites &#8211; sites that usually have a heavy template footprint. For example, a typical ecommerce site may contain a category listing with child categories in the form of a &#8220;mega drop down menu&#8221;, as they seem to to be coined. This is fine, as such menus do contain a lot of good keyword rich material that will be relevant to your site.</p>
<p>However, I have recently been experimenting a little on an ecommerce site I regularly perform SEO on, that does have a fairly beefy drop down menu. I have been focusing on product pages &#8211; I like to think of these as your most important pages and pages you&#8217;d want people to land on, as it tends to help conversions. In my eyes, any white hat technique to give greater weight and meaning to such pages is a good thing.</p>
<p>For the site in question I edited the source to force the top menu to the very bottom of the page and used absolute positioniong to force the top menu to the top of the screen for the user, when the page is rendered. I performed a similar action for the product description. As a result the important content i.e. the product title and description are now very close to the top of the page within the HTML.</p>
<h2>Further Product Page Optimisations for SEO</h2>
<p>Additionally I made a couple of other minor optimisations that I&#8217;ve noticed some bigger sites are using. At the top of the site in question, there is a company logo &#8211; a link, styled with a background using css. For the product page I amended this to a h1 tag with the product title within the header tag. I then used text-indent to hide this. Further down the page, I replaced the old header one tag (was further down the page previously, next to the product description) with a h2 tag and placed the product strapline within a h3 tag. So, the HTML for my company logo, for a product page is as follows:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;h1&gt;
&lt;a href=&quot;/product-url.html&quot;&gt;My Product Name Here&lt;/a&gt;
&lt;/h1&gt;
</pre>
<p>I&#8217;ve been runing the above for a month now and have noticed the following trends in Google Analytics &#8211; I can&#8217;t be 100% sure this is directly down to the above though:</p>
<ul>
<li>Increased traffic to product detail pages from Google</li>
<li>1.2% increase in sales conversions</li>
</ul>
<p>Over the next month I&#8217;ll be experimenting with replacing the logo with the category name, on my category listing pages too. I&#8217;ll update this post with my findings.</p>
<p>Have you had any similar experiences using the above, or similar?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/326/ecommerce-content-source-ordering-for-product-detail-pages/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Storing Ecommerce Order Information Correctly</title>
		<link>http://www.web-design-talk.co.uk/323/storing-ecommerce-order-details/</link>
		<comments>http://www.web-design-talk.co.uk/323/storing-ecommerce-order-details/#comments</comments>
		<pubDate>Mon, 04 Jul 2011 19:23:28 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Paypal]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=323</guid>
		<description><![CDATA[Yesterday I was doing a tiny bit of web realted freelancing for a friend &#8211; simply involving doing a bulk, conditional update of his entire stock for his ecommerce website. The site itself was simple in design and used PayPal with a sprinkle of IPN. So, after a bit of MySQL magic, I updated all [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday I was doing a tiny bit of web realted freelancing for a friend &#8211; simply involving doing a bulk, conditional update of his entire stock for his ecommerce website. The site itself was simple in design and used PayPal with a sprinkle of IPN. So, after a bit of MySQL magic, I updated all of his prices, for all ~700 products in one fell swoop &#8211; all good so far, easy money.</p>
<p>However, after an hour or so of emailing the store owner I got a very worried phone call. In short, the bulk price update to had caused all archived order invoices to become incorrect. Why &#8211; due to bad database design by the original developer, let me explain.</p>
<p><span id="more-323"></span>The <strong>web developer</strong> had stored the order as you would expect &#8211; an order header table, coupled with a order lines table (one record for each order item). All good so far. Where the previous web developer had fallen short is not storing the price at the time of the order, instead simply storing the product id within the order lines table and looking order details via the way of an <a title="Inner Join on Wikipedia" href="http://en.wikipedia.org/wiki/Join_%28SQL%29#Inner_join" target="_blank">INNER JOIN</a> &#8211; bad move unfortunately. Obviously, in any sort of product price update (as above) all of his historical order information would become null and void. The latter was especially bad in this case, as the store owner pretty much used the list of store orders as base for financial and year end reporting, as the business was pretty small (no Sage then). Explaining the latter to a none technical client is even harder, believe me <img src='http://www.web-design-talk.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>To avoid such nightmares <em>never</em>, <em>ever </em>store such information in this manner &#8211; always store product details at the time of ordering. Storing products details at this stage will ensure that an order made in 2008 will be correct when viewed even 10 years later when prices will have been updated. So, in the order lines table, as an absolute minimum store the product name, price and any attributes that will affect price &#8211; meaning an INNER JOIN with the order header table is not required.</p>
<p>Depending upon your business rules and frequency by which your product information changes, you could also store the product at time of ording, within a product archive table &#8211; that stores basic product info. This way, there is the benefit of saving the description the customer saw at time of ordering.</p>
<p>What is descriobed above is basically bog standard when making any ecommerce solution, or even using something bigger like Opencart, but when it is not present, the amount of issues it causes is huge.</p>
<p>Luckily for me (and the store owner) I created a quick backup of the entire store&#8217;s database schema and data before making the bulk update, so was able to restore this for the time being. All I have to do now is amened the database design accordingly and alter the way the site stores order information.</p>
<p>So, never ever rely upon relational data, to view and store data that needs to be achived.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/323/storing-ecommerce-order-details/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>CRO and SEO &#8211; The Essential Relationship</title>
		<link>http://www.web-design-talk.co.uk/317/cro-for-seo/</link>
		<comments>http://www.web-design-talk.co.uk/317/cro-for-seo/#comments</comments>
		<pubDate>Sun, 22 May 2011 16:39:14 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[CRO]]></category>
		<category><![CDATA[google analytics]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[ui design]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=317</guid>
		<description><![CDATA[Lately, I&#8217;ve been reading a lot of SEO related posts at the web design forum and have been contacted by a lot of seo agencies at work (my email may be doing the rounds). The thing that I&#8217;m most amazed by is what a narrow and ultimately incorrect, view of search engine optimisation some people [...]]]></description>
			<content:encoded><![CDATA[<p>Lately, I&#8217;ve been reading a lot of SEO related posts at the <a rel="nofollow" href="http://www.webdesignerforum.co.uk/forum/34-seo-search-engine-optimisation-search-engines/">web design forum</a> and have been contacted by a lot of seo agencies at work (my email may be doing the rounds). The thing that I&#8217;m most amazed by is what a narrow and ultimately incorrect, view of search engine optimisation some people and companies seem to have.</p>
<p>Let me elaborate.</p>
<p>As much as I love the web design forum, some of the advice given is frankly, awful, I can&#8217;t<em> </em> not post a reply. A lot of the advice given is a range of generic seo quotes that people have picked from the web. E.g. &#8216;use headings&#8217;, &#8216;have a keyword density of 4%&#8217; and &#8216;get backlinks&#8217;. The majority of the advice centers around simply getting people on a website or appearing for a generic, competitive term. Compare the latter to SEO&#8217;s calling me up at work (and I quote) &#8211; &#8220;there are 9,000 people searching for xxxxx every month, imagine having 9,000 more people on your site every month&#8221;.</p>
<p>All this is fine in theory. However, say you do manage to appear for a generic competitive term or get 9,000 new people on your site &#8211; what then. There is a high likelyhood that your boucne rate (or percentage of people who leave your almost immediately) will increase a lot.</p>
<p><span id="more-317"></span></p>
<h2>Enter Conversion Rate Optimization</h2>
<p>So what exactly has happened in this instance? You now have a lot of traffic coming to your site with lots of people boucning off. For websites that require their visitors convert &#8211; basically any site that sells a service or product (read: any business website) this is bad news, not to mention a total waste of time.</p>
<p>As a website owner, if you found your site at the latter stage, you&#8217;d want to investigate something called <strong>conversion rate optimization</strong> (or CRO). This is a term given to the science of converting more of you visitors into actual customers &#8211; which is what any business requires from their website. Essentially, it the measure of success of a website. For clients who say they want a nicely designed site, with lots of graphics, or clients who want to appear number one for lots of keywords &#8211; they really mean they want a site that converts and makes them money.</p>
<p>This one factor is overlooked so much and seems to be a highly vicious circle. SEO and CRO go hand in hand, indeed they <em>need </em>to go hand in hand as they are tighly linked. Quality SEO practice is needed to get more people onto your site, while CRO is needed to convert these visitors into customers.</p>
<p>It amazes me that I still get marketing calls from professional SEOs who say they can get me onto page one for &#8216;web design&#8217;, without any mention at all of CRO &#8211; they simply say they&#8217;ll get lots of quality backlinks to my site. This is wrong for two reasons. Yes, my site will recieve a lot of traffic, but is it fully optimised to convert visitors into customers (currently it isn&#8217;t, currently undergoing a redesign). Additionally, it&#8217;sd a well known fact that short tail terms don&#8217;t convert as well as a long tail terms. I&#8217;m currently much happier being ranked highly for a longer tail version of &#8216;we design&#8217; &#8211; &#8216;web design xxxx&#8217;, where xxxx is my county. Yes, it has less traffic than &#8216;web design&#8217;, but the traffic is more targetted and relevant. Additionally, I have a geo targetted page in the SERPs for this term, which helps too.</p>
<p>In relation to narrow views expressed on the web design forum, well, those people aren&#8217;t helping anyone and seem to measure the success of SEO in terms of &#8216;how many&#8217; people land on their site. As I&#8217;ve explained above, this is only part of SEO. I&#8217;ll take a typical scenario. Someone asks how they can improve the SEO on their site. People instantly jump in with the generic seo quotes (which are a pet hate of mine). I&#8217;ll have a quick look att he OPs site &#8211; awful design, no useful content there at all, sometimes not even contact details are present. This is where people need to work backwards before quoting the seo quotes they love so much. Firstly, perform some CRO on the target website and ensure that if a visitor does land on your site that are more likely to convert.</p>
<p>To illustrate some examples of CRO, I&#8217;ll explain a few simple and small examples I&#8217;ve personally used on some sites I&#8217;ve been working on:</p>
<p>&nbsp;</p>
<ul>
<li>Make call to action button stand out and adjust the button text &#8211; on a corporate site website, increased enquiries by 2.5% in the first month</li>
<li>Adjust the way an existing ecommerce store displays related items &#8211; instead of selecting 10 random products on the basket page, select 10 products that people have ultimately ordered, based on the current shopping basket &#8211; increased sales by 2.5% in the first month</li>
<li>Removed unecessary fields in our website enquiry form &#8211; cutting it down to 3 fields, from 6 &#8211; increase in enquiries</li>
<li>Boldened and increased font size of first paragraph of text on inner, informational pages &#8211; resulted in people spending more time on the site and allowed the page to focus a clearer message to the visitor</li>
<li>For one company, that had worked with several recognizable brands, I added their logos onto the site in prominant place to build instant trust and reputation &#8211; increase in conversions of 3.5% in first month</li>
</ul>
<p>I&#8217;m by no means an internet marketer, SEO guru or leading web designers at all <img src='http://www.web-design-talk.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  However, it doesn&#8217;t take any of those to realise that once you have attrcated people to a site you need to do everything humanly possible to get a conversion. On the flip side, you need SEO to get a decent level of targetted traffic on a website.</p>
<p>SEo and CRO, a match made in heaven <img src='http://www.web-design-talk.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/317/cro-for-seo/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
	</channel>
</rss>

