<?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>Oxford Bloggers &#187; geek</title>
	<atom:link href="http://oxfordbloggers.com/category/geek/feed/" rel="self" type="application/rss+xml" />
	<link>http://oxfordbloggers.com</link>
	<description>A site featuring the writing and photography of Oxford&#039;s bloggers</description>
	<lastBuildDate>Sat, 31 Jul 2010 19:57:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Facebook’s long memory: Hotel California still in place…</title>
		<link>http://www.marcus-povey.co.uk/2010/07/16/facebooks-long-memory-hotel-california-still-in-place/</link>
		<comments>http://www.marcus-povey.co.uk/2010/07/16/facebooks-long-memory-hotel-california-still-in-place/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 09:00:50 +0000</pubDate>
		<dc:creator>Marcus Povey</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[bct]]></category>
		<category><![CDATA[bct10]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[privacy]]></category>

		<guid isPermaLink="false">http://www.marcus-povey.co.uk/?p=559</guid>
		<description><![CDATA[As I remarked in a previous tweet, people these days seem surprised when you say you&#8217;re not on The Book. So, as I came back after seeing a friend and yet another person asked me to add them as a friend on Facebook, I thought I might reconsider my previous position. So I signed up&#8230; [...]]]></description>
		<wfw:commentRss>http://www.marcus-povey.co.uk/2010/07/16/facebooks-long-memory-hotel-california-still-in-place/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What you need to know about Drupal views</title>
		<link>http://www.jpstacey.info/blog/2010/07/08/what-you-need-know-about-drupal-views</link>
		<comments>http://www.jpstacey.info/blog/2010/07/08/what-you-need-know-about-drupal-views#comments</comments>
		<pubDate>Thu, 08 Jul 2010 19:51:37 +0000</pubDate>
		<dc:creator>jp.stacey</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[custom]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[views]]></category>

		<guid isPermaLink="false">329 at http://www.jpstacey.info</guid>
		<description><![CDATA[<p>Every content management system needs its query builder—an application which creates customizable lists of content elements and present them in a similarly customisable way. Customization will be typically through an admin interface on the website, and the query builder can be as basic as a text box for SQL or as complex as a many-layered GUI across multiple webpages. <a href="http://drupal.org/">Drupal</a>, for its part, has <a href="http://drupal.org/project/views">Views</a>. D5 has Views 1, D6 has Views 2, and it looks like the forthcoming Drupal 7 will have Views 3.</p>
<p>However, as the criteria for list-building get more and more complex, there will come a point where custom code will produce the exited result far more quickly and efficiently than Views. The problem for the developer is: while simple lists are obviously candidates for Views; and riotously tangled layouts are obviously candidates for your own modules and SQL; how do you cope with the middle ground? How can you tell from the outset that a particular problem will land you in a Views-only cul-de-sac?</p>
<p>Well, I contend that the individual developer needn't worry, so long as he's clued up about developing <em>with</em>, not <em>outside</em>, Views. I reckon that the middle ground can <em>almost</em> always be bridged by Views augmented with custom code; unless you're completely convinced from the start that, say, the logic of what you want is not representable in a query builder, you can start with Views and tweak with customisations later.</p>
<p>But to be sure you can extricate yourself from any small to medium tiger traps that "Views+your spec" might drop you in, it's wise to know in advance the full range of tools at your disposal. Here are five of what I consider the most important tricks for building a complex Drupal view.</p>
<ol>
<li><strong>Views themeing&#160;</strong>&#160;Views has a very modular set of Drupal theme files. The markup and presentation of individual fields, rows of fields, and whole views of many rows can all be modified on a per-view, per-view-format or even cross-site basis. In a particular view's admin GUI, you can see an entry marked "Theme: Information." If you click on this, it will tell you what template files the view will try to use, and what files it's currently using (in bold.) You can copy these files across from the module directory to your theme and rescan to use them; you can even rename them to be specific to the current view or formatting options, and when you rescan the directories, Views should spot the new files.</li>
<li><strong>Addon modules</strong> &#160;There are a number of extension modules for views which will very quickly improve view presentation or data flexibility. At the one end is <a href="http://drupal.org/project/semanticviews">Semantic Views</a>, which allows you to present certain fields in your views with more semantic markup: titles can be <em>h2</em> elements; contact details can be in <em>address</em>&#160;elements, etc. At the other end of the workflow, close to the database, is the <a href="http://drupal.org/project/views_or">Views Or</a> plugin, which lets you swap the normal views filter AND logic ("all items must be published AND have type=blogpost") for a more inclusive OR logic ("all items must have type=blogpost OR be less than three weeks old"). If you're not sure whether there's an addon module for you, <a href="http://www.drupal.org.uk/uk-irc-channel-now-added-bot">ask on the #drupaluk IRC channel</a>.</li>
<li><strong>Views as a backend</strong> &#160;Several third-party modules use views as an adjunct: that means that while the module itself is doing something apparently clever with your content, it's secretly using a view to manage most of the hard work. If you want to maintain arbitrary admin-sortable lists of content, <a href="http://drupal.org/project/nodequeue">Nodequeue</a> provides a nice interface for doing so. But behind each nodequeue sits... a Drupal view, and a plugin which ties the nodequeue database table to your nodes to produce the required results. Tagadelic, a module which produces tag clouds for e.g. your recent blogposts, has over the years moved from a <a href="http://drupal.org/project/tagadelic">standalone module</a>&#160;(which still exists), to a <a href="http://drupal.org/project/tagadelic_views">Views style plugin</a>, so you can build the initial tags view yourself and activate Tagadelic styling and popular-tags filtering once you're done.</li>
<li><strong>Views hooks</strong> &#160;The workflow for views is like the workflow of Drupal itself in miniature: as such, it has its own set of views-specific hooks, including <em>hook_views_pre_render</em>&#160;and <em>hook_views_pre_build</em>. <a href="http://drupalcontrib.org/api/search/6/hook_views_">All the Views hooks are documented on drupalcontrib.org</a>. So, learn the <a href="http://www.angrydonuts.com/views-2-basic-page-view-flow">basic page-view flow</a>, from a blogpost by Mr Views himself, Earl Miles. Pick it apart. See what each bit does in the code. You should eventually be able to find the views hook you want in the code, and be able to modify the view object, its compiled SQL, the results returned, and even the eventual output, all in your own modules.</li>
<li><strong>Writing your own plugins</strong> &#160;A Views plugin is less complicated than you might fear. There's not a great deal of easy-to-find, easy-to-read documentation out there about Views plugins, but try not to let that put you off. A plugin consists basically of a module, a hook function (or two) and a PHP object: the rest is just detail and theming! While that sounds a bit glib, it has some merit: look at the plugins for such modules above as Semantic Views and Nodequeue, and see how they all relate back to an object in a .<em>inc</em> file and a template in a <em>.tpl.php </em>file. You can extend an existing plugin using standard PHP class syntax, and develop it piece by piece by overriding methods one at a time. Views plugins are incredibly powerful, more so than using configurable third-party modules or just interrupting the current view using a Views hook. They get your code right into the heart of a given view's workflow and let you do (almost) whatever you want.&#160;Remember to clear caches if you get stuck: you might even need to resort to a "TRUNCATE cache" at your MySQL command line if your changes don't seem to be having an effect.</li>
</ol>
<p>If you've started building your listing page with Views, but the spec has ended up getting more complicated, try each of the five solutions above in turn. When the problem at hand suddenly gets a whole lot more complicated, escalate your solution's complexity by moving another step down the list!</p>
<p>There's obviously a lot more to developing with Views than a single blogpost could ever really summarize without turning into an extended essay. But there's a lot more documentation out there—although of a pretty sprawling and hard-to-navigate sort—and the tips above should hopefully give you pointers both for where to start your extending of Views, and also what to google for when you get stuck. Have fun and good luck!</p>

&#60;!--



--&#62;
<div class="trackback-url">
http://www.jpstacey.info/trackback/329</div>]]></description>
		<wfw:commentRss>http://www.jpstacey.info/blog/2010/07/08/what-you-need-know-about-drupal-views/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OGN18 in under two weeks&#8217; time</title>
		<link>http://www.jpstacey.info/blog/2010/07/08/ogn18-under-two-weeks-time</link>
		<comments>http://www.jpstacey.info/blog/2010/07/08/ogn18-under-two-weeks-time#comments</comments>
		<pubDate>Thu, 08 Jul 2010 19:41:23 +0000</pubDate>
		<dc:creator>jp.stacey</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[culture]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[geeks]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[newspaperclub]]></category>
		<category><![CDATA[OGN]]></category>
		<category><![CDATA[Oxford]]></category>
		<category><![CDATA[oxfordgeeknight]]></category>
		<category><![CDATA[Oxfordshire]]></category>
		<category><![CDATA[print]]></category>
		<category><![CDATA[russelldavies]]></category>

		<guid isPermaLink="false">327 at http://www.jpstacey.info</guid>
		<description><![CDATA[<p>The <a href="http://oxford.geeknights.net/2010/jul-21st/">next Oxford Geek Night is on Wednesday 21 July</a>, in less than two weeks' time. I for one am <em>really </em>looking forward to it.</p>
<p>We managed out of sheer luck and cheek to bagsy a fantastic speaker for OGN18, the ever-<em>Interesting</em>&#160;<a href="http://russelldavies.typepad.com/">Russell Davies</a>. Russell was the organizer of the 2007 and 2008 <em><a href="http://www.interesting2007.com/">Interesting</a> </em>conferences, and is involved in lots of fantastic projects, including <a href="http://www.speechification.com/">Speechification</a> and <a href="http://www.newspaperclub.co.uk/">Newspaper Club</a>. He's also a writer for <a href="http://www.wired.co.uk/">Wired</a>, a speaker at many conferences including <a href="http://russelldavies.typepad.com/planning/2010/06/sharing.html">Lift 2010</a>, and what one might frivolously call a futorologist or pundit. He's going to talk about his experiences turning internets into print, and what he's learned from doing it as part of projects like the Newspaper Club.</p>
<p>Along with our keynote speaker we've got half a dozen of the absolute best of local microslot volunteers. There's talks on&#160;topics as far ranging as "designing backwards", linked&#160;data, graphing 19th-century social networks, genomics, CSS and&#160;Rotacoo's Spotify #fridaymix tape. A few new faces and a few established (and deservedly so) local faces. As always we'll be putting video up on the site afterwards, so there'll be a permanent record of our high-quality speakers.</p>
<p>Finally, we hope to have space for the Pitches - our sixty-second open mic slots that anyone can volunteer for, even on the night - and a book raffle. All told it should be a great excuse to saunter over to the Jericho Tavern in the July sun / sudden downpour (delete as applicable.) Hope to see all the other Oxford geeks there.</p>

&#60;!--



--&#62;
<div class="trackback-url">
http://www.jpstacey.info/trackback/327</div>]]></description>
		<wfw:commentRss>http://www.jpstacey.info/blog/2010/07/08/ogn18-under-two-weeks-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blowing up markets</title>
		<link>http://benwerd.com/2010/07/blowing-up-markets/</link>
		<comments>http://benwerd.com/2010/07/blowing-up-markets/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 17:28:35 +0000</pubDate>
		<dc:creator>Ben Werdmuller</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[airbnb]]></category>
		<category><![CDATA[empowerment]]></category>
		<category><![CDATA[freedom]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[new york]]></category>
		<category><![CDATA[Politics]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://benwerd.com/2010/07/blowing-up-markets/</guid>
		<description><![CDATA[Banning sublets
Last week, the State of New York passed a bill that bans short-term rentals: specifically, no homeowner or renter may sublet their home for less than a month. The target is sites like AirBNB, an up and coming website that allows travelers to eschew pricey hotels – and their accompanying hotel room occupancy tax [...]]]></description>
		<wfw:commentRss>http://benwerd.com/2010/07/blowing-up-markets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The product management cycle</title>
		<link>http://benwerd.com/2010/06/the-product-management-cycle/</link>
		<comments>http://benwerd.com/2010/06/the-product-management-cycle/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 10:11:13 +0000</pubDate>
		<dc:creator>Ben Werdmuller</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[bad management]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[this team sucks]]></category>

		<guid isPermaLink="false">http://benwerd.com/2010/06/the-product-management-cycle/</guid>
		<description><![CDATA[Monday: “The plan is A! We&#8217;ll market it at A!”
Tuesday: “Actually, I was thinking B. A is stupid. Who would want to do that?”
Wednesday: “Goddamnit, we need to be working towards C. Why does no-one see that?”
Thursday: “Maybe A was right &#8230;”
Friday: “This team sucks.”
Hint: pick a direction and run. And make sure – just [...]]]></description>
		<wfw:commentRss>http://benwerd.com/2010/06/the-product-management-cycle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Barcamp Oxford 2010</title>
		<link>http://www.marcus-povey.co.uk/2010/06/27/barcamp-oxford-2010/</link>
		<comments>http://www.marcus-povey.co.uk/2010/06/27/barcamp-oxford-2010/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 17:48:05 +0000</pubDate>
		<dc:creator>Marcus Povey</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[barcamp]]></category>
		<category><![CDATA[Barcamp Oxford]]></category>
		<category><![CDATA[geeks]]></category>
		<category><![CDATA[Oxford]]></category>

		<guid isPermaLink="false">http://www.marcus-povey.co.uk/?p=555</guid>
		<description><![CDATA[This weekend was Barcamp Oxford, and suffice it to say it was utterly fantastic. While a delicious ham cooks, I just thought I&#8217;d jot down some notes. The day for me started early on Saturday with a walk into town (Oxford&#8217;s buses being resoundingly useless), still it was a lovely sunny day and I had some [...]]]></description>
		<wfw:commentRss>http://www.marcus-povey.co.uk/2010/06/27/barcamp-oxford-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Write real-time web applications with XMPP, PHP, and JavaScript</title>
		<link>http://benwerd.com/2010/06/write-real-time-web-applications-with-xmpp-php-and-javascript/</link>
		<comments>http://benwerd.com/2010/06/write-real-time-web-applications-with-xmpp-php-and-javascript/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 14:21:00 +0000</pubDate>
		<dc:creator>Ben Werdmuller</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[ibm]]></category>
		<category><![CDATA[ibm developerworks]]></category>
		<category><![CDATA[real-time web]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[xmpp]]></category>

		<guid isPermaLink="false">http://benwerd.com/2010/06/write-real-time-web-applications-with-xmpp-php-and-javascript/</guid>
		<description><![CDATA[I’ve written a tutorial for writing XMPP-based web applications over at IBM DeveloperWorks:
Real-time web applications are networked applications, with web-based user interfaces, that display Internet information as soon as it&#8217;s published. Examples include social news aggregators and monitoring tools that continually update themselves with data from an external source. In this tutorial, you will create [...]]]></description>
		<wfw:commentRss>http://benwerd.com/2010/06/write-real-time-web-applications-with-xmpp-php-and-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An introduction to Activity Streams</title>
		<link>http://benwerd.com/2010/06/an-introduction-to-activity-streams/</link>
		<comments>http://benwerd.com/2010/06/an-introduction-to-activity-streams/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 04:12:59 +0000</pubDate>
		<dc:creator>Ben Werdmuller</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[writing]]></category>
		<category><![CDATA[activity streams]]></category>
		<category><![CDATA[ibm]]></category>
		<category><![CDATA[ibm developerworks]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://benwerd.com/2010/06/an-introduction-to-activity-streams/</guid>
		<description><![CDATA[I’ve written an introduction to the Activity Streams standard for IBM DeveloperWorks:
Enter Activity Streams, an evolving standard that extends Atom for expressing social objects. Although it is a young standard, Activity Streams is fast becoming the de facto method for syndicating activity between web applications. For example, MySpace, Facebook, and TypePad all now produce Activity [...]]]></description>
		<wfw:commentRss>http://benwerd.com/2010/06/an-introduction-to-activity-streams/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to set up ProFTP, MySQL and Virtual Users</title>
		<link>http://www.marcus-povey.co.uk/2010/06/15/proftp-mysql-virtual-users-howto/</link>
		<comments>http://www.marcus-povey.co.uk/2010/06/15/proftp-mysql-virtual-users-howto/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 10:59:45 +0000</pubDate>
		<dc:creator>Marcus Povey</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[proftp]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[virtual users]]></category>

		<guid isPermaLink="false">http://www.marcus-povey.co.uk/?p=551</guid>
		<description><![CDATA[ProFTP is a configurable FTP server available on most *nix platforms. I recently had the need to get this working and authenticating off a PHP maintained MySQL backend, and this post is primarily to aid my own memory should I ever have to do it again. Installing ProFTP In order to use MySQL as a [...]]]></description>
		<wfw:commentRss>http://www.marcus-povey.co.uk/2010/06/15/proftp-mysql-virtual-users-howto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Feeds objects within feeds objects</title>
		<link>http://www.jpstacey.info/blog/2010/05/25/feeds-objects-within-feeds-objects</link>
		<comments>http://www.jpstacey.info/blog/2010/05/25/feeds-objects-within-feeds-objects#comments</comments>
		<pubDate>Wed, 09 Jun 2010 10:35:05 +0000</pubDate>
		<dc:creator>jp.stacey</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[atom]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[feeds]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[layers]]></category>
		<category><![CDATA[module]]></category>
		<category><![CDATA[object]]></category>
		<category><![CDATA[objectoriented]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rss]]></category>

		<guid isPermaLink="false">326 at http://www.jpstacey.info</guid>
		<description><![CDATA[<p>We've been doing a lot of work with the Drupal <a href="http://drupal.org/project/feeds">Feeds module</a> recently. The frontend is nice enough, although the sub-navigation was rendered almost illegible by our theme's CSS. The <a href="http://drupal.org/node/622696">online tutorials need work</a>,&#160;and the admin navigation needs to be made a bit more robust to layout changes; but then it will be the <em>de facto</em> way for people to consume feeds on their Drupal sites.</p>
<p>The most recent work we've been doing involved custom integration with RSS feeds arriving effectively as PHP string variables containing all the XML. This is different from either a file on disk or a remote URL: in fact, we had a Python program creating the RSS file from us via a shell (which in turn, horribly, was hitting a remote Oracle database using <a href="http://cx-oracle.sourceforge.net/">cx_Oracle</a>). Feeds was definitely up to the job in terms of power. In fact, it was quite a toolkit of useful functionality, which is Drupal code for "incredibly powerful but almost incomprehensible.</p>
<p>It's not that the <a href="http://drupal.org/node/622700">developer documentation for Feeds</a> isn't decent: it's pretty good. But it's limited in scope: it tells you roughly how to expose your own Feeds-like objects to the admin interface, but not really how all those objects interact. Most importantly, we wanted to know what happened on a cron run: this is the bedrock of how Feeds works on your site, after all.</p>
<p>I poked around a bit and this is what I discovered:</p>
<p>&#160;</p>
<p style="text-align: center"><a href="http://www.jpstacey.info/sites/files/jps/images/feeds_schedule.gif"><img src="http://www.jpstacey.info/sites/files/jps/images/feeds_schedule.preview.gif" alt="Workflow of a Feeds cron run" width="640" height="425" /></a></p>
<p>Here's a summary of the above diagram to give you some idea of what's going on.</p>
<p>&#160;</p>
<ol>
<li>Drupal's cron creates a FeedsScheduler object and passes it a "job", which is all the configuration for a feed call, including any configuration that was attached originally to the particular node which defines the Feed. The scheduler creates a FeedsImporter and passes it the job; the importer then creates a FeedsSource and embeds itself in it as a parent. In each case, the method ::work() is called to create the child/helper object.</li>
<li>The Source object is what now runs the three phases of feed consumption, via its parent Importer. The Source asks the Importer for the relevant Fetcher, Parser and Processor objects: for example, the HTTP Fetcher, the RSS Parser and the Node Processor objects are strung together to turn an RSS feed at a HTTP URL into a set of nodes, one per entry. Each of these have a relevant, verb-like named method: so ::fetch() for the Fetcher etc. The common currency is a FeedsBatch object, which gets passed around and needs to have methods that make it feel like a batch of feed objects.</li>
<li>After the three phases have run, the Source calls hook_feeds_after_import() to do any tidying, then quits to the Importer, which quits to the Scheduler, which then runs its ::finished() method on the job, and the cron run for this particular feed is done.</li>
</ol>
<p>&#160;</p>
<p>When you build a new plugin, you need to implement hook_feeds_plugins() in a module and reference a class file: this class will be selectable in the admin interface for one of the three consumption phases, depending on what class it's ultimately based on. You should therefore extend existing classes rather than start from scratch: there are abstract PHP classes in the feeds module directories, which give you skeleton "interfaces" which you can then flesh out with relevant functions. But what's better is to extend e.g. the HTTP fetcher to fetch from a command on disk (which is what we did) or, say, extend the CSV parser to interrogate JSON.</p>
<p>Class hierarchies mean you don't have to spend a lot of time reinventing the wheel or hacking existing modules until they become unupgradeable; instead you can take existing classes and tweak them through inheritance, experimenting as you develop.</p>

&#60;!--



--&#62;
<div class="trackback-url">
http://www.jpstacey.info/trackback/326</div>]]></description>
		<wfw:commentRss>http://www.jpstacey.info/blog/2010/05/25/feeds-objects-within-feeds-objects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
