Common code in ClearSilver 001
I've been using ClearSilver as
a template language for my CGI websites in earnest for about half a year
now. I decided to rewrite my Set Dance Music
Database in it and it's generally been a good thing. Initially,
though, I had two problems: it was hard to know exactly what data had
been put into the HDF object, and it was a pain to debug template
rendering problems by having to upload them to the server (surprisingly,
but I think justifiably, I don't run Apache and PostgreSQL on my laptop
so as to
have a 'production' environment at home).
I solved this problem rather neatly by getting my code to write out the HDF object to a file, rsync'ing that file back to my own machine, and then test the template locally.
I knew that ClearSilver's Perl library had a 'readFile' method to slurp an HDF file directly into the HDF object, and a quick check of the C library said that it had an equivalent 'writeFile' call. So happily I found that they'd also provided this call in Perl. My 'site library' module provided the $hdf object and a Render function which took a template name; it was relatively simple to write to a file derived from the template name. That way I had a one-to-one correspondence between template file and data file.
Then I can run ClearSilver's cstest program to test the template - it takes two parameters, the template file and the HDF file. You either get the page rendered, or a backtrace to where the syntax error in your template occurred. I can also browse through the HDF file - which is just a text file - to work out what data is being sent to the template, which solves the problem of "why isn't that data being shown" fairly quickly.
Another possibility I haven't explored is to run a test suite against the entire site using standard HDF files each time I do a change to make sure there aren't any regressions before uploading.
Hopefully I've piqued a few people's interest in ClearSilver, because
I'm going to be talking more about it in upcoming posts.
posted at: 11:10 | path: /tech/web | permanent link to this entry
All posts licensed under the CC-BY-NC license. Author Paul Wayper.