perrin      01/08/23 10:37:55

  Modified:    features tmpl-cmp.html
  Log:
  Updated version, added info on Mason/Embperl OO differences, added URLs.
  
  Revision  Changes    Path
  1.2       +45 -26    modperl-site/features/tmpl-cmp.html
  
  Index: tmpl-cmp.html
  ===================================================================
  RCS file: /home/cvs/modperl-site/features/tmpl-cmp.html,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- tmpl-cmp.html     2001/08/01 03:35:13     1.1
  +++ tmpl-cmp.html     2001/08/23 17:37:55     1.2
  @@ -3,7 +3,7 @@
   <TITLE>Choosing a Templating System</TITLE>
   </HEAD>
   
  -<BODY bgcolor="#ffffff">
  +<BODY>
   
   <A NAME="__index__"></A>
   <!-- INDEX BEGIN -->
  @@ -76,7 +76,8 @@
   <P>
   <H1><A NAME="choosing a templating system">Choosing a Templating System</A></H1>
   <P>by Perrin Harkins</P>
  -<P>Version 0.9<P>
  +<P>version 1.0</P>
  +<P>
   <HR>
   <H1><A NAME="introduction">Introduction</A></H1>
   <P>Go on, admit it: you've written a templating system.  It's okay,
  @@ -208,7 +209,7 @@
   always cranks up the flame on web development mailing lists.</P>
   <P>Some systems use in-line Perl statements.  They may provide some extra
   semantics, like Embperl's operators for specifying whether the code's
  -output should be displayed or Mason's &lt;%init&gt; sections for specifying
  +output should be displayed or Mason's <CODE>&lt;%init&gt;</CODE> sections for 
specifying
   when the code gets run, but at the end of the day your templates are
   written in Perl.</P>
   <P>Other systems provide a specialized mini-language instead of (or in
  @@ -258,16 +259,16 @@
     &lt;% } %&gt;</PRE>
   <P>And now Template Toolkit:</P>
   <PRE>
  -  [% USE product(sku=bar1234) %]</PRE>
  +  [% USE product(sku=bar1234) %]
  +</PRE>
   <PRE>
  +
     [% IF product.isbn %]
       It's a book!
     [% ELSE %]
       It's NOT a book!
  -  [% END %]
  -</PRE>
  +  [% END %]</PRE>
   <PRE>
  -
     [% FOREACH item = product.related %]
       You might also enjoy [% item.name %].
     [% END %]</PRE>
  @@ -427,10 +428,11 @@
   flexibility and power before settling on this simple approach.</P>
   <P>
   <H2><A NAME="html::mason">HTML::Mason</A></H2>
  +<P><A HREF="http://www.masonhq.com/";>http://www.masonhq.com/</A></P>
   <P>Mason has been around for a few years now, and has built up a loyal
   following.  It was originally created as a Perl clone of some of the
   most interesting features from Vignette StoryServer, but has since
  -become it's own unique animal.  It comes from a publishing background,
  +become its own unique animal.  It comes from a publishing background,
   and includes features oriented towards splitting up pages into
   re-useable chunks, or ``components.''</P>
   <P>Mason uses in-line Perl with a compilation approach, but has a feature
  @@ -451,17 +453,20 @@
   from the values passed in the URI query string.</P>
   <P>While the documentation mostly demonstrates a callback execution
   model, it is possible to use Mason in a pipeline style.  This can be
  -accomplished in various ways, including designating components as
  -``autohandlers'' which run before anything else for requests within a
  -certain directory structure.  An autohandler could do some processing
  -and set up data for a display template which only includes minimal
  -in-line Perl.  There is also support for an object-oriented site
  -approach, applying concepts like inheritance to the site directory
  -structure.  For example, the component at /store/book/ might inherit a
  -standard layout from the component at /store/, but override the
  -background color and navigation bar.  Then /store/music/ can do the
  -same, with a different color.  This can be a very powerful paradigm
  -for developing large sites.</P>
  +accomplished in various ways, including building special components
  +called ``autohandlers'' which run before anything else for requests
  +within a certain directory tree.  An autohandler could do some
  +processing and set up data for a display template which only includes
  +minimal in-line Perl.  There is also support for an object-oriented
  +site approach, applying concepts like inheritance to the site
  +directory structure.  For example, the autohandler component at
  +/store/book/ might inherit a standard layout from the autohandler at
  +/store/, but override the background color and navigation bar.  Then
  +/store/music/ can do the same, with a different color.  This can be a
  +very powerful paradigm for developing large sites.  Note that this
  +inheritance is only supported at the level of methods defined in
  +autohandler components.  You can't override the component
  +/store/foo.html with another one at /store/book/foo.html.</P>
   <P>Mason's approach to debugging is to create ``debug files'' which run
   Mason outside of a web server environment, providing a fake web
   request and activating the debugger.  This can be helpful if you're
  @@ -481,6 +486,7 @@
   helpful user community go a long way.</P>
   <P>
   <H2><A NAME="html::embperl">HTML::Embperl</A></H2>
  +<P><A HREF="http://perl.apache.org/embperl/";>http://perl.apache.org/embperl/</A></P>
   <P>Embperl makes its language choice known up front: embedded perl.  It
   is one of the most popular in-line Perl templating tools and has been
   around longer than most of the others.  It has a solid reputation for
  @@ -512,9 +518,12 @@
   toggled on and off).</P>
   <P>Embperl includes something called EmbperlObject, which allows you to
   apply OO concepts to your site hierarchy in a similar way to the
  -inheritance features mentioned for Mason, above.  This is a very
  -convenient way to code sites with styles that vary by area, and is
  -worth checking out.</P>
  +autohandler and inheritance features of Mason, mentioned above.  This
  +is a very convenient way to code sites with styles that vary by area,
  +and is worth checking out.  EmbperlObject includes the ability to do
  +overrides on a file level.  This means that you can have a directory
  +like /store/music which overrides specific templates and inherits the
  +rest from a parent directory.</P>
   <P>One drawback of older versions of Embperl was the necessity to use
   built-in replacements for most of Perl's control structures like ``if''
   and ``foreach'' when they are being wrapped around non-Perl sections.
  @@ -540,6 +549,7 @@
   provides performance improvements.</P>
   <P>
   <H2><A NAME="apache::axkit">Apache::AxKit</A></H2>
  +<P><A HREF="http://axkit.org/";>http://axkit.org/</A></P>
   <P>AxKit is the first mod_perl page generation system to be built from the
   ground up around XML.  Technically, AxKit itself is not a templating
   tool but rather a framework for stringing together different modules
  @@ -562,8 +572,8 @@
   XPath functions for querying an XML document and manipulating the
   retrieved data.  XPathScript can also be used in a declarative
   fashion, specifying the formatting of particular elements in the XML
  -input.  For example this snippet will change all &lt;foo&gt; tags in an XML
  -document to BAR in the output::</P>
  +input.  For example this snippet will change all <CODE>&lt;foo&gt;</CODE> tags
  +in an XML document to BAR in the output::</P>
   <PRE>
     &lt;%
       $t-&gt;{'foo'}{pre}   = 'BAR';
  @@ -599,6 +609,7 @@
   languages and tools.</P>
   <P>
   <H2><A NAME="apache::asp">Apache::ASP</A></H2>
  +<P><A HREF="http://www.apache-asp.org/";>http://www.apache-asp.org/</A></P>
   <P>Apache::ASP started out as a port of Microsoft's Active Server Pages
   technology, and its basic design still follows that model.  It uses
   in-line Perl with a compilation approach, and provides a set of simple
  @@ -639,10 +650,12 @@
   author, has reported much better results from Samba file-sharing than
   from NFS.)  This may be an issue for large-scale server clusters,
   which usually rely on a relational database for network storage of
  -sessions.  Support database storage of sessions is planned for a
  -future release.</P>
  +sessions.  Support for database storage of sessions is planned in a
  +future release.  In the meantime, instructions are provided for
  +hooking up to Apache::Session.</P>
   <P>
   <H2><A NAME="text::template">Text::Template</A></H2>
  +<P><A 
HREF="http://search.cpan.org/search?dist=Text-Template";>http://search.cpan.org/search?dist=Text-Template</A></P>
   <P>This module has become the de facto standard general purpose
   templating module on CPAN.  It has an easy interface and thorough
   documentation.  The examples in the docs show a pipeline execution
  @@ -672,6 +685,7 @@
   e-mails, PDFs, etc.</P>
   <P>
   <H2><A NAME="template toolkit">Template Toolkit</A></H2>
  +<P><A HREF="http://template-toolkit.org/";>http://template-toolkit.org/</A></P>
   <P>One of the more recent additions to the templating scene, Template
   Toolkit is a very flexible mini-language system.  It has a complete
   set of directives for working with data, including loops and
  @@ -744,6 +758,7 @@
   collection of documents.</P>
   <P>
   <H2><A NAME="html::template">HTML::Template</A></H2>
  +<P><A 
HREF="http://search.cpan.org/search?dist=HTML-Template";>http://search.cpan.org/search?dist=HTML-Template</A></P>
   <P>HTML::Template is a popular module among those looking to use a
   mini-language rather than in-line Perl.  It uses a simple set of tags
   which allow looping (even on nested data structures) and conditionals
  @@ -775,6 +790,7 @@
   <P>And now, a few honorable mentions:</P>
   <P>
   <H2><A NAME="html_tree">HTML_Tree</A></H2>
  +<P><A 
HREF="http://homepage.mac.com/pauljlucas/software/html_tree/";>http://homepage.mac.com/pauljlucas/software/html_tree/</A></P>
   <P>As mentioned earlier, HTML Tree uses a fairly unique method of
   templating: it loads in an HTML page, parses it to a DOM, and then
   programmatically modifies the contents of nodes.  This allows it to
  @@ -785,18 +801,21 @@
   is ``HTML_Tree'', not ``HTML::Tree''.</P>
   <P>
   <H2><A NAME="apache::xpp">Apache::XPP</A></H2>
  +<P><A 
HREF="http://opensource.cnation.com/projects/XPP/";>http://opensource.cnation.com/projects/XPP/</A></P>
   <P>XPP is an in-line Perl system that compiles to bytecode.  Although it
   is a perfectly good implementation, it has little to differentiate it
   except for an easy mechanism to define new HTML-like tags which can be
   used to replace in-line code in templates.</P>
   <P>
   <H2><A NAME="eperl">ePerl</A></H2>
  +<P><A 
HREF="http://search.cpan.org/search?dist=Apache-ePerl";>http://search.cpan.org/search?dist=Apache-ePerl</A></P>
   <P>Possibly the first module to embed Perl code in a text or HTML file,
   ePerl is still a viable option in the form of Apache::ePerl.  It
   caches compiled bytecode in memory to achieve solid performance, and
   some people find it refreshingly simple to use.</P>
   <P>
   <H2><A NAME="cgi::fasttemplate">CGI::FastTemplate</A></H2>
  +<P><A 
HREF="http://search.cpan.org/search?dist=CGI-FastTemplate";>http://search.cpan.org/search?dist=CGI-FastTemplate</A></P>
   <P>This module takes a minimalistic approach to templating, which makes
   it unusually well suited to use in CGI programs.  It parses templates
   with a single regular expression and does not support anything in
  
  
  

Reply via email to