Skip to main content

Ralsina.Me — Roberto Alsina's website

Templates that create templates...

... or why flex­i­bilty is good some­times.

Af­ter some dab­bling with Lurk­er, I de­cid­ed it's just too much trou­ble for the pro­to­type site and went look­ing for al­ter­na­tive mail­ing list archiver­s.

I found few, and de­cid­ed to try MHonArc.

Then I tried to make it fit the rest of the site. Ouch.

It's not that MHonArc does­n't pro­vide a way to cus­tom­ize the gen­er­at­ed HTM­L. It pro­vides one.

A ter­ri­bly con­vo­lut­ed one where in­stead of writ­ing a tem­plate for MHonArc to fill it has its tem­plate and it's filled from the da­ta and from a re­source file you write.

For ex­am­ple, I ex­pect­ed writ­ing a tem­plate like this (s­tupid ex­am­ple):

<h1> my archives </h1>
${toolbar}
${contents}

So that MHonArc would put a tool­bar and the con­tents where I tell it to.

In re­al­i­ty, MHonArc has a hard­cod­ed tem­plate like this:

IDXPGSSMARKUP
IDXPGBEGIN
    LISTBEGIN
        (AUTHORBEGIN |
         DAYBEGIN |
         SUBJECTBEGIN)?
        LITEMPLATE+
        (AUTHOREND |
         DAYEND |
         SUBJECTEND)?
     LISTEND
    DOC?
IDXPGEND

And you tell it what IDXP­GEND should be, or it us­es its de­fault val­ue. And there is one of these things, with sim­i­lar but dif­fer­ent vari­ables, for each kind of page it gen­er­ates.

So, you can cus­tom­ize your lay­out by putting things like this in a re­source file:

<IdxPgEnd>
$MY-FOOTER-LINK$
</body>
</html>
</IdxPgEnd>

Which is doable. But you end with stat­ic pages. How can you make that work well with a mod­ern site with­out du­pli­cat­ing the whole base lay­out? Not to men­tion all the niceties like hav­ing your user­name in the tool­bar and what­ev­er.

Gen­er­ate page tem­plates in­stead.

I cus­tom­ized the MHonArc lay­out to gen­er­ate neat Mako tem­plates that in­her­it the "re­al" base lay­out tem­plate.

I on­ly had to be care­ful to es­cape the $ signs as $$ if I want­ed them to sur­vive un­til Mako saw them.

Then cre­ate a view that pro­cess­es the tem­plates in­stead of serv­ing the stat­ic files and it works like a char­m.

A sim­ple, but neat hack­let, I think.


Contents © 2000-2023 Roberto Alsina