<?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 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>Wed, 28 Jul 2010 21:50:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>W3C Validation and SEO Benefits &#8211; My Opinion</title>
		<link>http://www.web-design-talk.co.uk/214/w3c-validation-seo-benefits-my-opinion/</link>
		<comments>http://www.web-design-talk.co.uk/214/w3c-validation-seo-benefits-my-opinion/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 21:40:23 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=214</guid>
		<description><![CDATA[The link between full W3C Validation and it&#8217;s important upon SEO is commonly discussed topic and a huge taboo. This is the notion that  having a valid site according to the W3C Standards is either critical (or not) to your website&#8217;s SEO.The first thing to note that a site passing W3C Validation will have met [...]]]></description>
			<content:encoded><![CDATA[<p>The link between full W3C Validation and it&#8217;s important upon SEO is commonly discussed topic and a huge taboo. This is the notion that  having a valid site according to the <a href="http://www.w3.org/standards/">W3C Standards</a> is either critical (or not) to your website&#8217;s SEO.The first thing to note that a site passing W3C Validation will have met the following criteria: will not use depreciated tags and will not have syntax errors &#8211; essentially a syntax check.</p>
<p>I physically cringe when I hear quotes such as &#8216;valid xhtml will help your users&#8217;. Valid xhtml <strong>will not</strong> help your users, to help your users a site needs to adhere to web coding standards &#8211; this is an entirely different beast. The main difference here is the practice of seperating content from presentation, thus giving the content increased meaning. For example, a page using tables to layout the whole web page would not adhere to web coding standards because using tables for layout is semantically incorrect and requires a lot more code. Tables should be used for tabular data, simple. Another example is the use of paragraph and header tags. Visually they are very similar but have a very very different meaning sementically. However, yet again, semantically incorrect pages will pass validation. The main Google webpage doesn&#8217;t even validate (interestingly, Google does&#8217;t even quote html attributes in order to save on page size). In my opinion, as long this is the case W3C validation will be a none issue, SEO wise.</p>
<p>Understanding which semantic elements add value to the document will affect the onsite of a website and <strong>is</strong> an SEO ranking factor.I have read several artuicles that describe W3C validation and SEO as a match made in heaven, this simply isn&#8217;t the case, although web semantics and SEO are.</p>
<p>There are many websites (40% is a figure thrown around a lot) that do not validate, yet perform quite well in search engines as they have a range of high quality content. Take a quick example. I searched for a <strong>very</strong> competitive term &#8220;houses&#8221;. The number one result was rightmove.co.uk. Rightmove even has an authorative listing for that term too &#8211; SEO wise there can&#8217;t be too many issues here. Running that site through the validator throws up 33 errors and 22 warnings. &#8211; see <a href="http://validator.w3.org/check?uri=http%3A%2F%2Fwww.rightmove.co.uk%2F&amp;charset=%28detect+automatically%29&amp;doctype=Inline&amp;group=0">the result</a>. These are mainly smaller syntax errors that quite rightly, the developers of that site have ignored. There are endless examples where sites a lot worse appear at the top of the SERPs, even though they fail to validate and sometimes, don&#8217;t follow web standards at all.</p>
<p><span id="more-214"></span></p>
<p>There is also another camp that stresses that W3C validation is important for page presentation, in turn page presentation affects your reputation and thus your SEO (the number of people willing to backlink to you). Well again, here I&#8217;d quote the subtle difference between validation and semantics. YOu can also have a perfectly presented and formatted page that fails to validate.</p>
<p>The addictive, green &#8220;congratulations&#8221; message that appears is far too often used to lure unknowledgeable clients into a false sense of trust and can go a very long way into building trust between the SEO and client. As Google uses over 200 ranking factors when indexing your website, I find it very hard to believe that minor syntx errors play much role at all. Whenver I see SEO companies that associate &#8220;100% valid xHTML code&#8221; and SEO I run a mile. It&#8217;s clear they have little knowledge of SEO from this one ststement.</p>
<h2 style="border:none;margin-left:0;">Validator error severity</h2>
<p>My next hate is the severity of these errors are often mis-quoted. Don&#8217;t get me wrong, validating your website is good practice, but not critical for SEO. A random unclosed paragraph tag, or site that uses &#8216;b&#8217; tags instead of &#8216;strong&#8217; tags is of little worry to me. I can spend my time of much more important, valuable areas &#8211; at the end of the day this won&#8217;t effect your SEO or the way the page displays. However, when there are more serious  (or hard) errors iccur these could very well stop the page from rendering all together. The latter is of course an erro you<strong> should</strong> take note of and fix quickly. However, minor syntax errors are of little concern. At the end of the day, pages that have an expected layout and content that the bots can consume easily is my major concern. However, pages that validate fully don&#8217;t give you SEO benenfit at all, however nice it is to have.</p>
<h2 style="border:none;margin-left:0;">Full validation isn&#8217;t always possible</h2>
<p>Another point is that full validation isn&#8217;t always possible. For instance, getting your site to display correctly across the plethora of browsers available can cause validation errors. This brings me to another issue. At lot of people seem to assume that a page that doesn&#8217;t pass the W3C validation is badly coded. I&#8217;ll use the example of the Google home page here. This page doesn&#8217;t validate due to a numbers of reason including the numbers of browsing devices it needs to cater for and page size (saving them a lot of money). By the latter logic, Google is a badly made webpage, I think not. I&#8217;m really not going into this anymore as it infuriates me so much. There is a trend where someone checks a page through the validator, if it fails they instanyly make a judgement that the site is badly made.</p>
<p>To conclude, at the minute there really is no evidence to suggest that Google factors in the validity of your code. In time search engines use it as a ranking factor, simialr to how Google began to use loading speed as a minor ranking factor. Validating or not is NOT the same thing as serious HTML errors that hinder crawling and indexing &#8211; this is one huge SEO scam in my opinion and is pushed upon unsuspecting an unknowledgable clients. Furthermore, I&#8217;m yet to see a site built so badly that it has failed to be included in search engines.For me, quality, quthorative content will always be at the heart of SEO, not coding syntax.</p>
<p>I&#8217;m also not saying that W3C validation should be ignored. Tomorrow, Google could well decide that W3C validation is a must and a suddenly a major ranking factor. However, for the time being, is a bit of a none issue for me.</p>
<p>Is W3C validation good practice for web developers, definately. Is W3C validation a must for SEO, not right now. Are SEO and W3C validation highly linked right now, very unlikely.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/214/w3c-validation-seo-benefits-my-opinion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Paging with Caching</title>
		<link>http://www.web-design-talk.co.uk/210/php-paging-with-caching/</link>
		<comments>http://www.web-design-talk.co.uk/210/php-paging-with-caching/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 11:26:36 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=210</guid>
		<description><![CDATA[The majority of PHP paging script with contain a request to the database for a total row count. This is perfectly acceptable if you script needs an exact and accurate results count. However, most sites don&#8217;t need a dynamic count and the total results count represents an uneeded database request. On busier sites this effect [...]]]></description>
			<content:encoded><![CDATA[<p>The majority of PHP paging script with contain a request to the database for a total row count. This is perfectly acceptable if you script needs an exact and accurate results count. However, most sites don&#8217;t need a dynamic count and the total results count represents an uneeded database request. On busier sites this effect can become quite limiting and will slow down you scripts.</p>
<p>As an example take a website that gets say 10 hit per second, withouit caching this represents 20 (10 hits on your database and 10 hits on your database to fecth the result set) hits per second to your database &#8211; on larger sites and larger result sets  this effect is amplified. However, by simply caching the total number of rows returned you can cut the requests to your database in half. </p>
<p>Google uses a caching system on their results (albeit more more complicated) and they never retuirn the exact amount of results (the perforamnce hit on a site as big and busy as Google would be absolutely huge!). Instead they present results as: &#8220;results 20-40 of about 248,000&#8243; &#8211; with figure of 248,000 coming from an estimated cache value. </p>
<p>To cache the number of results the script would simply store a count of the total number of records in a SESSION variable (assume the cached session value is called &#8220;totalResults&#8221;. You could also store the result as a COOKIE that expires in the future, to force an update the cached number of rows. Using sessions, the code is very simply:</p>
<pre class="brush: php;">
if( !isset($_SESSION['totalResults']) ) {
  //Code to query your database for a row count
} else {
  //use the total record count directly from the session variable
  $myPagerObj-&gt;pageSomeData($_SESSION['total_records'], $perPage, $curPage);
}
</pre>
<p>It would also be wirth doing some validation on the cached page value, for security. However, the latter would usually be done directly in you&#8217;re paging class.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/210/php-paging-with-caching/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JQuery Hover Effect Image Gallery For eCommerce</title>
		<link>http://www.web-design-talk.co.uk/200/jquery-hover-effect-image-gallery-for-ecommerce/</link>
		<comments>http://www.web-design-talk.co.uk/200/jquery-hover-effect-image-gallery-for-ecommerce/#comments</comments>
		<pubDate>Tue, 04 May 2010 16:58:01 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=200</guid>
		<description><![CDATA[After searching  for a simple jquery image gallery for an online store I decided to make my own. There were several solutions that were close to what I wanted, but quite there. The project required an simple large vierw of an image with multiple thumbnails below, when hovered upon switched the large image. The requirements [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" style="border: 1px solid #cccccc; padding: 2px 2px 2px 0px; margin-right: 15px;" title="web design talk jquery gallery" src="http://www.web-design-talk.co.uk/wp-content/uploads/2010/05/web-design-talk-jquery-gallery.png" alt="web design talk jquery gallery" width="210" height="255" />After searching  for a simple jquery image gallery for an online store I decided to make my own. There were several solutions that were close to what I wanted, but quite there. The project required an simple large vierw of an image with multiple thumbnails below, when hovered upon switched the large image. The requirements were as follows: cross browser compatible (IE6 plus, Chrome and Firefox &#8211; all the major browsers), have a nice fading effect between image changes and be totally degradable if JavaScript was turned off.</p>
<p>First of all, take a peek and the finished <a href="http://www.web-design-talk.co.uk/examples/5/">JQuery image gallery</a> &#8211; I&#8217;ve put the gallery in context on a product detail page for an ecommerce store.</p>
<h4>JavaScript and JQuery to the Rescue!</h4>
<p>JQuery was the <strong>JavaScript framework </strong>of choice and made it easy to get things up and running. Techniqually the same effect can be achieved without JQuery, but for simplicity I&#8217;m using JQuery. The code is quite easy to follow and I&#8217;ll just pickup  up on the main parts.</p>
<p>Firstly we&#8217;ll start off with the HTML &#8211; simply two dividers, with an unordered lists for the thumbnail images:</p>
<pre class="brush: xml;">
&lt;div id=&quot;bigpic&quot; class=&quot;b&quot;&gt;&lt;img src=&quot;images/big/iphone-3-big.jpg&quot; alt=&quot;iPod Shuffle 16GB Zoom View&quot; /&gt;
&lt;p id=&quot;desc&quot;&gt;iPod Shuffle 16GB Zoom View&lt;/p&gt;

&lt;/div&gt;

&lt;div id=&quot;thumbs&quot;&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a rel=&quot;images/small/iphone-1-small.jpg&quot; href=&quot;images/big/iphone-1-big.jpg&quot;&gt;
&lt;img src=&quot;images/small/iphone-1-small.jpg&quot; alt=&quot;iPod Shuffle Front View In Blue!&quot; /&gt;
&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt; &lt;a rel=&quot;images/small/iphone-2-small.jpg&quot; href=&quot;images/big/iphone-2-big.jpg&quot;&gt;
&lt;img src=&quot;images/small/iphone-2-small.jpg&quot; alt=&quot;iPod Shuffle Dual View Grey!&quot; /&gt;
&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt; &lt;a rel=&quot;images/small/iphone-3-small.jpg&quot; href=&quot;images/big/iphone-3-big.jpg&quot;&gt;
&lt;img src=&quot;images/small/iphone-3-small.jpg&quot; alt=&quot;iPod Shuffle 16GB Zoom View&quot; /&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</pre>
<p>The main image is housed in the divider with the id of &#8216;bigpic&#8217;. I&#8217;ve also added a description below the big image &#8211; this will change when the image is hovered over to the thumbnail alternate text. Each thumbnail link goes directly to the enlarged version of the image &#8211; this way, the gallery will still work when JavaScript is turned off.</p>
<h4>The JQuery Magic &#8230;.</h4>
<p>Right after including the JQuery library (I recommend you make use of Google CDN for this &#8211; there are many <a href="http://www.web-design-talk.co.uk/81/reasons-to-let-google-host-your-jquery-files/">reasons to let Google host your JQuery files</a>) I have included an int,js file &#8211; this contains all the gallery JavaScript. The int file is a small file that catches a hover on each thumbnail and switches the main gallery image (Our &#8216;bigpic&#8217; divider). All the code is contained within the mahic document.ready listener. The first half of the file catches the hover on a thumbnail:</p>
<pre class="brush: jscript;">
$('#thumbs ul li a').hover(
		function() {
			var currentBigImage = $('#bigpic img').attr('src');
			var newBigImage = $(this).attr('href');
			var currentThumbSrc = $(this).attr('rel');
			switchImage(newBigImage, currentBigImage, currentThumbSrc);
		},
		function() {}
	);
</pre>
<p>Here we are getting the currentBig image href, the new big image (from our thumbs href) and current thumbnail src. The second empty fucntion is included to say &#8216;don&#8217;t do anything when hovering away&#8217;. Exclude this empty function and the hover event will continue to fire when you leave the image. Now we have these three variables we pass them to our switchImage function, code below:</p>
<pre class="brush: jscript;">
function switchImage(imageHref, currentBigImage, currentThumbSrc) {

		var theBigImage = $('#bigpic img');

		if (imageHref != currentBigImage) {

			theBigImage.fadeOut(250, function(){
				theBigImage.attr('src', imageHref).fadeIn(250);

				var newImageDesc = $(&quot;#thumbs ul li a img[src='&quot;+currentThumbSrc+&quot;']&quot;).attr('alt');
				$('p#desc').empty().html(newImageDesc);
			});

		}

	}
</pre>
<p>This is quite self explanatory. The first check made is that the current big image is not the same as the target big image &#8211; if this was true we would fade in and out the same image, which leads to a rather weird looking effect. If both paths match, the user has hovered over the thumbnail of the current big image (in this case nothing would happen). Hovering over any other image will result in the current big image fading out, setting the big image src to the src from the thumbnail (the new image) and populating our description paragraph.</p>
<h4>Using the Gallery in a Production Website</h4>
<p>In the example 3 static large and small images have been manually added for simplicity. In a real website, maybe an online store, you would retrieve this information from a database. Another thing to note is image sizes. I always find it useful to let users upload whatever file resolution they want, giving them the exact pixels as a recomendation. To ensure that a particularly large file wouldn&#8217;t break the layout I tend to sue image resizing scripts, such as the <a href="http://shiftingpixel.com/2008/03/03/smart-image-resizer/">excellent smart image resizer from shifting pixel</a> &#8211; uploaded images can be automatically scaled to dimensions of your choosing.</p>
<p>Also, at some point I&#8217;ll learn about making your owns plugins for JQuery and turn this into a self contained plugin <img src='http://www.web-design-talk.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>There&#8217;s not a lot more to this to be honest. tested in IE6, IE7, IE8, Chrome and Firefox &#8211; all working nicely.</p>
<p>Take a look at the <a href="http://www.web-design-talk.co.uk/examples/5/">final result</a> or <a href="http://www.web-design-talk.co.uk/wp-content/uploads/2010/05/jquery-gallery--www.web-design-talk.co.uk.zip">download the source files</a>. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/200/jquery-hover-effect-image-gallery-for-ecommerce/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Detect AJAX Requests using the x-requested-with header and xmlhttprequest</title>
		<link>http://www.web-design-talk.co.uk/197/detect-ajax-requests-using-the-x-requested-with-header-and-xmlhttprequest/</link>
		<comments>http://www.web-design-talk.co.uk/197/detect-ajax-requests-using-the-x-requested-with-header-and-xmlhttprequest/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 15:32:47 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[XAMPP]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=197</guid>
		<description><![CDATA[This is a small snippet of code I came across today, it allows a script to display different content based on how it was requested. This method allows your scripts to remain in a single file, handing both AJAX and normal requests &#8211; it avoids ending up with lots of small PHP files in your [...]]]></description>
			<content:encoded><![CDATA[<p>This is a small snippet of code I came across today, it allows a script to display different content based on how it was requested. This method allows your scripts to remain in a single file, handing both AJAX and normal requests &#8211; it avoids ending up with lots of small PHP files in your AJAX folder, that deals with <strong>ajax requests</strong>.Another use would be a page that has 2 web forms, one AJAX and one normal. You could keep the code for this page in a single file. This method is also useful for security purposes, as it would ensure that requests to your AJAX scripts are via AJAX only. It also has uses for writing unobtrusive JavaScript &#8211; maybe ensuring that an AJAX enabled web form would work when javascript is disbaled.</p>
<p>For example, the below code would display different code depending on if the request for the page was made via AJAX or directly via a browser.</p>
<pre class="brush: php;">
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) &amp;&amp; strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    //This is an AJAX request, do AJAX specific stuff
}
else {
    //This is not an AJAX request E.g. display normal page content.
}
</pre>
<p>In some code I was working on today, I saw a neater way of achieving the above, this would be included in your common config file:</p>
<pre class="brush: php;">
define('IS_AJAX_REQUEST', isset($_SERVER['HTTP_X_REQUESTED_WITH']) &amp;&amp; strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');

if(IS_AJAX_REQUEST) {
    //This is an AJAX request, do AJAX specific stuff
}
else {
    //This is not an AJAX request E.g. display normal page content.
}
</pre>
<p>There&#8217;s an HTTP variable set called <strong>HTTP_X_REQUESTED_WITH</strong>, which will is set to &#8216;<strong>XMLHttpRequest</strong>&#8216; if the request method is via AJAX. This is method is untested with JavaScript frameworks other than JQuery, so may not work (but I don&#8217;t see any reason at all why it wouldn&#8217;t!).</p>
<p>It&#8217;s also worth noting that not all web servers include this variable and sometimes omit this specific $_SERVER paramter. Use vardump($_SERVER) to check that the <strong>HTTP_X_REQUESTED_WITH</strong> is present.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/197/detect-ajax-requests-using-the-x-requested-with-header-and-xmlhttprequest/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Displaying a Breadcrumb Navigation for Multiple Sub Categories via PHP</title>
		<link>http://www.web-design-talk.co.uk/188/displaying-a-breadcrumb-navigation-for-multiple-sub-categories-via-php-2/</link>
		<comments>http://www.web-design-talk.co.uk/188/displaying-a-breadcrumb-navigation-for-multiple-sub-categories-via-php-2/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 10:57:43 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[phpmyadmin]]></category>
		<category><![CDATA[multiple sub categories]]></category>
		<category><![CDATA[php categories]]></category>
		<category><![CDATA[recursive functions]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=188</guid>
		<description><![CDATA[While making an ecommerce store I ran into the issue of displaying a category breadcrumb. Usually this is easy as I always recommend keeping the numbers of categories and sub categories to a maximum of 1 level deep. E.g. Tshirts &#62; Red tshirts. For this store, due to the sheer number of products the owner [...]]]></description>
			<content:encoded><![CDATA[<p>While making an ecommerce store I ran into the issue of displaying a category breadcrumb. Usually this is easy as I always recommend keeping the numbers of categories and sub categories to a maximum of 1 level deep. E.g. Tshirts &gt; Red tshirts. For this store, due to the sheer number of products the owner wanted to add up to seven category levels. While there are many tutorials on this floating about, they all seem tocus on displaying the whole tree &#8211; very useful for a sitemap page, but not a breadcrumb navigation. While it would have been possible to hard code several if statements into the category listing page, this seemed a bit messey and would cause problems if an eighth level was added.</p>
<p>For the breadcrumb naviagtion I needed a function to displaying the path to a given category ID, sometimes refered to as a single branch or node. I was using a simple parent child database table structure:</p>
<p><a href="http://www.web-design-talk.co.uk/wp-content/uploads/2010/03/php-multiple-sub-categories.jpg"><img class="size-full wp-image-189 alignnone" style="border: 1px solid #cccccc;" title="php-multiple-sub-categories" src="http://www.web-design-talk.co.uk/wp-content/uploads/2010/03/php-multiple-sub-categories.jpg" alt="php multiple=" /></a></p>
<p>While the latter may seem fairly trival I really couldn&#8217;t get my head around the problem. After a bit of Googling, I found a function that was a good starting point so adapted it to fit my problem (the function is part of a categoru class):</p>
<pre class="brush: php;">
function getCategoryTreeIDs($catID) {
		$row = DB::getInstance()-&gt;query(&quot;SELECT parent FROM categories WHERE ID = '$catID'&quot;)-&gt;fetch();
		$path = array();
		if (!$row['parent'] == '') {
			$path[] = $row['parent'];
			$path = array_merge($this-&gt;getCategoryTreeIDs($row['parent']), $path);
		}
		return $path;
	}
</pre>
<p>The function simply returns an array of category IDs. E.g 20, 28. So from the array I&#8217;d know that the tree would go as Home &gt; Cat ID 20 &gt; Cat ID 28.</p>
<h2 style="font-size:12px;border:0;padding-left:0;">Displaying the Breadcrumb Navigation</h2>
<p>To display the actual breadcrumb I simply added the following method, that loops through the array of ID we just generated. The getNameLink method simply generates an SEO feindly website URL for the category, inside the &lt;a&gt; tag.</p>
<pre class="brush: php;">
function showCatBreadCrumb($catID) {

		$array = $this-&gt;getCategoryTreeIDs($catID);

		$numItems = count($array);
		for ($i = 0; $i&lt;=$numItems-1; $i++) {
			echo $this-&gt;getNameLink($array[$i]) . ' &amp;raquo; ';
		}
	}
</pre>
<p>The result is a nicely formatted breadcrumb (to use our tshiorts example again):</p>
<p>Home &amp;rquao; Clothes &amp;rquao; tshirts &amp;rquao;  Mens &amp;rquao; Red tshirts &amp;rquao; Offensive &amp;rquao;</p>
<h2 style="font-size:12px;border:0;padding-left:0;">A recursive function inside a loop, are you insane?</h2>
<p>Some of you may have noticed that the function used to generate the category IDs is called recursively. This generally considered bad practice, for large data sets due to performance issues. However, for the current use this isn&#8217;t an issue. I know for a fact that client won&#8217;t be adding categories more than several levels deep, so performance really isn&#8217;t an issue in my eyes here. Maybe if we had hundreds of categories, but for several it&#8217;s really a non issue in my opinion.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 185px; width: 1px; height: 1px; overflow: hidden;">
<pre>getCategoryTreeIDs</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/188/displaying-a-breadcrumb-navigation-for-multiple-sub-categories-via-php-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enhanced Visitor Event Tracking With Google Analytics and JQuery</title>
		<link>http://www.web-design-talk.co.uk/172/enhanced-visitor-event-tracking-with-google-analytics-and-jquery/</link>
		<comments>http://www.web-design-talk.co.uk/172/enhanced-visitor-event-tracking-with-google-analytics-and-jquery/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 19:59:44 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[google analytics]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=172</guid>
		<description><![CDATA[Google Analytics has fast become the industry standard to track a plethora of web based information about your website. Whilst being totally free and easy to setup, you are limited to tracking elements that physically render in the browser &#8211; so items such as PDF, ZIP and RSS feeds links are not tracked, this because [...]]]></description>
			<content:encoded><![CDATA[<p>Google Analytics has fast become the industry standard to track a plethora of web based information about your website. Whilst being totally free and easy to setup, you are limited to tracking elements that physically render in the browser &#8211; so items such as PDF, ZIP and RSS feeds links are not tracked, this because Google Analytics has a great reliance upon JavaScript. However, tracking such links can be achieved with a small amount of extra work.</p>
<p>Personally, I wasn&#8217;t aware you could track specific links with Analytics and only ever considored this when a client asked &#8216;why doesn&#8217;t Google show me the numbers of times my marketing report (<em>read: a PDF file</em>) has been clicked?&#8217; &#8211; a totally valid request that I wanted to investigate.</p>
<h3 style="font-size:12px;">Use JQuery to improve Google Analytics and track downloads, RSS, Email &amp; external links</h3>
<p>First things first, make sure you have a google Analytics account, the latest version of JQuery and the latest version of the analytics code running on your website <img src='http://www.web-design-talk.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>As with the majority of the JQuery magic, everything happens within the doc ready event listener &#8211; this will used to capture various clicks to select elements.</p>
<p><strong>Tracking Download Link Clicks (PDF, ZIPs etc.)</strong></p>
<pre class="brush: jscript;">
$(document).ready(function() {

	$(&quot;a[rel=download]&quot;).click( function() {
		var fileName = $(this).attr(&quot;href&quot;);
		pageTracker._trackPageview(fileName);
		return true;
	});

});
</pre>
<p>Then on every link you wish to track, simply add the rel attribute to your non HTML files as follows:</p>
<pre class="brush: xml;">
&lt;a href=&quot;myData.zip&quot; rel=&quot;download&quot;&gt;Download My ZIP Data File&lt;/a&gt;
</pre>
<p><strong>Tracking Downloads of Specifc File Types (E.g. PDF files)</strong></p>
<p>Using the dollar sign to match against links that end in .pdf (or any extension you wish to track).</p>
<pre class="brush: jscript;">
$(document).ready(function() {

	$(&quot;a[href$=pdf]&quot;).click( function() {
		var myPDF = &quot;/pdfDownloads/&quot; . $(this).attr(&quot;href&quot;);
		pageTracker._trackPageview(myPDF);
		return true;
	});

});
</pre>
<p>The /pdfDownloads/ is used to identify and seperate report data within Google Analytics.</p>
<p><strong>Tracking the click of a specific link such as an RSS feed</strong></p>
<p>Simply add an identifier to your RSS feed link (in this example the link was given an id of &#8216;rssFeed&#8217;): </p>
<pre class="brush: jscript;">
$(document).ready(function() {

	$(&quot;a#rssFeed&quot;).click( function() {
		pageTracker._trackEvent(&quot;RSS&quot;, &quot;RSS Subscriber Link Clicked&quot;);
		return true;
	});

});
</pre>
<p><strong>Tracking mailto: Link Clicks</strong></p>
<pre class="brush: jscript;">
$(document).ready(function() {

	$(&quot;a[href^=mailto:]&quot;).click( function() {
		pageTracker._trackEvent(&quot;Mail&quot;, &quot;User clicked on mailto link&quot;);
		return true;
	});

});
</pre>
<p><strong>Tidying up&#8230;.</strong></p>
<p>You should also disable the clicked element to prevent multiple event recording and provide feedback. To do this, simple add the following at the start of each piece of code &#8211; disbabling the element and changing the cursor to an egg timer (although you could display a small graphic to make things look prettier): </p>
<pre class="brush: jscript;">
$(this).css(&quot;cursor&quot;, &quot;wait&quot;);
$(this).attr(&quot;disabled&quot;, true);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/172/enhanced-visitor-event-tracking-with-google-analytics-and-jquery/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Prevent Duplicate Content using the Canonical Url Tag</title>
		<link>http://www.web-design-talk.co.uk/164/prevent-duplicate-content-using-the-canonical-url-tag/</link>
		<comments>http://www.web-design-talk.co.uk/164/prevent-duplicate-content-using-the-canonical-url-tag/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 14:34:39 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=164</guid>
		<description><![CDATA[I was recently doing an seo audit of a small ecommerce website. One of the first things I did was to do a &#8216;site:www.domain.com&#8217; in Google. Amazingly, the site in question has approximately 8200 pages indexed in Google. This was quite surprising when the store only sold less than 1500 unique products. The site used [...]]]></description>
			<content:encoded><![CDATA[<p>I was recently doing an seo audit of a small ecommerce website. One of the first things I did was to do a &#8216;site:www.domain.com&#8217; in Google. Amazingly, the site in question has approximately 8200 pages indexed in Google. This was quite surprising when the store only sold less than 1500 unique products. The site used a horrible ecommerce module bolted onto phpnuke and has a horrible url structure, appending lots on unecessary querystring data onto the url.</p>
<p>Whilst looking through the Google results for this site the majority of pages were as follows:</p>
<pre class="brush: xml;">
/index.php?tab=123&amp;txtSearch=ALL&amp;List=oasc&amp;Sort=PName%2CPName&amp;CreatedUserID=1&amp;pageindex=40&amp;Language=en-GB
</pre>
<p>The site has an advanced search page, whereby you can sort products using a variety of options such as ascending order, descending order, size, price etc. This is bad for a number reasons, but mainly due to duplicate content (not to mention lower serps ranking, traffic loss and decreased page relevancy) . A page of results in ascending and descending order is essentially the same page, simply a different view of your data &#8211; you can help search engines via using the relatively new <strong>canonical url link tag. </strong></p>
<p>To illustrate I&#8217;ll use an example of a typical category page, whereby you can sort a list of products in ascending and descending order, leaving you with a number of urls as follows:</p>
<pre class="brush: xml;">

http://www.shop.com/category.php?catName=Shirts&amp;sortOrder=ASC
</pre>
<p>In this example the part of the querystring creating the duplicate content would be the sortOrder parameter &#8211; as you would want your seperate categories indexed.</p>
<p>The solution is quite simple. In your head tag add the following:</p>
<pre class="brush: xml;">
&lt;link rel=&quot;canonical&quot; href=&quot;http://www.shop.com/category.php?catName=Shirts&quot; /&gt;
</pre>
<p>By adding this to your category page you are telling search engines (currently Google, Yahoo, Ask and Bing use this tag) that this page is a copy of http://www.shop.com/category.php?catName=Shirts. Indicators such as Google Pagerank are also transferred to your preferred url.</p>
<p>The <strong>canonical url tag</strong> has many uses and can be used to help with the following issues:</p>
<ul>
<li>Pages that contain session IDs appended to the querystring</li>
<li>Search results pages that append search data to the querystring</li>
<li>Print versions of page</li>
<li>Duplicate content for www. and non-www. pages 0 in your canonical tag you would include your preferred url</li>
<li>Same content contained in multiple categories &#8211; E.g. a product contained in multiple categories on an online store</li>
<li>Removing affiliate ids in the url</li>
<li>Preventing multiple pages of a discussion topic with comments from being indexed E.g. shop.com/post.php?id=123&amp;page=1</li>
</ul>
<p>You can read more about the canonical tag at the official <a title="Specify Your Canonical" href="http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html" target="_blank">Google Webmaster Blog.</a> <a title="Canonical Link Tag" href="http://www.mattcutts.com/blog/canonical-link-tag/" target="_blank">Matt Cutt&#8217;s also has a 20 minute video</a> explaing the canonical tag in more depth.</p>
<p>The main point to consider is that the canonical tag is simply a hint and not a directive. It is another method to give search engines help in indexing your content. This is very useful when working on existing sites already indexed by Google. However, on new sites bit more planning can help. For instance, in a  previous article I covered <a title="301 redirects for seo using htaccess" href="http://www.web-design-talk.co.uk/20/301-redirects-for-seo-using-htaccess/" target="_blank">301 redirects for seo using htaccess</a> &#8211; how to set a prefferred version of your site via htaccess. On an ecommerce store you could avoid appending search data to the querystring.</p>
<p>EDIT: wordpress and all in one seo plugin generate canonical link tags for blog posts. For example, comments are seperated into multiple pages E.g</p>
<pre class="brush: xml;">

http://www.web-design-talk.co.uk/157/how-to-deal-with-difficult-clients-using-split-testing/comment-page-1/#comment-344
</pre>
<p>With the actual content being at:</p>
<pre class="brush: xml;">

http://www.web-design-talk.co.uk/157/how-to-deal-with-difficult-clients-using-split-testing
</pre>
<p>If you have a quick look at the source code to the comments page you&#8217;ll see the following has been added:</p>
<pre class="brush: xml;">
&lt;pre id=&quot;line34&quot;&gt;&lt;link rel=&quot;canonical&quot; href=&quot;http://www.web-design-talk.co.uk/157/how-to-deal-with-difficult-clients-using-split-testing/&quot; /&gt;
</pre>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/164/prevent-duplicate-content-using-the-canonical-url-tag/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to Deal With Difficult Clients Using Split Testing</title>
		<link>http://www.web-design-talk.co.uk/157/how-to-deal-with-difficult-clients-using-split-testing/</link>
		<comments>http://www.web-design-talk.co.uk/157/how-to-deal-with-difficult-clients-using-split-testing/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 20:23:28 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[google analytics]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=157</guid>
		<description><![CDATA[Dealing with awkward clients using split testing]]></description>
			<content:encoded><![CDATA[<p>Sometimes you can be in the process of trying to tell a client that their idea simply won&#8217;t work. Be it a flimsey campaign idea of extra design element that you know through experience will not work and produce the desired KPIs for a client project. You can even show the client links, articles and examples of why their idea will fail to deliver results. However, if this is potential or existing client they are likely to go elsewhere, to a company willing to follow their every word without consideration &#8211; I have come across web companies who will do this.</p>
<p>Recently an existing client came to me asking why his site isn&#8217;t showing up when people search for a particular long tail search term. Now, his existing site used a pretty awful content management system that didn&#8217;t even allow him to set his own pages titles or meta descriptions. Furthermore, he was lacking inbound links, which people ranked above him did have. This all sounds simple and straightforward but even after I had explained (in quite clear and non technical langauge may I add) the merits of good SEO and one page content the client simply wouldn&#8217;t accept this as a solution. He had his own short term and less costly solutions &#8211; basically revolving around the the idea me resubmitting his sitemap page to all the major search engines each day. I&#8217;m not debating that submitting a sitemap isn&#8217;t a good idea, because it is. However, the client&#8217;s main KPI for this project was increased site enquiries.</p>
<p>After much discussing this we had both come to a bit of an awkward silence &#8211; not a good thing if you&#8217;ve ever experinced this in client meetings. For some reason I remebered back to my unoversity days where I had read something about <a title="Split Testing " href="http://en.wikipedia.org/wiki/A/B_testing" target="_blank">split testing (or A/B testing)</a> &#8211; where you can turn a negative situation into a positive one.This is quite a delicate situation to be in as it can damage your client relationship quite quickly.</p>
<p>The idea was to use the client&#8217;s idea for a period of time and my idea for a period of time. At the start of this I would install Google Analytics (I was tempted to use Google&#8217;s website optimizer, but decided against it) and let the statisitics do the talking &#8211; as a no one can argue with statistics.</p>
<p>This method has been very useful previously when demonstrating the merits of creating a dedicated landing page for Google Adword campaigns, but can be used anywhere if you&#8217;re willing to a little bit extra.</p>
<p>This method is beneficial for the following reasons:</p>
<ul>
<li>The client&#8217;s idea are being dismissed as wrong (however right you think you are)</li>
<li>You are showing the client that you care enough to demonstrate your ideas</li>
<li>Occassionaly the client will back down as soon as you explain your plan of attack</li>
<li>It prevents those awful awkward silences</li>
<li>You have a real world example to use in your other client meetings</li>
<li>You are speaking the clients language in that you are demonstrating how your actions lead to increased conversions</li>
<li>You are being direct, which I personally think is alwasy a good thing &#8211; as such statistics are often a huge eye opener for clients</li>
<li>If and when the client comes to the same conslusion as you, they won&#8217;t blame you</li>
</ul>
<p>There is always the arguement that the client is the client and that it&#8217;s all business at the end of the day. However, I personally pride myself on doing things properly. Others will say just get on with, do what the client wants and forget about it &#8211; you can only offer your opinion. This is a good point but can still damage your client relationships when they return later on and you need to charge them again. It all depends if you require long or short term client relationships &#8211; as they are definately an investment.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/157/how-to-deal-with-difficult-clients-using-split-testing/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Improve SEO Through Home Menu Anchor Text Optimisation</title>
		<link>http://www.web-design-talk.co.uk/145/improve-seo-through-home-menu-anchor-text-optimisation/</link>
		<comments>http://www.web-design-talk.co.uk/145/improve-seo-through-home-menu-anchor-text-optimisation/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 22:16:55 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=145</guid>
		<description><![CDATA[It&#8217;s a widely known fact that link anchor text is rated YH2Z675VXTC5 highly by search engines and is often the deciding factor in your SERP position for competitive terms, mainly because it gives meaningful information to users (amongst others). Correct use of anchor text (on both inbound and outbound links) will give your page increased [...]]]></description>
			<content:encoded><![CDATA[<p><a title="SEO home menu anchor text" href="http://www.web-design-talk.co.uk/145/seo-home-menu-anchor-text/" target="_blank"><img class="alignright size-full wp-image-147" style="border: 0pt none;" title="seo menu anchor text home link" src="http://www.web-design-talk.co.uk/wp-content/uploads/2009/11/seo-anchor-text1.jpg" alt="seo-anchor-text" width="139" height="143" /></a>It&#8217;s a widely known fact that <a href="http://www.tamingthebeast.net/articles3/anchor-text-optimization.htm" target="_blank">link anchor text</a> is rated <span><strong>YH2Z675VXTC5 </strong></span>highly by search engines and is often the deciding factor in your SERP position for competitive terms, mainly because it gives meaningful information to users (amongst others). Correct use of anchor text (on both inbound and outbound links) will give your page increased meaning.</p>
<p>I&#8217;m sure you use this fact throughout your website while performing onsite SEO. Any tutorial will rightly tell you that keyword relevancy is of upmost importance here. However, a lot of the time you end up with a &#8216;Home&#8217; link on your menu, linking to your main page.</p>
<p>This is bad for SEO for a number reasons. Firstly, the anchor text &#8216;home&#8217; is very poor choice of word to use as it&#8217;s meaning is highly diluted nowadays. Now unless you have a site relating to homes, the keyword isn&#8217;t very useful at all, as we don&#8217;t want to rank highly for the term &#8216;home&#8217;. However, at the same time users are familiar with such a link and it makes sense to name such a link to your main page. The situation is worsened if your site is large with a great number of internal links. Imagine having a 100 page site, all with the anchor text &#8216;home&#8217; &#8211; this is a lot of inbound links telling search engines each page is related to &#8216;home&#8217;! Furthermore, the menu link&#8217;s are usually towards to the top of the page, giving them inscreased relevancy to search engines.</p>
<p>The solution is a compromise, use &#8216;home&#8217; along with you main keyword(s) &#8211; making sure to avoid obvious stop words like &#8216;and&#8217;. For example &#8216;Graphic Design Home&#8217;. Even better use your main keyword directly in the anchor text i.e. &#8216;Graphic Design&#8217;. This is quite a powerful and simple SEO trick that is easy to implement into your site.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/145/improve-seo-through-home-menu-anchor-text-optimisation/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Process Custom eCommerce data using Paypal IPN</title>
		<link>http://www.web-design-talk.co.uk/141/process-custom-ecommerce-data-using-paypal-ipn/</link>
		<comments>http://www.web-design-talk.co.uk/141/process-custom-ecommerce-data-using-paypal-ipn/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 21:52:08 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Paypal]]></category>

		<guid isPermaLink="false">http://www.web-design-talk.co.uk/?p=141</guid>
		<description><![CDATA[More often than not it&#8217;s hard to visualise how you can send custom information to Paypal during checkout. The list of available hidden field variables initially seems very specific and restrictive at best. Granted, you can easily send over simple things such as your shipping amountm and tax rate. However, during order processing (done in [...]]]></description>
			<content:encoded><![CDATA[<p>More often than not it&#8217;s hard to visualise how you can send custom information to <a href="http://www.paypal.com/" target="_blank">Paypal</a> during checkout. The list of available <a title="IPN variable list" href="https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&amp;content_ID=developer/e_howto_html_Appx_websitestandard_htmlvariables" target="_blank">hidden field variables</a> initially seems very specific and restrictive at best. Granted, you can easily send over simple things such as your shipping amountm and tax rate. However, during order processing (done in you IPN script that Paypal sends the transaction&#8217;s IPN post data to) you often want to record more information when creating and storingn order information.</p>
<p>For example, let&#8217;s say the user can enter a specific coupon code during checkout. You would want to make sure the Paypal transaction has been successful before making the voucher as used, to do this you would need to know what code was entered during checkout. In the following simple example we&#8217;ll use the &#8216;custom&#8217; field variable  &#8211; this is an optional field, whereby the the data is never presented to the shopper and can be 256 character long. Whatever is placed in this field before clicking your checkout button will be invisibly sent ot Paypal and posted back to your IPN script (assuming you have youre &#8216;rm&#8217; or return method set to 2, or &#8216;POST&#8217;). The HTML for the hidden field is very simple:</p>
<pre class="brush: xml;">
&lt;input type=&quot;hidden&quot; name=&quot;custom&quot; value=&quot;YOUR CUSTOM INFORMATION HERE&quot;&gt;
</pre>
<p>Now, let&#8217;s say when you&#8217;re recording all the order information you weant to record the exact coupon code, delivery method id, the method by which the customer found your site (E.g. another id) and referrer id number. For convenience and for the sake of the example, I&#8217;ll assume you&#8217;ve done all the necessary processing to get your four pieces of information. The code to create our hidden field data is as follows:</p>
<pre class="brush: php;">
/* ...logic to get below variables here! */

$shipping_method_id = '33';
$coupon_code = '45895';
$found_out_method = '9';
$referrer_id = '200';

$custom_info =
                       array(
			'shipping_method_id' =&gt; 33,
			'coupon_code'=&gt; 45895 ,
			'found_out_method' =&gt; 20 ,
			'referrer_id' =&gt; 9
			);

/* Initiase field data and looping variable */
$field_data = NULL;
$i = 0;

/* Loop through info array to build data string */
foreach ($custom_info as $key =&gt; $field) {

	$field_data .= $field;
	$i++;

	if ( $i !== count($custom_info)) {
	      $field_data .= '-';
	}

}

/* create the hidden field
generated HTML is &lt;input type=&quot;hidden&quot; name=&quot;custom&quot; value=&quot;33-45895-20-9&quot;&gt; */
echo '&lt;input type=&quot;hidden&quot; name=&quot;custom&quot; value=&quot;'.$field_data.'&quot;&gt;' . &quot;\n&quot;;
</pre>
<p>Printing the value of $field data will give you the string &#8217;33-45895-20-9&#8242;. This translates to shipping method id 33, coupon code 45895, found out id 20 and referrer id 9. The dash symbol has been used to delimit values for convenience, as we need to split this string up later on.</p>
<p>To process these variables in your IPN script (see the <a href="https://cms.paypal.com/cms_content/US/en_US/files/developer/IPN_PHP_41.txt" target="_blank">Paypal PHP sample script</a>) you simply use PHP&#8217;s explode method to split the data into an array: </p>
<pre class="brush: php;">
/* $_POST['custom'] contains the custom information we initially sent to Paypal */
$data = explode('-',$_POST['custom']);

/* Convert $data array into variables for further processing */
$shipping_method_id = $data[0];
$coupon_code = $data[1];
$found_out_method = $data[2];
$referrer_id = $data[3];
</pre>
<p>So you&#8217;ve now posted a string of custom information to Paypal and got this custom data back via IPN during the transaction processing. Now you have assigned each piece iof the array to a variable, you can easily continue to create your order header and save it to a database. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.web-design-talk.co.uk/141/process-custom-ecommerce-data-using-paypal-ipn/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
