1 | = Known incompatibilities with Smarty 2 = |
---|
2 | |
---|
3 | == Syntax == |
---|
4 | |
---|
5 | Smarty 3 API has a new syntax. Much of the Smarty 2 syntax is supported |
---|
6 | by a wrapper but deprecated. See the README that comes with Smarty 3 for more |
---|
7 | information. |
---|
8 | |
---|
9 | The {$array|@mod} syntax has always been a bit confusing, where an "@" is required |
---|
10 | to apply a modifier to an array instead of the individual elements. Normally you |
---|
11 | always want the modifier to apply to the variable regardless of its type. In Smarty 3, |
---|
12 | {$array|mod} and {$array|@mod} behave identical. It is safe to drop the "@" and the |
---|
13 | modifier will still apply to the array. If you really want the modifier to apply to |
---|
14 | each array element, you must loop the array in-template, or use a custom modifier that |
---|
15 | supports array iteration. Most smarty functions already escape values where necessary |
---|
16 | such as {html_options} |
---|
17 | |
---|
18 | == PHP Version == |
---|
19 | Smarty 3 is PHP 5 only. It will not work with PHP 4. |
---|
20 | |
---|
21 | == {php} Tag == |
---|
22 | The {php} tag is disabled by default. The use of {php} tags is |
---|
23 | deprecated. It can be enabled with $smarty->allow_php_tag=true. |
---|
24 | |
---|
25 | But if you scatter PHP code which belongs together into several |
---|
26 | {php} tags it may not work any longer. |
---|
27 | |
---|
28 | == Delimiters and whitespace == |
---|
29 | Delimiters surrounded by whitespace are no longer treated as Smarty tags. |
---|
30 | Therefore, { foo } will not compile as a tag, you must use {foo}. This change |
---|
31 | Makes Javascript/CSS easier to work with, eliminating the need for {literal}. |
---|
32 | This can be disabled by setting $smarty->auto_literal = false; |
---|
33 | |
---|
34 | == Unquoted Strings == |
---|
35 | Smarty 2 was a bit more forgiving (and ambiguous) when it comes to unquoted strings |
---|
36 | in parameters. Smarty3 is more restrictive. You can still pass strings without quotes |
---|
37 | so long as they contain no special characters. (anything outside of A-Za-z0-9_) |
---|
38 | |
---|
39 | For example filename strings must be quoted |
---|
40 | <source lang="smarty"> |
---|
41 | {include file='path/foo.tpl'} |
---|
42 | </source> |
---|
43 | |
---|
44 | == Extending the Smarty class == |
---|
45 | Smarty 3 makes use of the __construct method for initialization. If you are extending |
---|
46 | the Smarty class, its constructor is not called implicitly if the your child class defines |
---|
47 | its own constructor. In order to run Smarty's constructor, a call to parent::__construct() |
---|
48 | within your child constructor is required. |
---|
49 | |
---|
50 | <source lang="php"> |
---|
51 | class MySmarty extends Smarty { |
---|
52 | function __construct() { |
---|
53 | parent::__construct(); |
---|
54 | |
---|
55 | // your initialization code goes here |
---|
56 | |
---|
57 | } |
---|
58 | } |
---|
59 | </source> |
---|
60 | |
---|
61 | == Autoloader == |
---|
62 | Smarty 3 does register its own autoloader with spl_autoload_register. If your code has |
---|
63 | an existing __autoload function then this function must be explicitly registered on |
---|
64 | the __autoload stack. See http://us3.php.net/manual/en/function.spl-autoload-register.php |
---|
65 | for further details. |
---|
66 | |
---|
67 | == Plugin Filenames == |
---|
68 | Smarty 3 optionally supports the PHP spl_autoloader. The autoloader requires filenames |
---|
69 | to be lower case. Because of this, Smarty plugin file names must also be lowercase. |
---|
70 | In Smarty 2, mixed case file names did work. |
---|
71 | |
---|
72 | == Scope of Special Smarty Variables == |
---|
73 | In Smarty 2 the special Smarty variables $smarty.section... and $smarty.foreach... |
---|
74 | had global scope. If you had loops with the same name in subtemplates you could accidentally |
---|
75 | overwrite values of parent template. |
---|
76 | |
---|
77 | In Smarty 3 these special Smarty variable have only local scope in the template which |
---|
78 | is defining the loop. If you need their value in a subtemplate you have to pass them |
---|
79 | as parameter. |
---|
80 | <source lang="smarty"> |
---|
81 | {include file='path/foo.tpl' index=$smarty.section.foo.index} |
---|
82 | </source> |
---|
83 | |
---|
84 | == SMARTY_RESOURCE_CHAR_SET == |
---|
85 | Smarty 3 sets the constant SMARTY_RESOURCE_CHAR_SET to utf-8 as default template charset. |
---|
86 | This is now used also on modifiers like escape as default charset. If your templates use |
---|
87 | other charsets make sure that you define the constant accordingly. Otherwise you may not |
---|
88 | get any output. |
---|
89 | |
---|
90 | == newline at {if} tags == |
---|
91 | A \n was added to the compiled code of the {if},{else},{elseif},{/if} tags to get output of newlines as expected by the template source. |
---|
92 | If one of the {if} tags is at the line end you will now get a newline in the HTML output. |
---|
93 | |
---|
94 | == trigger_error() == |
---|
95 | The API function trigger_error() has been removed because it did just map to PHP trigger_error. |
---|
96 | However it's still included in the Smarty2 API wrapper. |
---|
97 | |
---|
98 | == Smarty constants == |
---|
99 | The constants |
---|
100 | SMARTY_PHP_PASSTHRU |
---|
101 | SMARTY_PHP_QUOTE |
---|
102 | SMARTY_PHP_REMOVE |
---|
103 | SMARTY_PHP_ALLOW |
---|
104 | have been replaced with class constants |
---|
105 | Smarty::PHP_PASSTHRU |
---|
106 | Smarty::PHP_QUOTE |
---|
107 | Smarty::PHP_REMOVE |
---|
108 | Smarty::PHP_ALLOW |
---|
109 | |
---|