I feel it is about time for a new release. I have been quite busy and actually I am quite pleased with the results so far.
The work on this release has not been very structured – I think I should perhaps start making plans for new releases and at least try to stick to that.
On the other hand, there have been so many changes and dependencies that it would have been very hard to follow that plan for 0.9.1 to be.
I am now in the final stage of actual changes – thanks to Matt who opened a whooping 21 tracker in on session this has proven to be a bit longer than expected It’s great to get feedback and there are a few really good observasions in those bug reports and feature requests.
The last thing to be added is something called toolbox. The original bug that started this is about inconsistencies in when and how text is HTML encoded/escaped. Another issue that came up a few times lately is the fact that it is not very easy to customize the code in the html and html.defaults packages.
To solve both of these issues there is now the new toolbox. Basically, it allows to register objects (via local.php or similar) that then will be available for all templating code to use.
Most code in core that generates HTML or any other output that is used in templates is now available in two different ways:
- There is a new variable $_t that can be used to access all registered tools.
- Tools will also be available via their name (see examples further down)
The toolbox contains 4 build in tools that are going to replace the current set of html (and related) functions:
- html - Everything that actually creates not just text, but actual HTML (single tags only)
- net – All href helper
- form – HTML Form specific tools
- macro - Container for all functions that are currently under html.defaults
The advantage of using classes is that now it is possible to replace existing methods rather than having to copy and rename functions.
For example, rather than writing:
<?php zm_secure_href(FILENAME_LOGIN); ?>
one can use now:
<?php $_t->net->url(FILENAME_LOGIN, '', true) ?>
<?php $net->url(FILENAME_LOGIN, '', true) ?>
Explanation: I have merged
zm_secure_href into a single
url(..) method (same for
zm_secure_form). That explains the additional two parameter (params and secure/unsecure flag).
It is also possible to register new tools by doing something like:
$mytool = new Foo(); // or ZMLoader::make(‘Foo’);
In templates the object
$mytool is now available as
$_t->mytool or directly as
I also reviewed all converted code with an eye on HTML encoding and improving the documentation. My tests do not show neither loss nor gain in performance, so all should be good.
All existing functions have been marked as deprecated and are converted to using the toolbox. That means even when not upgrading an existing template to use the new variables, the new code will still be used.
Only thing left is to convert the default and demo theme to using the new code, but I think I can do some automated rewriting that should help a bit.