I've been all over the map. Years ago I was against templating systems, then
I was a big fan of smarty, now my templating strategy is the one that's used
in symfony: don't use a separate templating system, but impose some
discipline on the way you use PHP.
My answer would be different in languages that aren't as facile as PHP... I
would use a templating system in Perl, Java or Ruby, but in a systems PHP,
ColdFusion or ASP.NET, which were designed from the beginning to build web
apps, it's hard to develop a templating system which is better than the one
the language gives you.
Study the "view" part of the symfony docs if you want to get a good picture of
how do this, but you don't need a heavyweight framework to get the benefits...
I built an MVC "microframework" in 80 lines of PHP and wrote another 120 lines
worth of helper functions that dealt with common annoyances such as populating
<select> lists. The big concepts are:
* layouts: you need some mechanism for selecting a "master template" that your
page appears in. This looks like
<html>
<head>...<title><?php q($title) ?></title>...
</head>
<body>
... header stuff ...
<?php echo $real_content ?>
... footer stuff ...
</body>
</html>
Note that the master template is real HTML (<?php is a processing instruction)
so you (or a designer) can edit it in dreamweaver or your favorite tools.
* partials: a partial is a PHP file that emits HTML that goes into slots like
the $real_content slot... With output buffering (see the ob_start function)
you can capture the output of a PHP "template" and put it in a string for
further processing. With some work you can do this recursively, so partials
end up inside partials.
* helpers: these are functions that help you write views. For instance, the
q() function above is
function q($string) {
echo(htmlspecialchars($q));
}
You'll need helpers to make form elements for you, for instance, something
like
draw_select_list($name,$options,$selected)
where the $options are an associative array of values and display text.
Symfony has a mature view system that has caching and other advanced features
(I wish I could say it was as mature in the data access department)
For my day job I'm working on an ASP.NET microframework that uses the same
ideas.
----
Paul Houle
http://animalphotos.info/a/
_______________________________________________
New York PHP Community Talk Mailing List
http://lists.nyphp.org/mailman/listinfo/talk
NYPHPCon 2006 Presentations Online
http://www.nyphpcon.com
Show Your Participation in New York PHP
http://www.nyphp.org/show_participation.php