<?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; vcard</title>
	<atom:link href="http://www.juust.org/index.php/tag/vcard/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>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>
	</channel>
</rss>

