[geeklog-devel] [geeklog-cvs] Geeklog-1.x

Joe Mucchiello joe at ThrowingDice.com
Sun Nov 25 21:07:31 EST 2007

At 03:50 PM 11/25/2007, Dirk Haun wrote:
>Mark R. Evans wrote:
> >The final area where Geeklog needs improvement is the template engine.
>It's perfectly possible that I'm missing something but what exactly is
>the problem with our template engine? It may be slow but so what - it
>has been slow ever since Geeklog existed in its current form. For me, a
>faster / better / whatever template engine is a "nice to have" feature
>that ranks pretty low on my list. I really don't get all the emotion
>that seems to be involved here.

That's odd that you consider it "nice to have" when in February you 
were saying:

At 06:30 PM 2/10/2007, Dirk Haun wrote:
>Vincent Furia wrote:
> >Our
> >template library is extremely inefficient in memory and processing.
> >100s of extra calls to the template library will kill Geeklog (already
> >slow) performance.
>Since earlier attempts to replace it with something else have all
>failed: Has someone considered ways to speed it up? Since we're
>apparently stuck with an unsupported template library anyway, we could
>as well fork it.
>Hmm, maybe that could be a task for a bounty ...
>bye, Dirk

A task you once thought bounty worthy is now "nice to have"? I don't get it.

I can't speak for Mark but being passionate about getting this code 
in would have something to with having a working prototype on April 
28 (it's in the mailing list archive). Since then the extra features 
to the library improve just about all aspects of writing for Geeklog. 
If I never have to code a $T->set_var('lang_foo', $LANG_XYZ['foo']) 
again, I'll jump for joy.

Aside from the speed up, it has the following additional extra features:

Multiple Root directories -- Now plugins can put all their templates 
in the plugin's directory but serve templates from a theme's 
directory if they exist. Think about the forum install, you have to 
move the template files into the theme because Blaine made the 
decision that the forum should be themeable. With this library, it is 
not necessary for Blaine to dictate where the files are, he can look 
in multiple places. He could leave the files in the 
path_to_geeklog/plugins/forum/templates directory and pass 
$_CONF['path'].'plugins/forum/templates') to the new Template() call. 
Then any theme that creates forum templates will retheme the forums 
and any theme without a forum directory will use the forum's default 
theme in its internal directory without having to copy the files 
over. Adding themes to any install with the forum plugin is a pain in 
the back because you have to remember to move the template files. If 
other plugins worked the same way, that would become very tedious.

$LANG support -- {$LANG_ADMIN['save']} in a template will spit out 
the language-dependent text. Absolute separation of content from code 
is possible with this function because now you don't need a code 
change in order to add a line of text to the output. For safety sake, 
only variables that start with LANG_ work. Imagine version 1.5.1 of 
Geeklog where there are no $T->set_var('lang....', $LANG....); calls. 
Less code, less requests for text added to templates.

htmlspecialchars and urlencode support -- Does the coder always know 
when he needs to make those calls? Actually, most 'lang_...' vars 
should probably have it but they don't. Now the theme author can add 
those calls to a variable by adding :h or :u onto the variablename: 

The cache is PHP -- This means templates can contain PHP code. I 
don't see how this is such a horror considering header.thtml is 
already evaluated in COM_siteHeader(). This just expands that ability 
out to all templates.

Simple if support -- This was brought up in gekklog-devel a couple 
months ago and I had it working in 2 hours. It's not a full if (any 
condition) thing but what it does it does well.

Default vars -- This was an old idea that I added in 5 minutes. Many 
templates need {site_url} and {site_admin_url}. Why not just include 
them in all templates? Now you can. If you add ('xhtml' => XHTML) to 
the default array, you don't need to hunt through the code adding it 
all over the place. This can be made compatible with the old library 
in 5 minutes, too.

All of these extra features though are dead on the vine if the 
library isn't in 1.5. Because based on current trends, 1.5.1 is a 
year away. I want to see themes that take advantage of its added 
features. I can't get excited about a themes that won't exist for a year.

Joe Mucchiello
Throwing Dice Games

More information about the geeklog-devel mailing list