<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5218684791452219943</id><updated>2024-10-25T03:58:26.216+01:00</updated><category term="field api"/><category term="chaos tools"/><category term="field extract"/><category term="field values"/><category term="form"/><category term="debug"/><category term="entities"/><category term="file"/><category term="views"/><category term="ctools"/><category term="form wizard"/><category term="query"/><category term="search"/><category term="taxonomy"/><category term="term"/><category term="vocabulary"/><category term="OOP"/><category term="PHP"/><category term="ajax"/><category term="blocks"/><category term="controls"/><category term="css"/><category term="date"/><category term="date popup"/><category term="display suite"/><category term="drupal_alter"/><category term="field complete"/><category term="field_get_items"/><category term="file_download"/><category term="hook_hook_info"/><category term="hooks"/><category term="node"/><category term="private"/><category term="property"/><category term="seven"/><category term="stream wrapper"/><category term="views object"/><category term="OG"/><category term="admin"/><category term="archive stream"/><category term="backtrace"/><category term="bind"/><category term="bold"/><category term="bundles"/><category term="callbacks"/><category term="carousel"/><category term="check_plain"/><category term="content"/><category term="content complete"/><category term="context"/><category term="contextual links"/><category term="custom events"/><category term="custom text"/><category term="customize"/><category term="debug_backtrace"/><category term="debugging"/><category term="deeplink"/><category term="devel"/><category term="dpm"/><category term="drupal_get_destination"/><category term="drupal_menu_alter"/><category term="drupal_static"/><category term="drupal_write_record"/><category term="drush"/><category term="eclipse"/><category term="encryption"/><category term="entity reference views widget"/><category term="errors"/><category term="events"/><category term="export ui"/><category term="facet api"/><category term="facetapi"/><category term="facets"/><category term="features"/><category term="feeds"/><category term="field encrypt"/><category term="field_attach_load"/><category term="field_delete_field"/><category term="fieldset"/><category term="file headers"/><category term="file upload"/><category term="filter"/><category term="find"/><category term="footprint"/><category term="form api"/><category term="form_alter"/><category term="git"/><category term="git+ssh"/><category term="hook_entity_prepare_view"/><category term="hook_entity_view_alter"/><category term="hook_file_download"/><category term="hook_menu"/><category term="hook_permission"/><category term="hook_query_alter"/><category term="hook_theme"/><category term="jquery"/><category term="links"/><category term="listener"/><category term="machine name"/><category term="md5. debugging"/><category term="menus"/><category term="multistep"/><category term="mysql"/><category term="node:nid"/><category term="notices"/><category term="object"/><category term="observer"/><category term="og_context"/><category term="organic groups"/><category term="profile2"/><category term="protected"/><category term="publish"/><category term="queue"/><category term="queue api"/><category term="rss"/><category term="scraping"/><category term="search_api"/><category term="self-node"/><category term="subscribe"/><category term="subtheme"/><category term="taxonomy_get_tree"/><category term="text"/><category term="themes"/><category term="trigger"/><category term="underline"/><category term="user"/><category term="validation"/><category term="vertical tabs"/><category term="view_mode"/><category term="watchdog"/><category term="wiki"/><title type='text'>Drupal 7-ish</title><subtitle type='html'>Adventures in Drupal 7</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>47</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-1330478957377896920</id><published>2014-03-05T12:05:00.002+00:00</published><updated>2014-03-05T12:05:56.626+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="debug"/><category scheme="http://www.blogger.com/atom/ns#" term="debugging"/><category scheme="http://www.blogger.com/atom/ns#" term="dpm"/><category scheme="http://www.blogger.com/atom/ns#" term="object"/><category scheme="http://www.blogger.com/atom/ns#" term="private"/><category scheme="http://www.blogger.com/atom/ns#" term="property"/><category scheme="http://www.blogger.com/atom/ns#" term="protected"/><category scheme="http://www.blogger.com/atom/ns#" term="views object"/><title type='text'>Debugging quickie: Objects</title><summary type="text">How do you display the contents of an object that has private and protected properties - which means dpm($object) doesn&#39;t give you what you want?

You could do this:

dpm(&#39;&amp;lt;pre&amp;gt;&#39; . print_r($object, TRUE) . &#39;&amp;lt;/pre&amp;gt;&#39;);

But that&#39;s a lot to type and you get a huge horrible list (particularly if it&#39;s a View object).

Try this instead:

dpm((array) $object);

Works a treat.

And while </summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/1330478957377896920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/1330478957377896920' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/1330478957377896920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/1330478957377896920'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2014/03/debugging-quickie-objects.html' title='Debugging quickie: Objects'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-4884952800188092440</id><published>2013-09-23T08:10:00.000+01:00</published><updated>2013-09-23T08:19:57.657+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="debug"/><category scheme="http://www.blogger.com/atom/ns#" term="field complete"/><category scheme="http://www.blogger.com/atom/ns#" term="profile2"/><title type='text'>Field Complete and Profile2</title><summary type="text">So I thought I&#39;d promote the latest dev version of my Field Complete module to a release candidate yesterday. There were two reasons for this: (a) it&#39;s pretty solid, and (b) people are more likely to use it if it&#39;s out of dev.

It wasn&#39;t a mistake. Within a couple of hours I had a new bug report: Doesn&#39;t work with Profile2.

Which surprised me a lot, why on earth would it not work with a popular </summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/4884952800188092440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/4884952800188092440' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/4884952800188092440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/4884952800188092440'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2013/09/field-complete-and-profile2.html' title='Field Complete and Profile2'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-4550352885973440267</id><published>2013-08-09T16:45:00.000+01:00</published><updated>2013-08-10T18:08:01.537+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="content complete"/><category scheme="http://www.blogger.com/atom/ns#" term="field api"/><category scheme="http://www.blogger.com/atom/ns#" term="field complete"/><title type='text'>The History of the Field Complete module</title><summary type="text">A couple of months ago I was contracted to work on a project for a large UK organisation that provides accreditation for university, and other, further education courses of a certain type. The site had already been mostly designed and built so I had no say in its overall structure. Suffice to say: I wouldn&#39;t have done it like that.

Still, we play the hand we&#39;re dealt.

The nature of the project </summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/4550352885973440267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/4550352885973440267' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/4550352885973440267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/4550352885973440267'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2013/08/the-history-of-field-complete-module.html' title='The History of the Field Complete module'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-4801042756131430252</id><published>2013-07-11T09:21:00.000+01:00</published><updated>2013-07-11T09:21:28.971+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chaos tools"/><category scheme="http://www.blogger.com/atom/ns#" term="ctools"/><category scheme="http://www.blogger.com/atom/ns#" term="drupal_alter"/><category scheme="http://www.blogger.com/atom/ns#" term="export ui"/><category scheme="http://www.blogger.com/atom/ns#" term="features"/><category scheme="http://www.blogger.com/atom/ns#" term="query"/><category scheme="http://www.blogger.com/atom/ns#" term="taxonomy"/><category scheme="http://www.blogger.com/atom/ns#" term="term"/><category scheme="http://www.blogger.com/atom/ns#" term="vocabulary"/><title type='text'>Export UI, Features and Taxonomy</title><summary type="text">Here&#39;s a quicky. Let&#39;s say you&#39;ve created some exportable content (using CTools) which references a term ID and you have to go from your dev site to the production site. And your taxonomy is also being exported using UUID.

Somehow you have to tie them together because sure as eggs is eggs the term IDs created on the production site are not going to be the same as the local ones. That&#39;s why you </summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/4801042756131430252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/4801042756131430252' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/4801042756131430252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/4801042756131430252'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2013/07/export-ui-features-and-taxonomy.html' title='Export UI, Features and Taxonomy'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-607226595807006546</id><published>2013-07-05T13:07:00.001+01:00</published><updated>2013-07-05T13:09:21.453+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ajax"/><category scheme="http://www.blogger.com/atom/ns#" term="entities"/><category scheme="http://www.blogger.com/atom/ns#" term="entity reference views widget"/><category scheme="http://www.blogger.com/atom/ns#" term="OG"/><category scheme="http://www.blogger.com/atom/ns#" term="og_context"/><category scheme="http://www.blogger.com/atom/ns#" term="organic groups"/><title type='text'>Entity Reference Views Widget plus Organic Groups Nightmare</title><summary type="text">Let&#39;s suppose you are using the&amp;nbsp;Entity Reference Views Widget to display items to be included in an Entity Reference field. This is actually quite a cool module while being a little awkward to use - essentially it gives you a views listing of candidate entities to add, with an AJAX-driven checkbox: click the box and the entity gets moved to the list on the left to display what&#39;s been chosen.</summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/607226595807006546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/607226595807006546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/607226595807006546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/607226595807006546'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2013/07/entity-reference-views-widget-plus.html' title='Entity Reference Views Widget plus Organic Groups Nightmare'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-7016945677230382793</id><published>2013-04-13T16:50:00.000+01:00</published><updated>2013-04-13T16:50:31.450+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="feeds"/><category scheme="http://www.blogger.com/atom/ns#" term="hooks"/><category scheme="http://www.blogger.com/atom/ns#" term="queue"/><category scheme="http://www.blogger.com/atom/ns#" term="queue api"/><category scheme="http://www.blogger.com/atom/ns#" term="rss"/><category scheme="http://www.blogger.com/atom/ns#" term="scraping"/><category scheme="http://www.blogger.com/atom/ns#" term="self-node"/><title type='text'>Feed Sources and Self Nodes and Bears (oh my)</title><summary type="text">Seems it&#39;s been nearly a year since I last posted something. I can only say that I have been tied up with Drupal 6 projects and uninspiring Drupal 7 ones. However something interesting came up with a project of my own over the last day or so. So here we are:

The project in question involves creating a meta-search site on a specific subject with data gathered from various sites. Some of those </summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/7016945677230382793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/7016945677230382793' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/7016945677230382793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/7016945677230382793'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2013/04/feed-sources-and-self-nodes-and-bears.html' title='Feed Sources and Self Nodes and Bears (oh my)'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-6328692069403335939</id><published>2012-07-25T13:46:00.003+01:00</published><updated>2012-07-25T13:47:04.967+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ajax"/><category scheme="http://www.blogger.com/atom/ns#" term="callbacks"/><category scheme="http://www.blogger.com/atom/ns#" term="form"/><category scheme="http://www.blogger.com/atom/ns#" term="form api"/><title type='text'>Form API and AJAX callbacks</title><summary type="text">
Here&#39;s a piece of information that&#39;s well hidden.

If you&#39;re using Drupal&#39;s AJAX functionality with forms - but you don&#39;t actually want to change the form but instead do other stuff on the page, you may run into trouble because there&#39;s something that&#39;s not clearly explained about the AJAX callback function in your PHP code.

You know you can add this:

$form[&#39;tickbox&#39;] = array(
&amp;nbsp; &#39;#type&#39; =&amp;</summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/6328692069403335939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/6328692069403335939' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/6328692069403335939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/6328692069403335939'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2012/07/form-api-and-ajax-callbacks.html' title='Form API and AJAX callbacks'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-8455355099350394102</id><published>2012-07-22T15:31:00.005+01:00</published><updated>2012-07-22T17:12:11.716+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bind"/><category scheme="http://www.blogger.com/atom/ns#" term="carousel"/><category scheme="http://www.blogger.com/atom/ns#" term="custom events"/><category scheme="http://www.blogger.com/atom/ns#" term="events"/><category scheme="http://www.blogger.com/atom/ns#" term="jquery"/><category scheme="http://www.blogger.com/atom/ns#" term="listener"/><category scheme="http://www.blogger.com/atom/ns#" term="observer"/><category scheme="http://www.blogger.com/atom/ns#" term="publish"/><category scheme="http://www.blogger.com/atom/ns#" term="subscribe"/><category scheme="http://www.blogger.com/atom/ns#" term="trigger"/><title type='text'>jQuery publish/subscribe custom events</title><summary type="text">There seems to be a stuck idea with respect to jQuery which demands binding custom events and their functions to a specific DOM object (like &#39;document&#39; or &#39;body&#39;) and triggering the event on that object which then tells whatever objects might want to know about the event using another event.

There&#39;s an example of this here:&amp;nbsp;http://stackoverflow.com/questions/399867/custom-events-in-jquery&amp;</summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/8455355099350394102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/8455355099350394102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/8455355099350394102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/8455355099350394102'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2012/07/jquery-publishsubscribe-custom-events.html' title='jQuery publish/subscribe custom events'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-7653385634001226508</id><published>2012-07-09T16:46:00.000+01:00</published><updated>2012-07-09T21:53:51.085+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="display suite"/><category scheme="http://www.blogger.com/atom/ns#" term="facet api"/><category scheme="http://www.blogger.com/atom/ns#" term="facetapi"/><category scheme="http://www.blogger.com/atom/ns#" term="facets"/><category scheme="http://www.blogger.com/atom/ns#" term="search"/><category scheme="http://www.blogger.com/atom/ns#" term="search_api"/><category scheme="http://www.blogger.com/atom/ns#" term="views"/><title type='text'>Search API, Facet API and Display Suite</title><summary type="text">Just spent most of the day tracking down a nasty little issue involving these three modules.

Let&#39;s face it Search API with Facet API (and all the Search API support modules) are brilliant, the core Search is very difficult to customise and you usually have to end up with nasty core hacks if you want to do anything clever.

Search API on the other hand is lovely, and Facet API is just great with </summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/7653385634001226508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/7653385634001226508' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/7653385634001226508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/7653385634001226508'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2012/07/search-api-facet-api-and-display-suite.html' title='Search API, Facet API and Display Suite'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-4534912466045937596</id><published>2012-07-04T17:36:00.000+01:00</published><updated>2012-07-04T17:36:47.148+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bundles"/><category scheme="http://www.blogger.com/atom/ns#" term="display suite"/><category scheme="http://www.blogger.com/atom/ns#" term="entities"/><category scheme="http://www.blogger.com/atom/ns#" term="hook_entity_prepare_view"/><category scheme="http://www.blogger.com/atom/ns#" term="hook_entity_view_alter"/><category scheme="http://www.blogger.com/atom/ns#" term="taxonomy"/><category scheme="http://www.blogger.com/atom/ns#" term="term"/><category scheme="http://www.blogger.com/atom/ns#" term="view_mode"/><title type='text'>Changing view_mode mid-stream</title><summary type="text">In my current contract I have to display a hierarchy of complex taxonomy terms - each one as a page with relevant data hanging off it. There are three levels to the taxonomy: Level 1 displays one set of data and links, Level 2 is never displayed on its own (which is something I&#39;ll have to take care of) and Level 3 has a different page structure again.

Different page layouts means Display Suite (</summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/4534912466045937596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/4534912466045937596' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/4534912466045937596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/4534912466045937596'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2012/07/changing-viewmode-mid-stream.html' title='Changing view_mode mid-stream'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-6633284062340476077</id><published>2012-05-29T22:35:00.000+01:00</published><updated>2012-05-29T22:35:06.542+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="controls"/><category scheme="http://www.blogger.com/atom/ns#" term="ctools"/><category scheme="http://www.blogger.com/atom/ns#" term="deeplink"/><category scheme="http://www.blogger.com/atom/ns#" term="field extract"/><title type='text'>Then three come all at once</title><summary type="text">I have been doing some work on the field_extract module, a few minor fix-ups most of which wouldn&#39;t be noticed and added support for the entityreference field. You can find this module here: http://drupal.org/project/field_extract

Someone I worked with recently has put out my &quot;deeplink&quot; module which allows otherwise hidden content to be made available on a specific trackable URL. My version was </summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/6633284062340476077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/6633284062340476077' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/6633284062340476077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/6633284062340476077'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2012/05/then-three-come-all-at-once.html' title='Then three come all at once'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-4346859687913030307</id><published>2012-04-12T10:03:00.001+01:00</published><updated>2012-04-12T10:03:40.697+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="content"/><category scheme="http://www.blogger.com/atom/ns#" term="entities"/><category scheme="http://www.blogger.com/atom/ns#" term="field api"/><category scheme="http://www.blogger.com/atom/ns#" term="node"/><category scheme="http://www.blogger.com/atom/ns#" term="OOP"/><title type='text'>Entities vs Nodes</title><summary type="text">For the last six months I&#39;ve been working on a Drupal 6 site professionally, but developing a couple of personal Drupal 7 sites. However I haven&#39;t been going into D7 in any great detail - except for developing entities.

Now I&#39;ve moved contracts and I&#39;m developing a new Drupal 7 site to replace an older non-Drupal site with lots of additional facilities. And the Drupal implementation is entirely </summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/4346859687913030307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/4346859687913030307' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/4346859687913030307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/4346859687913030307'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2012/04/entities-vs-nodes.html' title='Entities vs Nodes'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-5744134129443647391</id><published>2012-02-02T19:27:00.000+00:00</published><updated>2012-02-02T19:27:07.384+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="errors"/><category scheme="http://www.blogger.com/atom/ns#" term="notices"/><category scheme="http://www.blogger.com/atom/ns#" term="watchdog"/><title type='text'>Cleaning the watchdog</title><summary type="text">
As a Drupal developer - do you do this?

Do you go through watchdog, find every error and fix it? You probably should - and here&#39;s why:

If there&#39;s even just a Notice, it means something&#39;s not right - checking it out might reveal something far more important.

Every error that goes to Watchdog is consuming valuable processing time. I had an instance quite recently where an error in a third party</summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/5744134129443647391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/5744134129443647391' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/5744134129443647391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/5744134129443647391'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2012/02/cleaning-watchdog.html' title='Cleaning the watchdog'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-3093030953556241905</id><published>2012-01-30T14:51:00.001+00:00</published><updated>2012-01-30T14:51:50.355+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="backtrace"/><category scheme="http://www.blogger.com/atom/ns#" term="check_plain"/><category scheme="http://www.blogger.com/atom/ns#" term="debug"/><category scheme="http://www.blogger.com/atom/ns#" term="debug_backtrace"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><category scheme="http://www.blogger.com/atom/ns#" term="views"/><title type='text'>Little debugging aid</title><summary type="text">I had been having a real problem tracking down a PHP error in Drupal which was passing an array to htmlspecialchars() in check_plain() instead of a string. I needed to use debug_backtrace() but the issue was related to Views which meant that the arguments being passed at higher levels were catastrophically huge.

It was a real problem, using krumo just resulted in out-of-memory errors. And the </summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/3093030953556241905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/3093030953556241905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/3093030953556241905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/3093030953556241905'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2012/01/little-debugging-aid.html' title='Little debugging aid'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-6727281745513568314</id><published>2012-01-26T11:46:00.000+00:00</published><updated>2012-01-26T11:46:43.033+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="find"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><category scheme="http://www.blogger.com/atom/ns#" term="property"/><category scheme="http://www.blogger.com/atom/ns#" term="search"/><category scheme="http://www.blogger.com/atom/ns#" term="views"/><category scheme="http://www.blogger.com/atom/ns#" term="views object"/><title type='text'>Where the **** is it?</title><summary type="text">You know how it is? You have this complex and massive PHP structure with recursive elements and somewhere in all that is a value you&#39;re looking for. Views object&amp;nbsp;I&#39;m looking at you!

Here&#39;s a PHP routine, which is not Drupal specific, that will dig down into an object to find the property or array item you&#39;re looking for - and it avoids recursion by keeping a list of structures it&#39;s already </summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/6727281745513568314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/6727281745513568314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/6727281745513568314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/6727281745513568314'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2012/01/where-is-it.html' title='Where the **** is it?'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-147171252477339753</id><published>2012-01-25T23:35:00.000+00:00</published><updated>2012-01-25T23:35:16.496+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bold"/><category scheme="http://www.blogger.com/atom/ns#" term="filter"/><category scheme="http://www.blogger.com/atom/ns#" term="text"/><category scheme="http://www.blogger.com/atom/ns#" term="underline"/><category scheme="http://www.blogger.com/atom/ns#" term="wiki"/><title type='text'>Wiki filter for Drupal</title><summary type="text">
One of the known problems with Drupal is no Wiki module. It is possible to put together a Wiki using various resources but the biggest stumbling block is the text filter.

There have been attempts and some successes. The current perceived wisdom is to use FlexiFilter - sorry but it&#39;s just too cumbersome. In fact nightmarish.

And I needed a Wiki filter for a project so this evening I spent 5 </summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/147171252477339753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/147171252477339753' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/147171252477339753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/147171252477339753'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2012/01/wiki-filter-for-drupal.html' title='Wiki filter for Drupal'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-8199142559106550994</id><published>2012-01-21T18:42:00.000+00:00</published><updated>2012-01-21T18:42:16.852+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="field extract"/><category scheme="http://www.blogger.com/atom/ns#" term="field values"/><category scheme="http://www.blogger.com/atom/ns#" term="git"/><category scheme="http://www.blogger.com/atom/ns#" term="git+ssh"/><title type='text'>Stable Field Value Extraction module released</title><summary type="text">Okay, after weeks of nobody complaining about any aspect of my field_extract module I have finally got around to issuing the code as the full stable version. Hurray.

Now because I&#39;m lazy I use Eclipse for development purposes - I know, I know, how can I be a proper developer if I don&#39;t use Linux and Vim? Well, I don&#39;t. I was using command line before you were born (unless you were born before </summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/8199142559106550994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/8199142559106550994' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/8199142559106550994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/8199142559106550994'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2012/01/stable-field-value-extraction-module.html' title='Stable Field Value Extraction module released'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-2362125956549407883</id><published>2011-12-15T09:28:00.002+00:00</published><updated>2011-12-15T09:30:52.551+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="field extract"/><category scheme="http://www.blogger.com/atom/ns#" term="md5. debugging"/><title type='text'>MD5s as IDs</title><summary type="text">While there is the chance of duplication it can be handy to use MD5s for creating a &quot;unique&quot; ID for strings. I had this in my current project but I&#39;ve done it before and there is a potential problem which is more likely than duplicate IDs.

There is a chance that you&#39;ll get an MD5 that begins with a zero and, potentially even worse, one that begins with a zero and is all decimal numeric (does not</summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/2362125956549407883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/2362125956549407883' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/2362125956549407883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/2362125956549407883'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2011/12/md5s-as-ids.html' title='MD5s as IDs'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-3346205091552167793</id><published>2011-11-16T19:34:00.001+00:00</published><updated>2011-11-16T19:43:05.158+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chaos tools"/><category scheme="http://www.blogger.com/atom/ns#" term="controls"/><category scheme="http://www.blogger.com/atom/ns#" term="ctools"/><category scheme="http://www.blogger.com/atom/ns#" term="field extract"/><title type='text'>Ssssh</title><summary type="text">I&#39;ve not posted recently because my current job involves Drupal 6 so I&#39;ve done virtually no D7 work for a while. However I do have a new set of modules for developers coming soon which will be in both D6 and D7 varieties.

Essentially it&#39;s a system that does a similar job to CTools plugins but is lightweight and standalone. It&#39;s very good for de-coupling dependent custom modules, essentially very</summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/3346205091552167793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/3346205091552167793' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/3346205091552167793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/3346205091552167793'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2011/11/ssssh.html' title='Ssssh'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-1307331164409966180</id><published>2011-09-26T14:38:00.001+01:00</published><updated>2011-09-26T14:38:09.101+01:00</updated><title type='text'>Automatic file download</title><summary type="text">I have a personal project I&#39;m working on which requires an automatic download link. You know the sort of thing - like you get on SourceForge: &quot;Your file will download in x seconds&quot;. And then the file download dialog pops up.

All the solutions for this are JavaScript - and if you want a countdown then JS is the way to go.&amp;nbsp;But I didn&#39;t want JavaScript.

The basic part of the trick isn&#39;t </summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/1307331164409966180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/1307331164409966180' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/1307331164409966180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/1307331164409966180'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2011/09/automatic-file-download.html' title='Automatic file download'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-5562934145635952142</id><published>2011-09-11T12:56:00.000+01:00</published><updated>2013-04-13T16:53:31.906+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="drush"/><category scheme="http://www.blogger.com/atom/ns#" term="entities"/><category scheme="http://www.blogger.com/atom/ns#" term="field api"/><category scheme="http://www.blogger.com/atom/ns#" term="field extract"/><category scheme="http://www.blogger.com/atom/ns#" term="field values"/><category scheme="http://www.blogger.com/atom/ns#" term="field_get_items"/><category scheme="http://www.blogger.com/atom/ns#" term="file"/><category scheme="http://www.blogger.com/atom/ns#" term="node"/><category scheme="http://www.blogger.com/atom/ns#" term="term"/><category scheme="http://www.blogger.com/atom/ns#" term="user"/><category scheme="http://www.blogger.com/atom/ns#" term="vocabulary"/><title type='text'>field_extract module in beta</title><summary type="text">EDIT: Now out of beta. Fully implemented.

EDIT: You can now get the module from&amp;nbsp;http://drupal.org/project/field_extract&amp;nbsp;and it works properly with Drush.

My incredibly useful field_extract module is now available on drupal.org. I am slightly embarrassed because something went wrong in the project creation process so the actual URL is:

http://drupal.org/project/1158878

And when you </summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/5562934145635952142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/5562934145635952142' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/5562934145635952142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/5562934145635952142'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2011/09/fieldextract-module-in-beta.html' title='field_extract module in beta'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-6262980663935209278</id><published>2011-09-07T09:16:00.000+01:00</published><updated>2011-09-07T09:16:43.346+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="footprint"/><category scheme="http://www.blogger.com/atom/ns#" term="hook_hook_info"/><category scheme="http://www.blogger.com/atom/ns#" term="hook_menu"/><category scheme="http://www.blogger.com/atom/ns#" term="hook_permission"/><category scheme="http://www.blogger.com/atom/ns#" term="hook_theme"/><category scheme="http://www.blogger.com/atom/ns#" term="hooks"/><title type='text'>Reducing the footprint</title><summary type="text">Sorry I haven&#39;t blogged in a while, I have been working very hard on commercial D7 sites in my day job but haven&#39;t really come across anything spectacularly D7 I wanted to talk about.

So here&#39;s something unspectacular but quite important, and applies almost as much to D6 as D7.

Every module eats memory. Every x.module file (for enabled modules) gets loaded for every access (well, let&#39;s ignore </summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/6262980663935209278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/6262980663935209278' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/6262980663935209278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/6262980663935209278'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2011/09/reducing-footprint.html' title='Reducing the footprint'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-1362448213599989076</id><published>2011-06-12T09:50:00.002+01:00</published><updated>2011-06-17T11:06:24.196+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="field_attach_load"/><category scheme="http://www.blogger.com/atom/ns#" term="machine name"/><category scheme="http://www.blogger.com/atom/ns#" term="taxonomy"/><category scheme="http://www.blogger.com/atom/ns#" term="taxonomy_get_tree"/><category scheme="http://www.blogger.com/atom/ns#" term="vocabulary"/><title type='text'>Vocabulary by machine name, taxonomy_get_tree() and $user</title><summary type="text">(Amended on 17 Jul 2011 to replace reloading entire entities with using field_attach_load().)

Getting the ID of a&amp;nbsp;vocabulary has long been a problem in Drupal but Drupal 7 goes a long way to resolving that:

$voc = taxonomy_vocabulary_machine_name_load(&#39;vocab_machine_name&#39;);

And you&#39;ve got it.

However if you want to load a taxonomy_tree you still have to use the vocabulary ID so you run </summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/1362448213599989076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/1362448213599989076' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/1362448213599989076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/1362448213599989076'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2011/06/vocabulary-by-machine-name.html' title='Vocabulary by machine name, taxonomy_get_tree() and $user'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-3934098422366755092</id><published>2011-06-09T13:32:00.001+01:00</published><updated>2011-06-09T15:21:32.263+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="context"/><category scheme="http://www.blogger.com/atom/ns#" term="contextual links"/><category scheme="http://www.blogger.com/atom/ns#" term="drupal_menu_alter"/><category scheme="http://www.blogger.com/atom/ns#" term="links"/><title type='text'>Contextual links</title><summary type="text">Today wasn&#39;t the first time I&#39;ve had a fight with contextual links, but I decided that this time I would get to the bottom of why they are such a pain to implement.

What&#39;s a contextual link? The little on-screen tools that let you jump to editing/deleting nodes, views, configure blocks and so on. (But not taxonomy - however I&#39;ll get to that later.)

The idea behind a contextual link is as simple</summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/3934098422366755092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/3934098422366755092' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/3934098422366755092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/3934098422366755092'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2011/06/contextual-links.html' title='Contextual links'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5218684791452219943.post-4421762347436716408</id><published>2011-05-04T10:57:00.000+01:00</published><updated>2011-05-04T10:57:06.213+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hook_query_alter"/><category scheme="http://www.blogger.com/atom/ns#" term="query"/><category scheme="http://www.blogger.com/atom/ns#" term="search"/><title type='text'>Search Query bug</title><summary type="text">I&#39;ve just issued a bug report and patch for a problem with the Search Query class. It&#39;s not a huge bug but it prevented me from doing something I needed to do: add some restrictions to a Search Query.

There are two ways of modifying queries in Drupal 7, you can either use a generic &quot;hook_query_alter()&quot; or use &quot;hook_query_TAG_alter()&quot;. Tags are a way of telling other modules what a query is about</summary><link rel='replies' type='application/atom+xml' href='http://drupal7ish.blogspot.com/feeds/4421762347436716408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5218684791452219943/4421762347436716408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/4421762347436716408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5218684791452219943/posts/default/4421762347436716408'/><link rel='alternate' type='text/html' href='http://drupal7ish.blogspot.com/2011/05/search-query-bug.html' title='Search Query bug'/><author><name>Adaddinsane</name><uri>http://www.blogger.com/profile/10577587188266580561</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM75AFvXGHurJnFal4aO7f1YIDCazcbvdR4vvASDv7zv-xRBUXWMbkt_jN2u3TjICtlxpIVQbthoTwlrA8GspsqMZDU5hKqssqbZhbTMRxcLtLG3diQR3AimCBWsV6suQ/s220/stevepunk.png'/></author><thr:total>0</thr:total></entry></feed>