Error: I'm afraid this is the first I've heard of a "trackback" flavoured Blosxom. Try dropping the "/+trackback" bit from the end of the URL.

Wed, 25 Jan 2006

When writing Seamstress pages, componentize your tree transforms

Working with our Mason codebase today showed me something that would have been a lot harder in Seamstress. Basically, I was told to add a vonage advertisement in another table cell everywhere that we displayed a vbase_banner.

Up to this point, all pages using the vbase_banner looked something like this:

<& 'comp/related_topics_lander_2', aconf => $aconf, query => $query &>

<& 'comp/vbase_banner', aconf => $aconf, query => $query, align => 'left' &>

% if ($query->{'brand'} eq 'tbar') {
  <& 'comp/tbar_foot', aconf => $aconf, query => $query &>
% } else {
  <& 'comp/quickfoot', aconf => $aconf, query => $query, align => 'center' &>
% }

<& 'comp/footer', aconf => $aconf, query => $query &>


So all I had to do was toss a bit of logic in vbase_banner for the vonage_ad and I was done:

<tr> <td align='<% $align %>'><iframe width=468 height=60 noresize scrolling=no \frameborder=0 marginheight=0 marginwidth=0 src='http://t.trafficmp.com/b.t/<% $\id %>/<% $rn %>/'></iframe> </td> <td> % if ($query->{pagetype} ne &#8216;KEY&#8217;) { <& vonage_ad &> % } </td> </tr>

With Seamstress, one could componentize a page by creating subroutines for processing each part, but one does not have to. This is a downfall in Seamstress in a sense. But nevertheless, with Params::Validate and HTML::Tree, one can still do the trick, but one must be disciplined about placing each tree transformation into a separate subroutine instead of having a subroutine with a series of

The end result of disciplined Seamstress usage is that you can refine subroutines and make wholesale changes across several webpages if they all point to the same place

#