web commit by http://madduck.myopenid.com/
authorJoey Hess <joey@kitenet.net>
Sun, 6 Jan 2008 15:52:11 +0000 (10:52 -0500)
committerJoey Hess <joey@kitenet.net>
Sun, 6 Jan 2008 15:52:11 +0000 (10:52 -0500)
doc/todo/replace_HTML::Template_with_Template_Toolkit.mdwn [new file with mode: 0644]

diff --git a/doc/todo/replace_HTML::Template_with_Template_Toolkit.mdwn b/doc/todo/replace_HTML::Template_with_Template_Toolkit.mdwn
new file mode 100644 (file)
index 0000000..19f138f
--- /dev/null
@@ -0,0 +1,49 @@
+HTML::Template is an okay templating kit, but it lacks a lot of powerful
+features and thus makes it rather hard to give an ikiwiki site a consistent
+look. If you browse the templates provided in the tarball, you'll notice that
+more than one of them contain the `<html>` tag, which is unnecessary.
+
+Maybe it's just me, I also find HTML::Template cumbersome to use, due in part
+to its use of capital letters.
+
+Finally, the software seems unmaintained: the mailing list and searchable
+archives linked from
+<http://html-template.sourceforge.net/html_template.html#frequently%20asked%20questions>
+are broken and the author has not replied to my query in months.
+
+I would love to see ikiwiki use the [Template
+Toolkit](http://template-toolkit.org/) as templating engine.
+
+One major reason for TT is its use of slots, a concept I first encountered
+with Zope Page Templates and never wanted to miss it again. Let me quickly
+illustrate, using the HTML::Template syntax for simplicity. Traditionally,
+templating is done with includes:
+
+    Page A                              Page B
+    <TMPL_INCLUDE header>               <TMPL_INCLUDE header>
+    this is page A                      this is page B
+    <TMPL_INCLUDE footer>               <TMPL_INCLUDE footer>
+
+This involves four pages, and if you mistype "footer" on page B,
+it'll be broken in potentially subtle ways.
+
+Now look at the approach with slots:
+
+    MainTemplate
+    This is the header
+    <TMPL_SLOT content>
+    This is the footer
+
+    Page A                              Page B
+    <TMPL_USE MainTemplate>             <TMPL_USE MainTemplate>
+      <TMPL_FILL content>                 <TMPL_FILL content>  
+        This is page A                       This is page B  
+      </TMPL_FILL>                        </TMPL_FILL>     
+    </TMPL_USE>                         </TMPL_USE>
+
+As soon as you think about more structure pages with various slots
+to fill, I am sure you can see the appeal of that approach. If not,
+here is some more documentation: <http://wiki.zope.org/ZPT/METALSpecification11>
+
+I would be glad to volunteer time to make this switch happen, such as rewrite
+the templates. I'd prefer not having to touch Perl though...