<?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>Gabriel Crowe &#187; Gabriel Crowe</title>
	<atom:link href="http://www.gabrielcrowe.co.uk/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gabrielcrowe.co.uk</link>
	<description>Web Designer, Ecommerce, Wordpress and Design for Print In Bishop Auckland</description>
	<lastBuildDate>Thu, 27 Oct 2011 12:05:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Sync Linnworks With Actinic (Work In Progress)</title>
		<link>http://www.gabrielcrowe.co.uk/2011/10/11/sync-linnworks-with-actinic-work-in-progress/</link>
		<comments>http://www.gabrielcrowe.co.uk/2011/10/11/sync-linnworks-with-actinic-work-in-progress/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 19:38:20 +0000</pubDate>
		<dc:creator>Gabriel Crowe</dc:creator>
				<category><![CDATA[Ecommerce]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.gabrielcrowe.co.uk/?p=292</guid>
		<description><![CDATA[Overview In the run up to Christmas one of my clients (Skate Asylum for those interested) is going to get a lot of orders. Every year it gets more and more and this year writing out address labels by hand is not going to cut it. What we wanted was a solution that involves less [...]]]></description>
			<content:encoded><![CDATA[<h2>Overview</h2>
<p>In the run up to Christmas one of my clients (Skate Asylum for those interested) is going to get a lot of orders. Every year it gets more and more and this year writing out address labels by hand is not going to cut it. What we wanted was a solution that involves less key depressions for the staff, and less pen to paper.</p>
<p><a  href="http://www.linnworks.com/">http://www.linnworks.com/</a> - <a  title="LINNWORKS Twitter Feed" href="http://twitter.com/#!/linnworks" target="_blank">@LINNWORKS</a></p>
<p>We found Linnworks after trying a few other solutions. The deal breaker was in fact its smooth integration with ParcelForce, something the online tutorial videos showed clearly and looked very slick. Surprisingly (and this does not happen very often) after setting up the login details with the <a  href="http://www.parcelforce.com/" target="_blank">Parcelforce</a> API over the phone, it worked exactly as they showed. We were happy. I set about integrating their Amazon account. This also worked as advertised. I integrated 2 <a  href="http://www.interspire.com/shoppingcart/" target="_blank">Interspire websites</a>. They all imported the orders for processing.</p>
<p>Of the 2 Interspire sites that are integrated, only 1 is active. The other one is in development. This unfinished site has been set up to work when we activate it, but does not yet receive orders. This is because we&#8217;re waiting until after christmas. Nobody wants to activate a new site only for problems to arise in the middle of your busiest period. Patience is the key for them. It&#8217;ll pay off to wait and see how the market goes before they crack open a fresh solution.</p>
<p>In the meantime the reliable shop they are waiting on is <a  href="http://www.actinic.co.uk/" target="_blank">Actinic</a>. During the christmas period it&#8217;ll recieve hundreds of orders every day, and processing them will be a struggle. We need that data into Linnworks so we can process it super quick and log parcels into the courier in a snap. For this solution we aren&#8217;t tracking stock. We only want the line items and the address for delivery in there so we can print labels. We&#8217;re not counting stock, and we&#8217;re not bothered about certain values like weight and tax and all that jazz. This is good, it means we can take a shortcut or two.</p>
<p>So, what do we need and what do I have?</p>
<p>We need an XML feed. Linnworks reads XML from a webservice you install on your own server to get new orders. It looks like this:</p>
<p>Shop MySQL Database -&gt; PHP/Webserver -&gt; XML -&gt; Linnworks</p>
<p>The problem is that Actinic Catalog runs from an Access database. We need to create that XML and it has to be a particular way too. The Linnworks sync manager expects specific values and it complains loudly if you dont feed it the right things.</p>
<p>Luckily a few years ago I created something that will help here. <a  href="http://code.google.com/p/actinet/" target="_blank">Actinet Intranet </a>is essentially an install of Apache Webserver on the same computer as the Actinic Catalog that creates an Intranet so a shop owner and their staff can view order data. Its free now, so&#8230; aren&#8217;t you lucky? If you run Actinic you can give it a go for free. Its yours to install. If you want to connect Linnworks up later on then you&#8217;ll need Actinet. Go and install it now. I&#8217;ll wait for you right Here.</p>
<p>&#8212;</p>
<p>Back so soon? Well as you can see it run in php (look at the address bar). What Actinet is doing is connecting to the Actinic Catalog local database. Thats right&#8230; you guessed it. We are actually going to do this:</p>
<p>Shop Access Database -&gt; PHP/Webserver -&gt; XML -&gt; Linnworks</p>
<p>Linnworks themselves provide you with some PHP to connect to any generic MySQL Database with the app. The easy part was re-tooling this to work with The access database that actinic uses. I spent half day reading this document about <a  href="http://php.net/manual/en/book.uodbc.php" target="_blank">ODBC in PHP</a>. After 6 hours of clean room design, my new XML service was ready. I put it in the the root of my Actinic Intranet, fed it the database details and voila! I get XML. I breathe easy. Celebratory cups of coffee and biscuits.</p>
<p>One in the bank.</p>
<p>The next part is writing the query SQL. In Linnworks you integrate by pointing the software to the location on the internet of your XML connector, and then provide the linnworks app with some SQL to run against the connector to pull things like the recent open orders and what products are in that order. There is also SQL to sync back up to the shop the status of an order and set it as &#8216;shipped&#8217; and more SQL to set the stock levels and things like that.</p>
<p>So far&#8230; I&#8217;ve written the part that gets the orders and the part that gets the line items. No code yet for syncing the stock, and none for telling the shop things are shipped / completed. Thats for another article.</p>
<p>Catch you next time: Sync stock and mark as shipped.</p>
<p><span id="more-292"></span><em><strong> </strong></em></p>
<p><em><strong>Edit Wed 12th Oct 2011:</strong></em></p>
<p><em>My solution was only a days blast at the problem and i&#8217;m sure that it can be much better but&#8230;</em></p>
<div><em>It pulls in the orders for processing in Linnworks, there are some financial details missing, like tax.</em></div>
<div><em>Weight is missing. this affects shipping rules in Linnworks. </em><em>Product variations information like &#8216;size&#8217; and &#8216;colour&#8217; are missing and i fear that it may be impossible to get them in due to the way actinic builds its products. </em><em>Linnworks can never &#8216;complete&#8217; an order like Actinic does. What I did get working was when you &#8216;Process&#8217; an order in Linnworks, I change the highlight colour in Actinic. The colour can be configured. This is so that an </em><em>Actinic user can quickly ctrl + click the offending highlighted items and *actually* complete them. </em><em>Stock sync? I havent even looked at it. Yesterday my primary concern was getting the addresses and order numbers into the system so that they could be printed as labels and sent to the parcelforce API correctly. </em><em>Full integration is a little way off yet. Some of it may not be even possible.</em></div>
<div><em>I&#8217;ll keep you posted.</em></div>
<div><em><strong>Edit Tur 25th Oct 2011:</strong></em></div>
<div><em>I have a version of my script available to download here, complete with instructions.</em></div>
<div>RELEASE ALPHA 1</div>
<div>===================================</div>
<div>Download here:<br />
<a  href="http://www.gabrielcrowe.co.uk/uploads/linnworks-actinic-connector.zip" target="_blank">http://www.gabrielcrowe.co.uk/upload&#8230;-connector.zip</a><br />
(Install instructions included in zip)&nbsp;</p>
<p>If you get it working and feel compelled to donate to further development then paypal me a beer:<br />
<a  href="mailto:paypal@angrydinosaur.co.uk">paypal@angrydinosaur.co.uk</a> <img title="wink" src="http://community.actinic.com/images/smilies/wink.gif" border="0" alt="" /></p>
<p>BACK UP YOUR SHOP BACK UP YOUR SHOP BACK UP YOUR SHOP BACK UP YOUR SHOP BACK UP YOUR SHOP BACK UP YOUR SHOP BACK UP YOUR SHOP BACK UP YOUR SHOP BACK UP YOUR SHOP BACK UP YOUR SHOP BACK UP YOUR SHOP.</p>
<p>Got it? Good.</p>
<p><strong>Linking Linnworks to Actinic to fetch orders.</strong></p>
<p>This document explains how to get data out of Actinic Catalog and into Linnworks for processing. Due to limitations in the sync, the data is really only useful for postal processing (label automation) and invoice printing (Linnworks supports easily editable custom templates.)</p>
<p>It DOES:<br />
- Sync orders and associated line items<br />
- Sync delivery and shipping addresses separately<br />
- Highlight orders in Actinic Catalog when you &#8216;complete&#8217; them in Linnworks *<br />
- Get the email address so you can email from Linnworks<br />
- Sync &#8216;Order Notes&#8217; or special delivery instructions.<br />
- Sync only &#8216;Full Payment Received&#8217; AND &#8216;Pre-authorized (PSP)&#8217; orders<br />
- Sync only &#8216;New&#8217; orders **.</p>
<p>It DOES NOT:<br />
- Complete orders in Actinic catalog<br />
- Sync ANY stock back to Actinic Catalog<br />
- Sync Deleted Orders<br />
- Care what payment provider you use<br />
- Sync payment &#8216;Pending&#8217;<br />
- Work for delivery addresses outside the UK ***</p>
<p>NOTES:</p>
<p>* Linnworks cannot complete orders in the traditional sense because Actinic does a lot more than simply set a status. Linnworks sends a single SQL query to Actinic and this query isn&#8217;t nearly advanced enough. My workaround was to simply highlight the row in Actinic for manual processing using a real human being. Actinic lets you complete in batches so I don&#8217;t see this as a big hurdle.</p>
<p>** Because of the behaviour or syncing only pending orders, the moment you &#8216;complete&#8217; an order in Actinic Catalog, it will not sync. You should sync BEFORE you fiddle with your orders in Actinic.</p>
<p>*** To get this working as soon as possible I assume that all countries are in the UK. this will be fixed in a later version.</p>
</div>
<div></div>
<div>&#8212;&#8212;&#8212;-</div>
<div></div>
<div>HOTFIX: Due to a pathetic schoolboy error on my part, the time was not correctly passed to Linnworks, meaning all orders look like they happened at midnight.</p>
<p>On line 170 of the connector look for this line:</p>
<div>
<div>Code:</div>
<pre dir="ltr">$thisvalue = $thisyear.'-'.$thismonth.'-'.$thisday;</pre>
</div>
<p>and make it say this:</p>
<div>
<div>Code:</div>
<pre dir="ltr">$thisvalue = $thisyear.'-'.$thismonth.'-'.$thisday.' '.$thisdatearr[1];</pre>
</div>
<p>Now the correct times will be passed on your next sync.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielcrowe.co.uk/2011/10/11/sync-linnworks-with-actinic-work-in-progress/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Untitled</title>
		<link>http://www.gabrielcrowe.co.uk/2011/04/19/untitled/</link>
		<comments>http://www.gabrielcrowe.co.uk/2011/04/19/untitled/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 21:46:18 +0000</pubDate>
		<dc:creator>Gabriel Crowe</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://www.gabrielcrowe.co.uk/2011/04/19/untitled/</guid>
		<description><![CDATA[So, something interesting here. A piece of music I wrote a few years ago that sells quite a few copies, overlaid over a video from somewhere in Ibiza. Looks good huh?]]></description>
			<content:encoded><![CDATA[<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/rUKIS94c8Ss?fs=1&#038;hl=en_US&#038;border=0&#038;rel=0"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/rUKIS94c8Ss?fs=1&#038;hl=en_US&#038;border=0&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></object></p>
<p><strong class="strong rangy_1">So, something interesting here. A piece of music I wrote a few years ago that sells quite a few copies, overlaid over a video from somewhere in Ibiza. Looks good huh?</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielcrowe.co.uk/2011/04/19/untitled/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The simplest php login script.</title>
		<link>http://www.gabrielcrowe.co.uk/2011/03/27/the-simplest-php-login-script/</link>
		<comments>http://www.gabrielcrowe.co.uk/2011/03/27/the-simplest-php-login-script/#comments</comments>
		<pubDate>Sun, 27 Mar 2011 15:17:39 +0000</pubDate>
		<dc:creator>Gabriel Crowe</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.gabrielcrowe.co.uk/?p=284</guid>
		<description><![CDATA[If you are making simple projects with custom code for clients in php then you may want to password protect that page from unwanted access. Please be aware that this isn&#8217;t super secure but its enough to stop the mainstay of data predators. 1 file, paste in your code in the area provided and set [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>If you are making simple projects with custom code for clients in php then you may want to password protect that page from unwanted access. Please be aware that this isn&#8217;t super secure but its enough to stop the mainstay of data predators.</p>
<p>1 file, paste in your code in the area provided and set the password in the variables provided. Simples.</p></blockquote>
<p>&lt;?php</p>
<p>$username = &quot;admin&quot;;<br />
$password = &quot;password&quot;;</p>
<p>//get a session<br />
session_start();<br />
//login<br />
$login=false;<br />
if ($_POST[&#39;txtUsername&#39;] != $username || $_POST[&#39;txtPassword&#39;] != $password)<br />
{<br />
	$login=false; //unset($_SESSION[&#39;username&#39;]);<br />
} else {<br />
	$login=true; $_SESSION[&#39;username&#39;]=$username;<br />
}<br />
//log out<br />
if (isset($_GET[&#39;logout&#39;])) { unset($_SESSION[&#39;username&#39;]); $login=false;}<br />
//stay logged in<br />
if (isset($_SESSION[&#39;username&#39;])){ $login=true; }</p>
<p>?&gt;<br />
&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;<br />
&lt;html&gt;<br />
	&lt;head&gt;<br />
		&lt;title&gt;Very Simple Secure Page&lt;/title&gt;<br />
	&lt;/head&gt;</p>
<p>	&lt;body&gt;</p>
<p>	&lt;?php<br />
	if ($login==true) {<br />
	?&gt;<br />
	&lt;a href=&quot;?logout=true&quot;&gt;Log-out&lt;/a&gt;<br />
	&lt;?php<br />
	}<br />
	?&gt;	</p>
<p>&lt;?php<br />
if ($login==false) {<br />
?&gt;<br />
&lt;h2&gt;Login&lt;/h2&gt; </p>
<p>&lt;form name=&quot;form&quot; method=&quot;post&quot; action=&quot;&lt;?php echo $_SERVER[&#39;PHP_SELF&#39;]; ?&gt;&quot;&gt;<br />
    &lt;p&gt;&lt;label for=&quot;txtUsername&quot;&gt;Username:&lt;/label&gt;<br />
    &lt;br /&gt;&lt;input type=&quot;text&quot; title=&quot;Enter your Username&quot; name=&quot;txtUsername&quot; /&gt;&lt;/p&gt; </p>
<p>    &lt;p&gt;&lt;label for=&quot;txtpassword&quot;&gt;Password:&lt;/label&gt;<br />
    &lt;br /&gt;&lt;input type=&quot;password&quot; title=&quot;Enter your password&quot; name=&quot;txtPassword&quot; /&gt;&lt;/p&gt; </p>
<p>    &lt;p&gt;&lt;input type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;Login&quot; /&gt;&lt;/p&gt; </p>
<p>&lt;/form&gt; </p>
<p>&lt;?php </p>
<p>}<br />
else { </p>
<p>?&gt; 	</p>
<p>&lt;!&#8211; ###### THIS IS WHERE YOUR PROTECTED CONTENT GOES ##### &#8211;&gt;<br />
&lt;h1&gt;This is protected&lt;/h1&gt;<br />
&lt;p&gt;Edit this file to change the password&lt;/p&gt;</p>
<p>&lt;?php<br />
}<br />
?&gt;<br />
	&lt;/body&gt;<br />
&lt;/html&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielcrowe.co.uk/2011/03/27/the-simplest-php-login-script/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iPad 2 and blogging</title>
		<link>http://www.gabrielcrowe.co.uk/2011/03/26/ipad-2-and-blogging/</link>
		<comments>http://www.gabrielcrowe.co.uk/2011/03/26/ipad-2-and-blogging/#comments</comments>
		<pubDate>Sat, 26 Mar 2011 13:26:51 +0000</pubDate>
		<dc:creator>Gabriel Crowe</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[first post]]></category>
		<category><![CDATA[iPad 2]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.gabrielcrowe.co.uk/2011/03/26/ipad-2-and-blogging/</guid>
		<description><![CDATA[The wordpress app for iPad 2 is working just fine as you can all see. Oe thing which may help pele is that you&#8217;ll need to use a recent version of the wordpress software. I installed 3.1 after the version I had refused to authenticate with the latest version of the iOS app from the [...]]]></description>
			<content:encoded><![CDATA[<p>The wordpress app for iPad 2 is working just fine as you can all see. Oe thing which may help pele is that you&#8217;ll need to use a recent version of the wordpress software. I installed 3.1 after the version I had refused to authenticate with the latest version of the iOS app from the apple app store.</p>
<p>I&#8217;ve never really played on an iPad until yesterday when I picked this one up. What a handy gadget. I already added my RSS and my favourite websites and I can see my MacBook getting a lot less love. I can see dead space and pants versus zombies getting a lot more love.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielcrowe.co.uk/2011/03/26/ipad-2-and-blogging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Embed a #youtube video in #prestashop</title>
		<link>http://www.gabrielcrowe.co.uk/2011/03/17/embed-a-youtube-video-in-prestashop/</link>
		<comments>http://www.gabrielcrowe.co.uk/2011/03/17/embed-a-youtube-video-in-prestashop/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 10:13:40 +0000</pubDate>
		<dc:creator>Gabriel Crowe</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.gabrielcrowe.co.uk/?p=273</guid>
		<description><![CDATA[Here is a cheeky hack that lets you embed a single youtube vid in your prestashop products. No plugins or hacks are necessary. Just find your product.tpl (located in your current template folder), find where you&#8217;d like the video (I like just after the description works well) and paste this code: {if $product-&#62;supplier_reference} &#60;iframe title="YouTube [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a cheeky hack that lets you embed a single youtube vid in your prestashop products. No plugins or hacks are necessary. Just find your product.tpl (located in your current template folder), find where you&#8217;d like the video (I like just after the description works well) and paste this code:</p>
<pre>{if $product-&gt;supplier_reference}
&lt;iframe title="YouTube video player" class="youtube-player" type="text/html" width="570" height="520" src="http://www.youtube.com/embed/{$product-&gt;supplier_reference}" frameborder="0" allowFullScreen&gt;&lt;/iframe&gt;
{/if}</pre>
<p>supplier_reference? well, what we did was reused a field that we never use. If you don&#8217;t use it either, then help yourself to a free video plugin.</p>
<p>In the supplier reference in your product, paste the youtube video code, found in the url like this one: EK2tWVj6lXw from this video:</p>
<p>http://www.youtube.com/watch?v=EK2tWVj6lXw</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielcrowe.co.uk/2011/03/17/embed-a-youtube-video-in-prestashop/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Reset WordPress Page Slugs</title>
		<link>http://www.gabrielcrowe.co.uk/2010/11/22/reset-wordpress-page-slugs/</link>
		<comments>http://www.gabrielcrowe.co.uk/2010/11/22/reset-wordpress-page-slugs/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 15:52:22 +0000</pubDate>
		<dc:creator>Gabriel Crowe</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.gabrielcrowe.co.uk/?p=210</guid>
		<description><![CDATA[Reset Your Wordpress Page slugs for SEO]]></description>
			<content:encoded><![CDATA[<p>I needed to loop through only the PAGES in a wordpress site and reset all the slugs (for SEO reasons) back to something logical. Paste this code into a php file in your server, run it once, then delete it. I came up with this:</p>
<blockquote>
<div id="_mcePaste">&lt;?</div>
<div id="_mcePaste">// ** MySQL settings &#8211; You can get this info from your web host ** //</div>
<div id="_mcePaste">/** The name of the database for WordPress */</div>
<div id="_mcePaste">define(&#8216;DB_NAME&#8217;, &#8221;);</div>
<div id="_mcePaste">/** MySQL database username */</div>
<div id="_mcePaste">define(&#8216;DB_USER&#8217;, &#8221;);</div>
<div id="_mcePaste">/** MySQL database password */</div>
<div id="_mcePaste">define(&#8216;DB_PASSWORD&#8217;, &#8221;);</div>
<div id="_mcePaste">/** MySQL hostname */</div>
<div id="_mcePaste">define(&#8216;DB_HOST&#8217;, &#8216;localhost&#8217;);</div>
<div id="_mcePaste">?&gt;</div>
<div id="_mcePaste">&lt;?php</div>
<div id="_mcePaste">$con = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);</div>
<div id="_mcePaste">if (!$con)</div>
<div id="_mcePaste">{</div>
<div id="_mcePaste">die(&#8216;Could not connect: &#8216; . mysql_error());</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">mysql_select_db(DB_NAME, $con);</div>
<div id="_mcePaste">$result = mysql_query(&#8220;SELECT ID, post_title FROM wp_posts WHERE post_type = &#8216;page&#8217; AND post_status LIKE &#8216;publish&#8217;&#8221;);</div>
<div id="_mcePaste">while($row = mysql_fetch_array($result))</div>
<div id="_mcePaste">{</div>
<div id="_mcePaste">$id=$row['ID'];</div>
<div id="_mcePaste">$post_title=$row['post_title'];</div>
<div id="_mcePaste">$new_string = ereg_replace(&#8216;[^A-Za-z0-9 ]&#8216;, &#8221;, $post_title);</div>
<div id="_mcePaste">$clearedlang = strtolower($new_string);</div>
<div id="_mcePaste">$clearedlang = str_replace(&#8216;  &#8217;,&#8217; &#8216;,$clearedlang);</div>
<div id="_mcePaste">$clearedlang = str_replace(&#8216; &#8216;,&#8217;-',$clearedlang);</div>
<div id="_mcePaste">echo $clearedlang . &#8220;&lt;br&gt;&#8221;;</div>
<div id="_mcePaste">//into the db:</div>
<div id="_mcePaste">$result2 = mysql_query(&#8220;UPDATE wp_posts SET post_name=&#8217;{$clearedlang}&#8217; WHERE ID=&#8217;{$id}&#8217;&#8221;);</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">mysql_close($con);</div>
<div id="_mcePaste">?&gt;</div>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielcrowe.co.uk/2010/11/22/reset-wordpress-page-slugs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automatic Backup &#8211; Keep your Product Info Safe</title>
		<link>http://www.gabrielcrowe.co.uk/2010/09/05/automatic-backup-keep-your-product-info-safe/</link>
		<comments>http://www.gabrielcrowe.co.uk/2010/09/05/automatic-backup-keep-your-product-info-safe/#comments</comments>
		<pubDate>Sun, 05 Sep 2010 08:45:34 +0000</pubDate>
		<dc:creator>Gabriel Crowe</dc:creator>
				<category><![CDATA[Cool Finds]]></category>

		<guid isPermaLink="false">http://www.gabrielcrowe.co.uk/?p=170</guid>
		<description><![CDATA[Dropbox keeps your files in the cloud and downloads them automatically to other computers. Bye-bye memory sticks.]]></description>
			<content:encoded><![CDATA[<p>http://www.dropbox.com/</p>
<h2>At a Glance</h2>
<h4>PRICE:</h4>
<ul>
<li>Basic – 2gb: Free</li>
<li>Pro 50 – 50gb: $9.99/month or $99.00/year</li>
<li>Pro 100 – 100gb: $19.99/month or $199.00/year</li>
</ul>
<h4>SUPPORTS</h4>
<ul>
<li>Windows</li>
<li>Mac</li>
<li>Linux</li>
</ul>
<h4>PROS:</h4>
<ul>
<li>Free 2GB.</li>
<li>Web interface to upload and access files.</li>
<li>Multi Platform Support – Mac, Windows, Linux Compatible</li>
<li>Allows sharing of files.</li>
<li>Easy to use</li>
<li>Offers a mobile application for iPhone and Android.</li>
</ul>
<h4>CONS:</h4>
<ul>
<li>No Blackberry application available.</li>
<li>Mobile applications limited in functionality.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielcrowe.co.uk/2010/09/05/automatic-backup-keep-your-product-info-safe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Facebook plugin for Prestashop</title>
		<link>http://www.gabrielcrowe.co.uk/2010/09/04/new-facebook-plugin-for-prestashop/</link>
		<comments>http://www.gabrielcrowe.co.uk/2010/09/04/new-facebook-plugin-for-prestashop/#comments</comments>
		<pubDate>Sat, 04 Sep 2010 19:07:58 +0000</pubDate>
		<dc:creator>Gabriel Crowe</dc:creator>
				<category><![CDATA[Ecommerce]]></category>
		<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[module]]></category>
		<category><![CDATA[paid]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[prestashop]]></category>

		<guid isPermaLink="false">http://www.gabrielcrowe.co.uk/?p=136</guid>
		<description><![CDATA[7 Plugins in one. Product Comments, Friend Pile, Product Like Button, Recommendations, Wall Stream. A Bargain.]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.prestastore.com/social-networks/1122-modular-facebook-connect-7-plugin-bundle.html" target="_blank">Click here</a> to see this plugin in the Prestastore plugin gallery</p>
<p><strong>MODULAR Facebook Connect For Prestashop 7 Plugins for the price of 1</strong></p>
<p>A set of modules and widgets that implement all of facebooks new social widgets. Install as many or as few as you need. All seperate plugins to move and place wherever you please, in sidebars and even on the frontpage.</p>
<p>BONUS Site stream plugin to display your most &#8216;liked&#8217; and commented products on the front page. 7 plugins included for your site.</p>
<p><strong>Facebook Connect Base</strong><br />
Required for the other plugins in the Facebook pack to work.</p>
<p><strong>Facebook Connect Product Comments</strong><br />
Module for product comments, requires Facebook Base.</p>
<p><strong>Facebook Connect Friend Pile</strong><br />
Shows which of your friends have connected to the site too.</p>
<p><strong>Facebook Connect Product Like Button</strong><br />
Facebook&#8217;s Classic Like button, set to &#8216;Recommend&#8217; for ecommerce.</p>
<p><strong>Facebook Connect Recommendations</strong><br />
A Stream from your site based on popularity</p>
<p><strong>Facebook Connect Stream</strong><br />
Site Stream For Modular Facebook Connect Suite</p>
<p><strong>Facebook Connect Stream For The Homepage</strong><br />
Wide stream, for the homepage</p>
<p><em>These plug-ins will have people clicking and commenting on your products, spreading their coolness through the Facebook social network, a must have for a great online store.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielcrowe.co.uk/2010/09/04/new-facebook-plugin-for-prestashop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Content Vs Design &#8211; A Rant</title>
		<link>http://www.gabrielcrowe.co.uk/2010/01/29/content-vs-design-a-rant/</link>
		<comments>http://www.gabrielcrowe.co.uk/2010/01/29/content-vs-design-a-rant/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 17:01:23 +0000</pubDate>
		<dc:creator>Gabriel Crowe</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[The Web]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[technique]]></category>

		<guid isPermaLink="false">http://www.gabrielcrowe.co.uk/?p=43</guid>
		<description><![CDATA[Whats this rant all about then? First of all let me start by saying that this problem is something that I&#8217;ve noticed a lot recently. While I work with various ecommerce and content management platforms, I find myself with my fingers in the templates. When you first install a blog, shopping cart or anything else [...]]]></description>
			<content:encoded><![CDATA[<h3>Whats this rant all about then?</h3>
<p>First of all let me start by saying that this problem is something that I&#8217;ve noticed a lot recently. While I work with various ecommerce and content management platforms, I find myself with my fingers in the templates. When you first install a blog, shopping cart or anything else where the software is off the shelf and you need to create a design for it there are always crap templates.</p>
<p>Very rarely is the initial template of such a good quality that I would consider putting it into use, and even then, pride over my work prohibits me from letting my client&#8217;s store or homepage look like thousands of other shops and blogs out there.</p>
<p>A good ecommerce one is <a  href="http://www.interspire.com/" target="_blank">Interspire</a>. It has a great initial template. <a  href="http://wordpress.org/" target="_blank">WordPress</a> has a nice starting theme too.</p>
<h3>So, we make our own templates?</h3>
<p>Yes, and I make templates for various things, and you wouldn&#8217;t believe the crazy template engines I&#8217;ve used. Some of them are so simple they take minutes to learn, give no real control over the flow and are purely visual and some are so fiendish and contrived that they take months to truly master and let you control all aspects of the output of the page.</p>
<h4>Some examples?</h4>
<p><em><strong>Actinic:</strong></em><br />
This offline Ecommerce cart has a very clever PHP based template system, with nested iterating elements and a very capable editor. It lets you edit in dreamweaver (which i don&#8217;t really use) and creates html as an output for online consumption. The templates have their own built in &#8216;what if&#8217; known as &#8216;blocks&#8217; that are easy to understand (for a programmer that is) and you can use PHP inline if you want to. This, I like. Its strong, but not too complicated. Everything is controllable, I control all aspects of the template.</p>
<p><em><strong>Interspire:</strong></em><br />
Interspire has a good template engine too. Its dynamically compiled as you save, since its online, and its also based off PHP. The editor you get in the package is actually not so good. In fact, its broken with Safari (I&#8217;m a Mac user). It uses neat placeholders to represent deeper nested blocks, that build parts of the page. Some of the things that it puts in the templates are hard to locate in the settings, and i&#8217;m pretty sure some of them are hardcoded. This means i&#8217;m not totally in control of the output. This can be frustrating if you cant find a stray &lt;br&gt; thats screwing up your design.</p>
<p><em><strong>Aspdotnet store:</strong></em><br />
from what I have been working with this week, I&#8217;ve found this template engine to probably be the most difficult. It&#8217;s written in asp.net and uses some complex xml to draw the various elements. Not for the feint of heart. It also has lots of hardcoded junk in there that I have to root around to remove. Which brings me to the final point&#8230;</p>
<h3>Separating Content from Design (and why we need to do it)</h3>
<p>When I write this markup in a page:</p>
<p><strong>&lt;font size=&#8221;16px&#8221;&gt;&lt;i&gt;&lt;strong&gt;Hello world&lt;/strong&gt;&lt;/i&gt;&lt;/font&gt;</strong></p>
<p>Doesn&#8217;t it just make you cringe? No? well, perhaps we should look at why its a very bad idea, so you can understand more.</p>
<p>Lets just look at the *BEST* way to do this and then we&#8217;ll talk about why we need to.</p>
<p>&lt;style&gt;<br />
.test<br />
{<br />
font-size: 16px;<br />
font-style: italic;<br />
font-weight: bold;<br />
}<br />
&lt;/style&gt;<br />
<strong> ^ This part is written by the designer</strong></p>
<p>&lt;span class=&#8221;test&#8221;&gt;[!title!]&lt;/span&gt;<br />
<strong> ^ This part is initially written by the programmer responsible for the CMS.</strong></p>
<p>&#8220;Hello World&#8221;<br />
<strong> ^ This part is written by the end user.</strong></p>
<div>And the result?</div>
<h1><em>Hello World</em></h1>
<p>Really, its not about changing a single style and having the luxury of this reflecting across your entire site. Our CMS will probably handle that. This is about making sure that as an application designer, you don&#8217;t force any aspects of what you feel is right and works well onto the designer of your skins, or even worse, the end user. Because I know that the designer will pull out all the wires and make his own template, and the end user will not understand why he cannot make a certain passage of text a certain colour or size.</p>
<p>This isn&#8217;t a lesson in css. I know you know how that works. This is about designers of software and templates today, insisting on using things like breaks, paragraphs, horizontal rules and other content related markup in template engines, denying you the freedom to make your own choices about what goes into the templates and how it should be arranged. ALL content should be inside layout-less containers (most likely divs) that can be visually styled and shaped how you want it. There are very few excuses with respect to web software nowadays that mean design must be included in the structure. Tabular data is one of them.</p>
<p>If you are in the position where you are designing an online application, be it a simple blog, or anything else where you are generating content that can be themed or styled, please, never confuse the difference between content and design. Don&#8217;t include any fluff that the designer cant edit, and make it easy to theme.</p>
<p>I still find some templates in very modern applications that break these rules, and the upshot is a sad one. I need to delve around in the source code until i find that arrant &lt;br&gt; or the badly thought out tables with too much cellpadding.</p>
<p>Luckily, web standards are forcing the web into a very neat space where most people follow these rules, but there are some perfectly good programmers, that are rotten designers, and some awesome designers are the worst programmers ever. So, lets not tread on each others feet shal we?</p>
<p> <img src='http://www.gabrielcrowe.co.uk/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielcrowe.co.uk/2010/01/29/content-vs-design-a-rant/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webhooks &#8211; Why I think they are win.</title>
		<link>http://www.gabrielcrowe.co.uk/2010/01/25/webhooks-why-i-think-they-are-win/</link>
		<comments>http://www.gabrielcrowe.co.uk/2010/01/25/webhooks-why-i-think-they-are-win/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 11:28:50 +0000</pubDate>
		<dc:creator>Gabriel Crowe</dc:creator>
				<category><![CDATA[Cool Finds]]></category>
		<category><![CDATA[cool]]></category>
		<category><![CDATA[form post]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[webhooks]]></category>
		<category><![CDATA[xmlrpc]]></category>

		<guid isPermaLink="false">http://www.gabrielcrowe.co.uk/?p=41</guid>
		<description><![CDATA[First of all, I suggest you watch this video. http://www.webhooks.org/ It&#8217;ll explain a lot why webhooks are pretty fabulous. I&#8217;ve been trying to implement them recently in one of my own projects. I want a way to take a subscription payment for a web-service. The payment provider I have chosen is Recurly. This service has a [...]]]></description>
			<content:encoded><![CDATA[<p>First of all, I suggest you watch this video.</p>
<p><a  href="http://www.webhooks.org/" target="_blank">http://www.webhooks.org/</a></p>
<p>It&#8217;ll explain a lot why webhooks are pretty fabulous. I&#8217;ve been trying to implement them recently in one of my own projects. I want a way to take a subscription payment for a web-service. The payment provider I have chosen is <a  href="http://recurly.com/" target="_blank">Recurly</a>. This service has a payment page, very much like PayPal and special tools focused on management of subscriptions. Its pretty slick stuff. This was the first time that i&#8217;d encountered webhooks. After they subscribe to my service, their server sends a _POST request back to a my server, loaded full of xml related to the actions performed.</p>
<blockquote><p>The one I&#8217;m looking for is &#8216;They paid and its all gravy&#8217;. This means i can activate their subscription.</p></blockquote>
<p>At some point they might stop paying. At this point (any point in the future) the Recurly service will fire off another webhook at my server, letting me know that its not gravy. Behind the scenes, their account is automagically canceled.</p>
<p>The idea behind webhooks as explained in the video is a nice and simple one. So simple in fact that people have trouble understanding it. It allows the web to plug into other parts of the web. It allows completely seperate services and ideas to talk to each other, in a timely and smart manner.</p>
<p>Overall, <em>its gravy</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielcrowe.co.uk/2010/01/25/webhooks-why-i-think-they-are-win/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

