The perfect tool!
I’ve finally found the perfect tool for building and maintaining my website. And trust me, I’ve looked far and wide before making this final switch. My earliest website was full of Javascript menus and DHTML crap. But those were the kiddish days, when I was young and things looked “cool” if they moved around with the mouse pointer :D
After that I switched back to regular HTML, but I still needed a menu generation system, that would require me to change the site layout only on one page and it would get reflected through all the pages on its own. At the same time, I didn’t want to use any server side dynamic content generation (like PHP, shtml, or JSP). So for a while I used [[http://phplayersmenu.sourceforge.net/|PHP Layers Menu]] — basically I used its flat vertical menu, and used PHP to generate the static HTML and then used this static content for my website. It was crude and clumsy, but it worked pretty well.
After coming to UCSD, I thought I’ll do a make over of the website. This time I decided to hell with all the tools and scripts and menus and headers and footers. I came up with a simple header/footer panel design, and just manually wrote up all of the XHTML, and used CSS for the layout. I was satisfied with this design, and I just avoided changing the menus on all pages. At most I’d just change the index.html page and hope the user finds the link. It was clearly less work for me, but then it had less value as well, and it didn’t quite serve the purpose.
After some more looking around, I chanced upon [[http://htp.sourceforge.net/|HTP]] — an HTML pre-processor, that uses a flexible “template” based mechanism to generate web pages. From its web-site:
[start-quote] Htp was intended as a HTML pre-processor. It is able to preprocess HTML, XHTML, XML and CSS files (htp could process any text based files). Its purpose is to assist you to maintain a consistent “look” over an entire set of web pages. This is done by allowing you to define your own tags as abbreviations for sets of standard HTML tags. [end-quote]
So I made up my own templates, freeing me of the hassle of changing headers and footers at multiple places. But it was still cumbersome, since I had to put the pages through htp to get the HTML out of them. Also, for nested subdirectories, I often had to use different templates since the header/footer contained relative links and those had to be changed to reflect the directory depth. Of course I could always use absolute links, but that would have been highly inflexible, in the event of a future website location change.
Finally, I discovered [[http://forrest.apache.org/|Apache Forrest]]. It was the perfect solution, the key to all my problems. Designed for serving static content, all XML based, a single site-wide configuration file, natively supports HOWTOs, FAQs, TODOs, ChangeLogs, Docbook, Wiki, and raw HTML formats.
[start-quote] Forrest is an XML standards-oriented documentation framework based on Apache Cocoon, providing XSLT stylesheets and schemas, images and other resources. Forrest uses these to render the XML source content into a website via command-line, robot, or a dynamic web application. [end-quote]
So I’ve made the move to forrest, and I intend to keep it that way for quite some time. Forrest is only at version 0.5 right now, but under heavy development. The future is bright for this fella!