<?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>juust ~ php oddities &#187; wordpress</title>
	<atom:link href="http://www.juust.org/index.php/tag/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.juust.org</link>
	<description>Link theory and search engine optimization</description>
	<lastBuildDate>Thu, 19 Jan 2012 09:39:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>QuickGlossary wordpress plugin</title>
		<link>http://www.juust.org/index.php/quickglossary-wordpress-plugin/2011/12/</link>
		<comments>http://www.juust.org/index.php/quickglossary-wordpress-plugin/2011/12/#comments</comments>
		<pubDate>Sat, 24 Dec 2011 12:41:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[google]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[widget]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[PIYF]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=1911</guid>
		<description><![CDATA[I am curious with the ongoing discussion on LSI in search, how Googlebot responds to using the Datalist and it&#8217;s DFN definition element on page. Maybe it helps if we provide the search engines with more on page context. So &#8230; <a href="http://www.juust.org/index.php/quickglossary-wordpress-plugin/2011/12/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I am curious with the ongoing discussion on LSI in search, how Googlebot responds to using the Datalist and it&#8217;s DFN definition element on page. Maybe it helps if we provide the search engines with more on page context. So I built a Quick Glossary WordPress plugin. It puts the single post tags with description as a Glossary in the sidebar and uses jQuery to shorten the displayed text and add a [more] link, so visitors can choose to read a full description but it does not dominate the page, whilst Googlebot and Slurp get the full context of the content according to my tag definitions. </p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>dl<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sy0">&lt;</span>dt<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="sy0">&lt;</span>dfn<span class="sy0">&gt;</span>PIYF<span class="sy0">&lt;/</span>dfn<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sy0">&lt;/</span>dt<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sy0">&lt;</span>dd<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; Acronym <span class="sy0">:</span> Panda Is Your Friend</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sy0">&lt;/</span>dd<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;/</span>dl<span class="sy0">&gt;</span></div>
</li>
</ol>
</div>
<p>First the basic widget code, I&#8217;ll call it Quick Glossary :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> widget_QuickGlossary<span class="br0">&#40;</span><span class="re1">$args</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">extract</span><span class="br0">&#40;</span><span class="re1">$args</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//preparation : scope, css, javascript </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="re1">$before_widget</span><span class="sy0">;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="re1">$before_title</span> <span class="sy0">.</span> <span class="st0">&#39;Quick Glossary&#39;</span> <span class="sy0">.</span> <span class="re1">$after_title</span><span class="sy0">;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//output &nbsp;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="re1">$after_widget</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">register_sidebar_widget<span class="br0">&#40;</span><span class="st0">&#39;Quick Glossary&#39;</span><span class="sy0">,</span> <span class="st0">&#39;widget_QuickGlossary&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<h3>the preparation</h3>
<h4>scope</h4>
<p>I want my widget to only show on single posts, and only if the post has tags :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span>is_single<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">return</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">global</span> <span class="re1">$post</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$tags</span> <span class="sy0">=</span> get_the_tags<span class="br0">&#40;</span><span class="re1">$post</span><span class="sy0">-&gt;</span><span class="me1">ID</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="re1">$tags</span><span class="br0">&#41;</span> <span class="kw1">return</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<h4>layout</h4>
<p>I want a double column layout with the term (tag) linking to the tag page, and the definition itself only part visible, with a fancy [more] link like on Facebook.</p>
<p>First some css for a double column data list :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>style<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">dl</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;width<span class="sy0">:</span><span class="nu0">100</span><span class="sy0">%;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;overflow<span class="sy0">:</span>hidden<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">dt <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;float<span class="sy0">:</span>left<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;width<span class="sy0">:</span><span class="nu0">50</span><span class="sy0">%;</span> <span class="coMULTI">/* adjust the width; make sure the total of both is 100% */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">dd <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;float<span class="sy0">:</span>left<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;width<span class="sy0">:</span><span class="nu0">50</span><span class="sy0">%;</span> <span class="coMULTI">/* adjust the width; make sure the total of both is 100% */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;/</span>style<span class="sy0">&gt;</span></div>
</li>
</ol>
</div>
<p>and then some jQuery : I want the whole definition on the page but only part visible to the reader. <a href="<br />
http://viralpatel.net/blogs/2010/12/dynamically-shortened-text-show-more-link-jquery.html">Viralpatel</a> list a nice cut and paste jQuery snippet. That requires I add a class &#8220;more&#8221; to the DD element, and add some css for it and for the link :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>style<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">.</span>morecontent span <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; display<span class="sy0">:</span> none<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">a<span class="sy0">.</span>morelink <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; text<span class="sy0">-</span>decoration<span class="sy0">:</span>none<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; outline<span class="sy0">:</span> none<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;/</span>style<span class="sy0">&gt;</span></div>
</li>
</ol>
</div>
<p>I put the extra CSS script in it&#8217;s own function :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> quickGlossary_scripts<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//css for doyble column</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//css hooks for jquery</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>&#8230;and make sur the jquery script only loads when thr query is loaded :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">add_action<span class="br0">&#40;</span><span class="st0">&#39;init&#39;</span><span class="sy0">,</span> <span class="st0">&#39;register_QuickGlossary_script&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">add_action<span class="br0">&#40;</span><span class="st0">&#39;wp_footer&#39;</span><span class="sy0">,</span> <span class="st0">&#39;print_QuickGlossary_script&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> register_QuickGlossary_script<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;wp_register_script<span class="br0">&#40;</span><span class="st0">&#39;QuickGlossary&#39;</span><span class="sy0">,</span> plugins_url<span class="br0">&#40;</span><span class="st0">&#39;QuickGlossary.js&#39;</span><span class="sy0">,</span> <span class="kw2">__FILE__</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">&#39;jquery&#39;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="st0">&#39;1.0&#39;</span><span class="sy0">,</span> <span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> print_QuickGlossary_script<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw3">global</span> <span class="re1">$add_QuickGlossary_script</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <span class="sy0">!</span> <span class="re1">$add_QuickGlossary_script</span> <span class="br0">&#41;</span> <span class="kw1">return</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; wp_print_scripts<span class="br0">&#40;</span><span class="st0">&#39;QuickGlossary&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//nb.: requires setting the global var to true in the widget function </span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">global</span> <span class="re1">$add_QuickGlossary_script</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$add_QuickGlossary_script</span> <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&#8230;</span></div>
</li>
</ol>
</div>
<p>&#8230;and proceed to generating the output, the data list :</p>
<h3>the output</h3>
<p>Straight forward, using DL as list container, tagname and description as list of DT DD elements, with an added <strong>class=&#8221;more&#8221;</strong> to the DD description as hook for jQuery.</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> QuickGlossary_datalist<span class="br0">&#40;</span><span class="re1">$tags</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="re1">$html</span> <span class="sy0">=</span> <span class="st0">&#39;&lt;dl class=&quot;post_tags&quot;&gt;&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re1">$tags</span> <span class="kw1">as</span> <span class="re1">$tag</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$tag_link</span> <span class="sy0">=</span> get_tag_link<span class="br0">&#40;</span><span class="re1">$tag</span><span class="sy0">-&gt;</span><span class="me1">term_id</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$html</span> <span class="sy0">.=</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;&lt;dt&gt;&lt;dfn&gt;&lt;a href=&#39;{$tag_link}&#39; title=&#39;more articles on {$tag-&gt;name}&#39; class=&#39;{$tag-&gt;slug}&#39;&gt;{$tag-&gt;name}&lt;/a&gt;&lt;/dfn&gt;&lt;/dt&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;&lt;dd class=&#39;more&#39;&gt;{$tag-&gt;description}&lt;/dd&gt;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="re1">$html</span> <span class="sy0">.=</span> <span class="st0">&#39;&lt;/dl&gt;&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">return</span> <span class="re1">$html</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>You can edit your tag description under <em>Admin-Posts-Post Tags</em> menu.</p>
<p>Now my main widget function is :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> widget_QuickGlossary<span class="br0">&#40;</span><span class="re1">$args</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">extract</span><span class="br0">&#40;</span><span class="re1">$args</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span>is_single<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">return</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">global</span> <span class="re1">$post</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$tags</span> <span class="sy0">=</span> get_the_tags<span class="br0">&#40;</span><span class="re1">$post</span><span class="sy0">-&gt;</span><span class="me1">ID</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="re1">$tags</span><span class="br0">&#41;</span> <span class="kw1">return</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">global</span> <span class="re1">$add_QuickGlossary_script</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$add_QuickGlossary_script</span> <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; quickGlossary_scripts<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span> <span class="re1">$before_widget</span><span class="sy0">;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span> <span class="re1">$before_title</span> <span class="sy0">.</span> <span class="st0">&#39;Glossary&#39;</span> <span class="sy0">.</span> <span class="re1">$after_title</span><span class="sy0">;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span> QuickGlossary_datalist<span class="br0">&#40;</span><span class="re1">$tags</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span> <span class="re1">$after_widget</span><span class="sy0">;</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Activate the widget, drag and drop it from <em>Admin-Appearance-Widgets</em> menu and it is a Quick Glossary, if you want to play with it, code is overhere as <a rel="nofollow" href="http://www.juust.org/wp-content/plugins/QuickGlossary/QuickGlossary.zip">zip</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/quickglossary-wordpress-plugin/2011/12/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>spot the bot</title>
		<link>http://www.juust.org/index.php/spot-a-bot/2009/09/</link>
		<comments>http://www.juust.org/index.php/spot-a-bot/2009/09/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 09:10:25 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[optimisation]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=837</guid>
		<description><![CDATA[I have some overhead scripts fetching data that can cost a few seconds extra loading time. Having traffic trigger tasks saves me the trouble of using cron-jobs, but I don&#8217;t want to run overhead scripts with visitors or googlebot on &#8230; <a href="http://www.juust.org/index.php/spot-a-bot/2009/09/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I have some overhead scripts fetching data that can cost a few seconds extra loading time. Having traffic trigger tasks saves me the trouble of using cron-jobs, but I don&#8217;t want to run overhead scripts with visitors or googlebot on the site. Apart from that, some routines can use a lot of resources which are wasted on some crawlers.</p>
<p>I actually want the crawlers to come around, so I will make an array with bots and allowed_bots. Whatever is not on the white-list gets a meager page with overhead jobs attached to it, the rest (iow visitors and the big search engines) get the standard page. </p>
<p>There are truckloads of bots (see <a href="http://www.crawltrack.fr/">crawltrack</a>), for my purposes a few regulars will do. </p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//hook it into &#39;init&#39;, run when calling script</span></div>
</li>
<li class="li1">
<div class="de1">add_action<span class="br0">&#40;</span> <span class="st0">&#39;init&#39;</span><span class="sy0">,</span> <span class="st0">&#39;spotabot&#39;</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* checks if visitor is a bot</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* This method checks the http_user_agent string</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* to see if the visitors is a non-essential bot</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @param void</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @return void</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;if(IS_A_BAD_BOT) {}</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> spotabot<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$bot_list</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">&quot;Teoma&quot;</span><span class="sy0">,</span> <span class="st0">&quot;betaBot&quot;</span><span class="sy0">,</span> <span class="st0">&quot;alexa&quot;</span><span class="sy0">,</span> <span class="st0">&quot;froogle&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Gigabot&quot;</span><span class="sy0">,</span> <span class="st0">&quot;inktomi&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;looksmart&quot;</span><span class="sy0">,</span> <span class="st0">&quot;URL_Spider_SQL&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Firefly&quot;</span><span class="sy0">,</span> <span class="st0">&quot;NationalDirectory&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;Ask Jeeves&quot;</span><span class="sy0">,</span> <span class="st0">&quot;TECNOSEEK&quot;</span><span class="sy0">,</span> <span class="st0">&quot;InfoSeek&quot;</span><span class="sy0">,</span> <span class="st0">&quot;WebFindBot&quot;</span><span class="sy0">,</span> <span class="st0">&quot;girafabot&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;crawler&quot;</span><span class="sy0">,</span> <span class="st0">&quot;www.galaxy.com&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Googlebot&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Scooter&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Slurp&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;msnbot&quot;</span><span class="sy0">,</span> <span class="st0">&quot;appie&quot;</span><span class="sy0">,</span> <span class="st0">&quot;FAST&quot;</span><span class="sy0">,</span> <span class="st0">&quot;WebBug&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Radian6&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Spade&quot;</span><span class="sy0">,</span> <span class="st0">&quot;ZyBorg&quot;</span><span class="sy0">,</span> <span class="st0">&quot;rabaz&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;Baiduspider&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Feedfetcher-Google&quot;</span><span class="sy0">,</span> <span class="st0">&quot;TechnoratiSnoop&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Rankivabot&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;Mediapartners-Google&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Sogou web spider&quot;</span><span class="sy0">,</span> <span class="st0">&quot;WebAlta Crawler&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$bot_allowed</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">&quot;Googlebot&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Feedfetcher-Google&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Mediapartners-Google&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Slurp&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Baiduspider&quot;</span><span class="sy0">,</span> <span class="st0">&quot;msnbot&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re1">$bot_list</span> <span class="kw1">as</span> <span class="re1">$bot</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">strpos</span><span class="br0">&#40;</span><span class="kw3">strtolower</span><span class="br0">&#40;</span><span class="st0">&quot;x&quot;</span><span class="sy0">.</span><span class="re1">$_SERVER</span><span class="br0">&#91;</span><span class="st0">&#39;HTTP_USER_AGENT&#39;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="kw3">strtolower</span><span class="br0">&#40;</span><span class="re1">$bot</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">&gt;</span><span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re1">$bot_allowed</span> <span class="kw1">as</span> <span class="re1">$okbot</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><span class="re1">$okbot</span><span class="sy0">==</span><span class="re1">$bot</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">define</span><span class="br0">&#40;</span><span class="st0">&quot;IS_A_BAD_BOT&quot;</span><span class="sy0">,</span> <span class="kw2">false</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">define</span><span class="br0">&#40;</span><span class="st0">&quot;IS_A_BAD_BOT&quot;</span><span class="sy0">,</span> <span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">define</span><span class="br0">&#40;</span><span class="st0">&quot;IS_A_BAD_BOT&quot;</span><span class="sy0">,</span> <span class="kw2">false</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>In templates and functions i can use some simple code to run stuff conditional :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">defined</span><span class="br0">&#40;</span><span class="st0">&#39;IS_A_BAD_BOT&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span>IS_A_BAD_BOT<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;hi bot&lt;br /&gt;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; run_time_consuming_overhead_tasks<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; and_omit_the_sidebar<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;hello wonderful visitor&lt;br /&gt;&quot;</span><span class="sy0">;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//if it is not defined it is not a bot or the function ain&#39;t present, </span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//I am lazy and sloppy and don&#39;t want a code-break</span></div>
</li>
</ol>
</div>
<p>It would be nice if WordPress built in a switch to run plugins conditional.</p>
<p><em>one related smart plugin is the <a href="http://indiafascinates.com/chennai/chennaicentral/">chennai central</a> plugin that sends 304 not modified headers on conditional GETs, so crawlers don&#8217;t fetch the page. That can save some bandwidth and serverload.<br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/spot-a-bot/2009/09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>quick note : serp plugin beta</title>
		<link>http://www.juust.org/index.php/wordpress-serp-plugin-beta/2009/09/</link>
		<comments>http://www.juust.org/index.php/wordpress-serp-plugin-beta/2009/09/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 17:47:40 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[juust]]></category>
		<category><![CDATA[serp]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=724</guid>
		<description><![CDATA[I am developing a new google serp plugin for wordpress. I developed it over the weeknd on wp2.8, it should run on anything with a &#8216;shutdown&#8217; hook and jquery. I will be adding some other stuff to it over the &#8230; <a href="http://www.juust.org/index.php/wordpress-serp-plugin-beta/2009/09/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I am developing a new <a href="http://www.juust.org/index.php/serp/serp-dashboard-wordpress-plugin/">google serp plugin for wordpress</a>. I developed it over the weeknd on wp2.8, it should run on anything with a &#8216;shutdown&#8217; hook and jquery. I will be adding some other stuff to it over the next few weeks, but I thought I&#8217;d put a beta on the blog. If you try it, I hope it runs, send some feedback. </p>
<p>If you have some ideas about cool features drop me a note, I might put it in there. I was pondering on a rest service to pool sem-data and develop some competitor analysis functionality, but that is just a vague idea.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/wordpress-serp-plugin-beta/2009/09/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>wordpress : fun with pluggable classes</title>
		<link>http://www.juust.org/index.php/wordpress-fun-with-pluggable-classes/2009/07/</link>
		<comments>http://www.juust.org/index.php/wordpress-fun-with-pluggable-classes/2009/07/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 10:09:26 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=685</guid>
		<description><![CDATA[I was checking some idea i had about writing a small user class with an option to &#8216;plug in&#8217; functions for wordpress. This page covers most of it : dynamically add functions to php classes @ www.gen-x-design.com. The class construct &#8230; <a href="http://www.juust.org/index.php/wordpress-fun-with-pluggable-classes/2009/07/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I was checking some idea i had about writing a small user class with an option to &#8216;plug in&#8217; functions for wordpress. </p>
<p>This page covers most of it :<br />
<a href="http://www.gen-x-design.com/archives/dynamically-add-functions-to-php-classes/">dynamically add functions to php classes</a> @ www.gen-x-design.com. The class construct at the end of the comment thread, Martin Pietschmann&#8217;s <a href="http://pastebin.com/fd1812de" rel="nofollow">contribution</a>, is rather useful. This pattern revolves around importing functionality from pluggable classes and exposing it through one object instance (the &#8216;decorator&#8217; pattern mentioned is mostly used for writing extended classes, different objects with the same base data and functionality, &#8216;views&#8217; sort of). </p>
<p>I can include the file with <em>base</em>, <em>import</em> and <em>user</em> class into function.php, and on making a user object have it read the directory and import functions modules (or load functionality conditional based on user role/authorization).</p>
<p>For this example I used the wordpress options table. I write a new functions class</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> UserBogusPlugin <span class="kw2">extends</span> MI_Importable</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="kw2">function</span> the_anchor<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//user_url and user_nicename are exposed through the user class</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//I plug the functions class into, i can use the $this reference </span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//as if i am writing code in the user class</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">user_url</span><span class="sy0">&lt;&gt;</span><span class="st0">&#39;&#39;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="st0">&#39;&lt;a href=&quot;&#39;</span><span class="sy0">.</span><span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">user_url</span><span class="sy0">.</span><span class="st0">&#39;&quot;&gt;&#39;</span><span class="sy0">.</span><span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">user_nicename</span> <span class="sy0">.</span><span class="st0">&#39;&lt;/a&gt;, &#39;</span> <span class="sy0">.</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">first_name</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//no url, no anchor&#8230;. &nbsp; </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">user_nicename</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>&#8230;store the added class name in the options table&#8230;</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="co1">//load $arr from options table</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$modules</span> <span class="sy0">=</span> get_option<span class="br0">&#40;</span><span class="st0">&#39;usermodules&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span><span class="re1">$modules</span><span class="br0">&#41;</span> <span class="re1">$usermodules</span> <span class="sy0">=</span> json_decode<span class="br0">&#40;</span><span class="re1">$modules</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//add module</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$usermodules</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st0">&#39;UserBogusPlugin&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//store back in options</span></div>
</li>
<li class="li1">
<div class="de1">add_option<span class="br0">&#40;</span><span class="st0">&#39;usermodules&#39;</span><span class="sy0">,</span> json_encode<span class="br0">&#40;</span><span class="re1">$usermodules</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>&#8230;and load the plugin classes when instantiating the user object : </p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> User <span class="kw2">extends</span> MI_Base</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="re1">$ID</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$modules</span> <span class="sy0">=</span> get_option<span class="br0">&#40;</span><span class="st0">&#39;usermodules&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re1">$modules</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$usermodules</span> <span class="sy0">=</span> json_decode<span class="br0">&#40;</span><span class="re1">$modules</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re1">$usermodules</span> <span class="kw1">as</span> <span class="re1">$module</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">class_exists</span><span class="br0">&#40;</span><span class="re1">$module</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">import</span><span class="br0">&#40;</span><span class="kw2">new</span> <span class="re1">$module</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">//or..</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">//include(&#39;plugclass/&#39;.$module.&#39;.class.php&#39;);</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">//$this-&gt;import(new $module);</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">ID</span><span class="sy0">=</span><span class="re1">$ID</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>In the wordpress template i can use the added functionality through the user instance :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="re1">$my_user</span> <span class="sy0">=</span> <span class="kw2">new</span> User<span class="br0">&#40;</span><span class="re1">$user_id</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sy0">&#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="re1">$my_user</span><span class="sy0">-&gt;</span><span class="me1">the_anchor</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>Fun with classes :)</p>
<p>add. 3-8 (qed) :<br />
a function to load a directory with plugin files, i add a header /* plugin pluginfilename */ and check the files if there is a header.</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">public</span> <span class="kw2">function</span> getPlugins<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$plugdir</span> <span class="sy0">=</span> TEMPLATEPATH <span class="sy0">.</span><span class="st0">&#39;/plug&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$handle</span> <span class="sy0">=</span> <span class="kw3">opendir</span><span class="br0">&#40;</span><span class="re1">$plugdir</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$retval</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="kw2">false</span> <span class="sy0">!==</span> <span class="br0">&#40;</span><span class="re1">$file</span> <span class="sy0">=</span> <span class="kw3">readdir</span><span class="br0">&#40;</span><span class="re1">$handle</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="re1">$file</span> <span class="sy0">&lt;&gt;</span> <span class="st0">&quot;.&quot;</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="br0">&#40;</span><span class="re1">$file</span> <span class="sy0">&lt;&gt;</span> <span class="st0">&quot;..&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$fh</span> <span class="sy0">=</span> <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="re1">$plugdir</span><span class="sy0">.</span><span class="st0">&#39;/&#39;</span><span class="sy0">.</span><span class="re1">$file</span><span class="sy0">,</span> <span class="st0">&#39;r&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$contents</span> <span class="sy0">=</span> <span class="st0">&#39;&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$contents</span> <span class="sy0">.=</span> <span class="kw3">fread</span><span class="br0">&#40;</span><span class="re1">$fh</span><span class="sy0">,</span> <span class="nu0">1024</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">fclose</span><span class="br0">&#40;</span><span class="re1">$fh</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">preg_match</span><span class="br0">&#40;</span><span class="st0">&#39;/lugin/&#39;</span><span class="sy0">,</span> <span class="re1">$contents</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; <span class="co1">//check for header : plugin, grab pluginname</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$a</span> <span class="sy0">=</span> <span class="kw3">strpos</span><span class="br0">&#40;</span><span class="re1">$contents</span><span class="sy0">,</span> <span class="st0">&#39;lugin&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$a</span> <span class="sy0">+=</span> <span class="nu0">6</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$b</span> <span class="sy0">=</span> <span class="kw3">strpos</span><span class="br0">&#40;</span><span class="re1">$contents</span><span class="sy0">,</span> <span class="st0">&#39; &#39;</span><span class="sy0">,</span> <span class="re1">$a</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$plugname</span> <span class="sy0">=</span> <span class="kw3">substr</span><span class="br0">&#40;</span><span class="re1">$contents</span><span class="sy0">,</span> <span class="re1">$a</span><span class="sy0">,</span> <span class="re1">$b</span><span class="sy0">-</span><span class="re1">$a</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$retval</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="re1">$plugdir</span><span class="sy0">.</span><span class="st0">&#39;/&#39;</span><span class="sy0">.</span><span class="re1">$file</span><span class="sy0">,</span> <span class="re1">$plugname</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp;<span class="br0">&#125;</span> &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">closedir</span><span class="br0">&#40;</span><span class="re1">$handle</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$retval</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="re1">$id</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//get he array with plugin files</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$usermodules</span> <span class="sy0">=</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">getPlugins</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re1">$usermodules</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re1">$usermodules</span> <span class="kw1">as</span> <span class="re1">$module</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//use require to load and import to add the function</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">require_once</span><span class="br0">&#40;</span><span class="re1">$module</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">import</span><span class="br0">&#40;</span><span class="kw2">new</span> <span class="re1">$module</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">ID</span><span class="sy0">=</span><span class="re1">$id</span><span class="sy0">;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/wordpress-fun-with-pluggable-classes/2009/07/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sneak preview</title>
		<link>http://www.juust.org/index.php/sneak-preview/2009/05/</link>
		<comments>http://www.juust.org/index.php/sneak-preview/2009/05/#comments</comments>
		<pubDate>Wed, 06 May 2009 15:18:04 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[juust]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=472</guid>
		<description><![CDATA[I was working on a wordpress install for friends of mine. Marieke Zijlstra and Ruerdtsje made the layout, I stuffed it in a template. I had to learn a bit of css and jquery and brush up on photoshop. We &#8230; <a href="http://www.juust.org/index.php/sneak-preview/2009/05/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I was working on a wordpress install for friends of mine. <a href="http://marieke-zijlstra.nl/" title="graphics, design" target="_blank">Marieke Zijlstra</a> and Ruerdtsje made the layout, I stuffed it in a template.</p>
<p>I had to learn a bit of css and jquery and brush up on photoshop.</p>
<p> <a href="http://www.juust.org/images/pallieter.png" rel="shadowbox[post-472];player=img;"><img src="http://www.juust.org/images/pallieter.small.png" alt="pallieter small"/></a></p>
<p>We still have to add the sidebar slideshow and add some pictures for rotating header graphics, I&#8217;ll do that after it goes live, it was a short term. The css does not validate completely, fortunately there are hundreds of css experts that can iron out the glitches in the stylesheet. </p>
<p>Maybe I&#8217;ll dig into css some more later and fix it myself, it&#8217;s pretty basic stuff.</p>
<p>When the site is live I&#8217;ll add a link to it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/sneak-preview/2009/05/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>using wordpress custom pages for service templates</title>
		<link>http://www.juust.org/index.php/using-wordpress-custom-pages-for-service-templates/2009/05/</link>
		<comments>http://www.juust.org/index.php/using-wordpress-custom-pages-for-service-templates/2009/05/#comments</comments>
		<pubDate>Wed, 06 May 2009 13:21:26 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[vcard]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=467</guid>
		<description><![CDATA[I was reading a discussion elsewhere on a rest service plugin for wordpress. Problem seemed that wordpress kept rerouting all requests to index.php. Most wordpress installs use server modules for url rewriting, where .htaccess contains a rule that checks first &#8230; <a href="http://www.juust.org/index.php/using-wordpress-custom-pages-for-service-templates/2009/05/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I was reading a discussion elsewhere on a rest service plugin for wordpress. Problem seemed that wordpress kept rerouting all requests to index.php. Most wordpress installs use server modules for url rewriting, where .htaccess contains a rule that checks first if a file exists on the server that matches the request. If it doesn&#8217;t, wordpress handles it. Unless you write an extra .htaccess rule to direct requests to the service endpoint, you have to have all endpoint files present under the request name. That&#8217;s awkward.</p>
<h3>using custom pages</h3>
<p>You can solve that by masking your service as a page. WordPress tests if the file exists as &#8216;single&#8217; (page or post), and if a page exists with that permalink, wordpress generates the page.</p>
<p>I can write <a title="custom pages" href="http://www.wordpressmax.com/customize-wordpress/custom-page">custom templates</a> for pages. That template can be any file, so it can also be the main request handler of the REST service.</p>
<p>If I place my request handler in the template directory with a remark</p>
<div class="geshi no php">
<div class="head">/* Template Name: XMLServices</div>
<ol>
<li class="li1">
<div class="de1"><span class="sy0">*/</span></div>
</li>
</ol>
</div>
<p>then wordpress adds it to the custom pages list, that I can use on the backend when I add a new page.</p>
<h3>custom content-type headers</h3>
<p>Services usually reply with json or xml data, and not with wordpress content pages. I need a custom file header.<br />
<img class="alignright" src="http://www.juust.org/images/magic_rabbit.png" alt="black magic" /></p>
<p>No problem, if I leave <strong>get_header();</strong> out of the page template, I can specifiy my own header and use an text/xml content type or vcard text/directory content type.</p>
<p>I made a small example by adding my twitter friends timeline as xml output to the blog menu, by placing a file xmlservices.php in the template directory :</p>
<div class="geshi no php">
<div class="head">/* Template Name: XMLServices</div>
<ol>
<li class="li1">
<div class="de1"><span class="sy0">*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$x</span> <span class="sy0">=</span> simplexml_load_file<span class="br0">&#40;</span><span class="st0">&#39;http://www.juust.org/friends_timeline.xml&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span><span class="re1">$x</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//make the XML-header :</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">header</span><span class="br0">&#40;</span><span class="st0">&quot;Expires: Mon, 26 Jul 1997 05:00:00 GMT&quot;</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">header</span><span class="br0">&#40;</span><span class="st0">&quot;Last-Modified: &quot;</span> <span class="sy0">.</span> <span class="kw3">gmdate</span><span class="br0">&#40;</span> <span class="st0">&quot;D, d M Y H:i:s&quot;</span> <span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st0">&quot;GMT&quot;</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">header</span><span class="br0">&#40;</span><span class="st0">&quot;Cache-Control: no-cache, must-revalidate&quot;</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">header</span><span class="br0">&#40;</span><span class="st0">&quot;Pragma: no-cache&quot;</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">header</span><span class="br0">&#40;</span><span class="st0">&quot;Content-type: text/xml&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//make some xml :</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$xml</span> <span class="sy0">=</span> <span class="st0">&quot;&lt; ?xml version=<span class="es0">\&quot;</span>1.0<span class="es0">\&quot;</span> encoding=<span class="es0">\&quot;</span>utf-8<span class="es0">\&quot;</span>?&gt;<span class="es0">\n</span>&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$xml</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;rows&gt;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$xml</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;page&gt;1&lt;/page&gt;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$xml</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;total&gt;15&lt;/total&gt;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re1">$x</span><span class="sy0">-&gt;</span><span class="me1">status</span> <span class="kw1">as</span> <span class="re1">$s</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$xml</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;row id=&#39;&quot;</span><span class="sy0">.</span><span class="re1">$s</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">id</span><span class="sy0">.</span><span class="st0">&quot;&#39;&gt;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$xml</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;cell&gt;&lt; ![CDATA[&quot;</span><span class="sy0">.</span><span class="re1">$s</span><span class="sy0">-&gt;</span><span class="me1">source</span><span class="sy0">.</span><span class="st0">&quot;]]&gt;&lt;/cell&gt;&quot;</span><span class="sy0">;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$xml</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;cell&gt;&lt; ![CDATA[&quot;</span><span class="sy0">.</span><span class="re1">$s</span><span class="sy0">-&gt;</span><span class="me1">text</span><span class="sy0">.</span><span class="st0">&quot;]]&gt;&lt;/cell&gt;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="co1">//$xml .= &quot;&lt;cell&gt;&lt; ![CDATA[&quot;.$s-&gt;user-&gt;screen_name.&quot;]]&gt;&lt;/cell&gt;&quot;; &nbsp; &nbsp;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$xml</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;cell&gt;&lt; ![CDATA[&quot;</span><span class="sy0">.</span><span class="re1">$s</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">name</span><span class="sy0">.</span><span class="st0">&quot;]]&gt;&lt;/cell&gt;&quot;</span><span class="sy0">;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$xml</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;cell&gt;&lt; ![CDATA[&quot;</span><span class="sy0">.</span><span class="re1">$s</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">screen_name</span><span class="sy0">.</span><span class="st0">&quot;]]&gt;&lt;/cell&gt;&quot;</span><span class="sy0">;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$xml</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;cell&gt;&lt; ![CDATA[&quot;</span><span class="sy0">.</span><span class="re1">$s</span><span class="sy0">-&gt;</span><span class="me1">user</span><span class="sy0">-&gt;</span><span class="me1">followers_count</span><span class="sy0">.</span><span class="st0">&quot;]]&gt;&lt;/cell&gt;&quot;</span><span class="sy0">;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$xml</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;/row&gt;&quot;</span><span class="sy0">;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$xml</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;/rows&gt;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="re1">$xml</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//no data, relocate to the blog index or something</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Then added a page <em>services</em> with xmlservices as template. I can make a whole tree of xml service pages, as long as I use my XMLServices template when I make the page. You can use both http-get-queries and http-post.</p>
<h3>Adding a vCard</h3>
<p><img class="alignright" src="http://www.juust.org/images/example20090507.png" alt="wordpress custom page" width="232" height="359" /> You can also add your  vcard, if you work business to business that comes in very handy.</p>
<p>I picked <a href="http://www.troywolf.com/articles/php/class_vcard">Troy Wolf&#8217;s vcard class</a> of the net, made a file <strong>vcard.php</strong> with vcard as Template Name and put it in the template directory.</p>
<div class="geshi no php">
<div class="head">/* Template Name: vcard</div>
<ol>
<li class="li1">
<div class="de1"><span class="sy0">*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//include the class file</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">include</span><span class="br0">&#40;</span><span class="st0">&#39;../../../classes/vcard.class.php&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//here we go : add my personal data</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$vc</span> <span class="sy0">=</span> <span class="kw2">new</span> vcard<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$vc</span><span class="sy0">-&amp;</span>gt<span class="sy0">;</span>display_name <span class="sy0">=</span><span class="st0">&#39;Juust&#39;</span><span class="sy0">;</span><span class="co1">//&#8230;.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$vc</span><span class="sy0">-&amp;</span>gt<span class="sy0">;</span>download<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>I added a empty new page with &#8216;about&#8217; as parent and vcard as custom template, published it and now anyone can download <a title="my vcard" href="http://www.juust.org/index.php/about/vcard/">my vCard</a> straight from the &#8216;about&#8217; menu.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/using-wordpress-custom-pages-for-service-templates/2009/05/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>faking links &amp; dblclick search</title>
		<link>http://www.juust.org/index.php/faking-links-dblclick-search/2009/04/</link>
		<comments>http://www.juust.org/index.php/faking-links-dblclick-search/2009/04/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 10:17:44 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=434</guid>
		<description><![CDATA[Being a noob at jquery, I was very satisfied with these two : the first is a one liner to search the blog when someone doubleclicks on a word, the second is an easy fake anchor. double click search If &#8230; <a href="http://www.juust.org/index.php/faking-links-dblclick-search/2009/04/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Being a noob at jquery, I was very satisfied with these two : the first is a one liner to search the blog when someone doubleclicks on a word, the second is an easy fake anchor.</p>
<p><span style="background-color: Lime;">double click search</span></p>
<p>If you double click (in some browsers?) you select the word under the cursor. Bind the double click event of a paragraph element to a function that uses the standard worpdress search, using bloginfo(&#8216;home&#8217;) to get the home url, with the selected text as ?s= search parameter, and relocates to the search result page.</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">jQuery<span class="br0">&#40;</span>document<span class="br0">&#41;</span><span class="sy0">.</span>ready<span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;jQuery<span class="br0">&#40;</span><span class="st0">&#39;p&#39;</span><span class="br0">&#41;</span><span class="sy0">.</span>bind<span class="br0">&#40;</span><span class="st0">&#39;dblclick&#39;</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; window<span class="sy0">.</span>location <span class="sy0">=</span> <span class="st0">&#39;&amp;lt;?php bloginfo(&#39;</span>home<span class="st0">&#39;); ?&amp;gt;/?s=&#39;</span><span class="sy0">+</span>getSelectedText<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> getSelectedText<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>window<span class="sy0">.</span>getSelection<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> window<span class="sy0">.</span>getSelection<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">.</span>toString<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span>document<span class="sy0">.</span>getSelection<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> document<span class="sy0">.</span>getSelection<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span>document<span class="sy0">.</span>selection<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> document<span class="sy0">.</span>selection<span class="sy0">.</span>createRange<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">.</span>text<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><span style="background-color: Lime;">fake a link</span></p>
<p>You can also fake a <dfn title="http://elgoog.rb-hosting.de/index.cgi?dir=/Top/News/&amp;page=Satire/">hyperlink</dfn>, makes seo life easier.</p>
<p>Any surplus inline element will do, in this case the <strong>dfn</strong> tag, as most have the title attribute that I&nbsp;use to store the url&nbsp; :</p>
<p><em>&lt;dfn title=&quot;http://elgoog.rb-hosting.de/index.cgi?dir=/Top/News/&amp;amp;page=Satire/&quot;&gt;<span style="color: rgb(0, 0, 255);"><u>hyperlink</u></span>&lt;/dfn&gt;<br />
</em></p>
<p>Style the dfn element with a bit of css :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">dfn <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; color<span class="sy0">:</span> blue<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;text<span class="sy0">-</span>decoration<span class="sy0">:</span> underline<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;font<span class="sy0">-</span>size<span class="sy0">:</span> 14px<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>&#8230;and it looks like a hyperlink, add some jQuery to bind a click event on the dfn element to a function that jumps to the title attribute.</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">jQuery<span class="br0">&#40;</span>document<span class="br0">&#41;</span><span class="sy0">.</span>ready<span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;jQuery<span class="br0">&#40;</span><span class="st0">&#39;dfn&#39;</span><span class="br0">&#41;</span><span class="sy0">.</span>bind<span class="br0">&#40;</span><span class="st0">&#39;click&#39;</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; window<span class="sy0">.</span>location <span class="sy0">=</span> jQuery<span class="br0">&#40;</span>this<span class="br0">&#41;</span><span class="sy0">.</span>attr<span class="br0">&#40;</span><span class="st0">&#39;title&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>&#8230;and we have the link that search engines do not index as a link, but it does work.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/faking-links-dblclick-search/2009/04/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

