317 317
These are only changes that could affect existing templates/installations. You'll find all those instructions and additional information about changes/features in release annoucements.
metal:fill-slot
used outside metal:use-macro
is no longer supported (it used to magically pre-fill slots for later use). Make sure you're using slots as described in the manual.
Removed support for custom code generators using the old PHPTAL_Php_Tree
interface.
You don't need to include
/require
files other than PHPTAL.php
. You can remove any superfluous require
s.
In case autoloading causes any problems and/or you want to use your own autoloader instead of PHPTAL's built-in one, execute this after loading PHPTAL.php
:
spl_autoload_unregister(array('PHPTAL','autoload')); // ugly workaround
and then call PHPTAL::autoload()
from your autoloader.
You can automatically find most incompatible templates using the lint tool.
The biggest difference is in handling of entities. Entities are now unescaped before passing to expressions, i.e. ${php:strlen('"')}
“sees” just the quote character and returns 1
. In previous versions entities were passed as-is to the expressions (and that example would return 6
).
Newly added unescaping of entities can expose encoding bugs. Make sure your pages declare document encoding:
For XHTML it's best to send Content-Type:application/xhtml+xml;charset=UTF-8
or Content-Type:text/html;charset=UTF-8
HTTP headers.
text/xml
MIME type, use application/xml
instead.
In HTML add appropriate <meta>
tag or send Content-Type:text/html;charset=UTF-8
HTTP header.
$phptal->setEncoding('ISO-8859-…')
(or just switch to UTF-8 already! :)PHPTAL_VERSION
have been removed. Remove any PHPTAL-specific define()
s and use class methods (available in earlier versions too) for configuration (e.g. $phptal->setPhpCodeDestination('/tmp/phptal/')
for custom temp directory.)PHPTAL_DIR
is gone. PHPTAL now temporarily modifies include_path
(this may change in the future).PHPTAL.php
.phptal:*
attributes has changed from http://xml.zope.org/namespaces/phptal
to http://phptal.org/ns/phptal
.--
is not allowed in comments.) Comments starting with <!--!
are stripped from output.<b title=""title="">
is doubly wrong.| nothing
instead of | false
to avoid getting zeros (false
is now printed as 0
).tal:repeat
doesn't “leak” variables to outer scope
In 1.1.13 translation key like &lt;p i18n:translate="'żółw'" /&gt;
was interpreted as &lt;p i18n:translate="'&lt;C197&gt;&lt;C188&gt;&lt;C195&gt;&lt;C179&gt;&lt;C197&gt;&lt;C130&gt;w'"&gt;
and you had to use msgid "&lt;C197&gt;&lt;C188&gt;&lt;C195&gt;&lt;C179&gt;&lt;C197&gt;&lt;C130&gt;w"
in your .po
files.
PHPTAL 1.1.14 stops doing this and keys are now left unchanged. The example above would simply expect msgid "żółw"
in the .po
file.
If you don't want to change your .po files and want to keep old behaviour, then call setCanonicalize(true)
of PHPTAL_GetTextTranslator
, e.g.:
$translator = new PHPTAL_GetTextTranslator(); $translator-&gt;setLanguage(…); $translator-&gt;setCanonicalize(true); // add this line $phptal-&gt;setTranslator($translator);
To upgrade templates, change &lt;Cxxx&gt;
back to bytes. This code snippet will do it: preg_replace('/&lt;C(\d+)&gt;/e','chr("\1")',$po_file_content)
1
1