~ubuntu-branches/ubuntu/feisty/smarty/feisty-security

« back to all changes in this revision

Viewing changes to FAQ

  • Committer: Bazaar Package Importer
  • Author(s): Dimitri Fontaine
  • Date: 2004-04-16 17:41:20 UTC
  • Revision ID: james.westby@ubuntu.com-20040416174120-qb9ma0g419hkd25g
Tags: 2.6.2-2
* Adapted dependencies to allow running smarty with apache 2 (Closes: #241147)
* Prepared the template for i18n (Closes: #233098)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
QUESTION INDEX
 
2
--------------
 
3
 
 
4
GENERAL
 
5
 
 
6
Q: What is Smarty?
 
7
Q: What's the difference between Smarty and other template engines?
 
8
Q: What do you mean "Compiled PHP Scripts" ?
 
9
Q: Why can't I just use PHPA (http://php-accelerator.co.uk) or Zend Cache?
 
10
Q: Why does smarty have a built in cache? Wouldn't it be better to handle this
 
11
   in a separate class?
 
12
Q: Is Smarty faster than <insert other PHP template engine>?
 
13
Q: How can I be sure to get the best performance from Smarty?
 
14
Q: Do you have a mailing list?
 
15
Q: Can you change the mailing list so reply-to sends to the list and not the
 
16
   user?
 
17
 
 
18
TROUBLESHOOTING
 
19
 
 
20
Q: Smarty doesn't work.
 
21
Q: I get the following error when running Smarty:
 
22
   Warning:  Smarty error: problem creating directory "templates_c/239/239105369"
 
23
   in /path/to/Smarty.class.php on line 542
 
24
Q: I get the following error when running Smarty:
 
25
   Warning: Wrong parameter count for preg_replace() in
 
26
   Smarty.class.php on line 371
 
27
Q: I get this error when passing variables to {include}:
 
28
   Fatal error: Call to undefined function: get_defined_vars() in
 
29
   /path/to/Smarty/templates_c/index.tpl.php on line 8
 
30
Q: I get PHP errors in my {if} tag logic.
 
31
Q: I'm changing my php code and/or templates, and my results are not getting
 
32
   updated.
 
33
Q: I'm running Windows 2000 and I get blank content. My compiled PHP files are
 
34
   also zero length.
 
35
Q: The template goes into an infinite loop when I include included templates
 
36
   that pass local variables
 
37
Q: Javascript is causing Smarty errors in my templates.
 
38
Q: I get "SAFE MODE Restriction in effect. ..."-errors when running smarty.
 
39
 
 
40
MISC
 
41
 
 
42
Q: Can I use Macromedia's Dreamweaver to edit my templates?
 
43
Q: Dreamweaver is urlencoding the template delimiters when they are in a SRC or
 
44
   HREF link. How do I get around this?
 
45
 
 
46
HOWTO
 
47
 
 
48
Q: How do I generate different cache files per template based on arguments
 
49
   passed to the page?
 
50
Q: How do I pass a template variable as a parameter? {function param={$varname}}
 
51
   does not work.
 
52
Q: How do I include cached template(s) within a non-cached template?
 
53
 
 
54
 
 
55
GENERAL
 
56
-------
 
57
 
 
58
Q: What is Smarty?
 
59
A: Smarty is a template engine for PHP... but be aware this isn't just another
 
60
   PHP template engine. It's much more than that.
 
61
 
 
62
Q: What's the difference between Smarty and other template engines?
 
63
A: Most other template engines for PHP provide basic variable substitution and
 
64
   dynamic block functionality. Smarty takes a step further to be a "smart"
 
65
   template engine, adding features such as configuration files, template
 
66
   functions, variable modifiers (see the docs!) and making all of this
 
67
   functionality as easy as possible to use for both programmers and template
 
68
   designers. Smarty also compiles the templates into PHP scripts, eliminating
 
69
   the need to parse the templates on every invocation, making Smarty extremely
 
70
   scalable and manageable for large application needs.
 
71
 
 
72
Q: What do you mean "Compiled PHP Scripts" ?
 
73
A: Smarty reads the template files and creates PHP scripts from them. Once
 
74
   these PHP scripts are created, Smarty executes these, never having to parse
 
75
   the template files again. If you change a template file, Smarty will
 
76
   recreate the PHP script for it. All this is done automatically by Smarty.
 
77
   Template designers never need to mess with the generated PHP scripts or even
 
78
   know of their existance. (NOTE: you can turn off this compile checking step
 
79
   in Smarty for increased performance.)
 
80
 
 
81
Q: Why can't I just use PHPA (http://php-accelerator.co.uk) or Zend Cache?
 
82
A: You certainly can, and we highly recommend it! What PHPA does is caches
 
83
   compiled bytecode of your PHP scripts in shared memory or in a file. This
 
84
   speeds up server response and saves the compilation step. Smarty creates PHP
 
85
   scripts, which PHPA will cache nicely. Now, Smarty's built-in cache is
 
86
   something completely different. It caches the _output_ of the template
 
87
   contents. For example, if you have a template that requires several database
 
88
   queries, Smarty can cache this output, saving the need to call the database
 
89
   every time. Smarty and PHPA (or Zend Cache) complement each other nicely. If
 
90
   performance is of the utmost importance, we would recommend using one of
 
91
   these with any PHP application, using Smarty or not. As you can see in the
 
92
   benchmarks, Smartys performance _really_ excels in combination with a PHP
 
93
   accelerator.
 
94
 
 
95
Q: Why does Smarty have a built in cache? Wouldn't it be better to handle this
 
96
   in a separate class?
 
97
A: Smarty's caching functionality is tightly integrated with the template
 
98
   engine, making it quite a bit more flexible than a simple caching wrapper.
 
99
   For instance, you can cache select portions of a template page. Let's say
 
100
   you have a polling box on your site. With Smarty, you can leave the poll
 
101
   dynamic and cache the rest of the page. You can also pass templates
 
102
   multiple cache ids, meaning that a template can have several caches
 
103
   depending on URL, cookies, etc.
 
104
 
 
105
Q: Is Smarty faster than <insert other PHP template engine>?
 
106
A: See the benchmark page for some performance comparisons. Smarty's approach
 
107
   to templates is a bit different from some languages: it compiles templates
 
108
   into PHP scripts instead of parsing them on each invocation. This usually
 
109
   results in great performance gains, especially with complex templates.
 
110
   Coupled with the built-in caching of Smarty templates, the performance is
 
111
   outstanding.
 
112
 
 
113
Q: How can I be sure to get the best performance from Smarty?
 
114
A: Be sure you set $compile_check=false once your templates are initially
 
115
   compiled. This will skip the unneeded step of testing if the template has
 
116
   changed since it was last compiled. If you have complex pages that don't
 
117
   change too often, turn on the caching engine and adjust your application so
 
118
   it doesn't do unnecessary work (like db calls) if a cached page is
 
119
   available. See the documentation for examples.
 
120
   
 
121
Q: Do you have a mailing list?
 
122
A:  We have a few mailing lists. "general" for you to share your ideas or ask
 
123
        questions, "dev" for those interested in the development efforts of Smarty,
 
124
        and "cvs" for those that would like to track the updates made in the cvs
 
125
        repository.
 
126
 
 
127
    send a blank e-mail message to:
 
128
      smarty-general-subscribe@lists.php.net (subscribe to the general list)
 
129
      smarty-general-unsubscribe@lists.php.net (unsubscribe from the general list)
 
130
      smarty-general-digest-subscribe@lists.php.net (subscribe to digest)
 
131
      smarty-general-digest-unsubscribe@lists.php.net (unsubscribe from digest)
 
132
      smarty-dev-subscribe@lists.php.net (subscribe to the dev list)
 
133
      smarty-dev-unsubscribe@lists.php.net (unsubscribe from the dev list)
 
134
      smarty-cvs-subscribe@lists.php.net (subscribe to the cvs list)
 
135
      smarty-cvs-unsubscribe@lists.php.net (unsubscribe from the cvs list)
 
136
    You can also browse the mailing list archives at
 
137
    http://marc.theaimsgroup.com/?l=smarty&r=1&w=2
 
138
 
 
139
 
 
140
 
 
141
Q: Can you change the mailing list so Reply-To sends to the list and not the
 
142
   user?
 
143
A: Yes we could, but no we won't. Use "Reply-All" in your e-mail client to send
 
144
   to the list. http://www.unicom.com/pw/reply-to-harmful.html
 
145
 
 
146
TROUBLESHOOTING
 
147
---------------
 
148
 
 
149
Q: Smarty doesn't work.
 
150
A: You must be using PHP 4.0.6 or later if you use any version of Smarty
 
151
   past 2.0.1. Read the BUGS file for more info.
 
152
 
 
153
Q: I get the following error when running Smarty:
 
154
   Warning:  Smarty error: problem creating directory "templates_c/239/239105369"
 
155
   in /path/to/Smarty.class.php on line 542
 
156
A: Your web server user does not have permission to write to the templates_c
 
157
   directory, or is unable to create the templates_c directory. Be sure the
 
158
   templates_c directory exists in the location defined in Smarty.class.php,
 
159
   and the web server user can write to it. If you do not know the web server
 
160
   user, chmod 777 the templates_c directory, reload the page, then check the
 
161
   file ownership of the files created in templates_c. Or, you can check the
 
162
   httpd.conf (usually in /usr/local/apache/conf) file for this setting:
 
163
   User nobody
 
164
   Group nobody
 
165
 
 
166
Q: I get the following error when running Smarty: Warning: Wrong parameter
 
167
   count for preg_replace() in Smarty.class.php on line 371
 
168
A: preg_replace had a parameter added in PHP 4.0.2 that Smarty
 
169
   requires. Upgrade to at least 4.0.6 to fix all known PHP issues with
 
170
   Smarty.
 
171
 
 
172
Q: I get this error when passing variables to {include}:
 
173
   Fatal error: Call to undefined function: get_defined_vars() in
 
174
   /path/to/Smarty/templates_c/index.tpl.php on line 8
 
175
A: get_defined_vars() was added to PHP 4.0.4. If you plan on passing
 
176
   variables to included templates, you will need PHP 4.0.6 or later.
 
177
 
 
178
Q: I get PHP errors in my {if} tag logic.
 
179
A: All conditional qualifiers must be separated by spaces. This syntax will not
 
180
   work: {if $name=="Wilma"} You must instead do this: {if $name == "Wilma"}.
 
181
   The reason for this is syntax ambiguity. Both "==" and "eq" are equivalent
 
182
   in the template parser, so something like {if $nameeq"Wilma"} wouldn't be
 
183
   parsable by the tokenizer.
 
184
 
 
185
Q: I'm changing my php code and/or templates, and my results are not getting
 
186
   updated.
 
187
A: This may be the result of your compile or cache settings. If you are
 
188
   changing your php code, your templates will not necessarily get recompiled
 
189
   to reflect the changes. Use $force_compile during develpment to avoid these
 
190
   situations. Also turn off caching during development when you aren't
 
191
   specifically testing it. You can also remove everything from your
 
192
   compile_dir and cache_dir and reload the page to be sure everything gets
 
193
   regenerated.
 
194
 
 
195
Q: I'm running Windows 2000 and I get blank content. My compiled PHP files are
 
196
   also zero length.
 
197
A: There seems to be a problem with some W2k machines and exclusive file
 
198
   locking. Comment out the flock() call in _write_file to get around this,
 
199
   although be aware this could possibly cause a problem with simultaneous
 
200
   writes to a file, especially with caching turned on. NOTE: As of Smarty
 
201
   1.4.0, a workaround was put in place that should solve this.
 
202
 
 
203
Q: The template goes into an infinite loop when I include included templates
 
204
   that pass local variables
 
205
A: This was fixed in 1.3.2 (new global attribute)
 
206
 
 
207
Q: Javascript is causing Smarty errors in my templates.
 
208
A: Surround your javascript with {literal}{/literal} tags. See the docs.
 
209
 
 
210
Q: I get "SAFE MODE Restriction in effect. ..."-errors when running smarty.
 
211
A: Use $smarty->use_sub_dirs = false when running php in safe mode.
 
212
 
 
213
MISC
 
214
----
 
215
 
 
216
Q: Can I use Macromedia's Dreamweaver to edit my templates?
 
217
A: Certainly. You might want to change your tag delimiters from {} to something
 
218
   that resembles valid HTML, like <!--{ }--> or <{ }> or something similar.
 
219
   This way the editor won't view the template tags as errors.
 
220
 
 
221
Q: Dreamweaver is urlencoding the template delimiters when they are in a SRC or
 
222
   HREF link. How do I get around this?
 
223
A: In Edit - Properties - Rewrite HTML you can specify if Dreamweaver should
 
224
   change special letters to %-equivalent or not. The default is on which
 
225
   produces this error.
 
226
 
 
227
HOWTO
 
228
-----
 
229
   
 
230
Q: How do I generate different cache files per template based on arguments
 
231
   passed to the page?
 
232
A: Use your $REQUEST_URI as the cache_id when fetching the page:
 
233
 
 
234
   global $REQUEST_URI; // if not already present
 
235
   $smarty->display('index.tpl',$REQUEST_URI);
 
236
 
 
237
   This will create a separate cache file for each unique URL when you call
 
238
   index.tpl. See the documentation for display() and fetch()
 
239
 
 
240
Q: How do I pass a template variable as a parameter? {function param={$varname}}
 
241
   does not work.
 
242
A: {function param=$varname} (You cannot nest template delimiters.)
 
243
 
 
244
Q: How do I include cached template(s) within a non-cached template?
 
245
A: One way to do it:
 
246
 
 
247
   $smarty->caching = true;
 
248
   $tpl1 = $smarty->fetch("internal1.tpl");
 
249
   $tpl2 = $smarty->fetch("internal2.tpl");
 
250
   $tpl3 = $smarty->fetch("internal3.tpl");
 
251
 
 
252
   $smarty->assign("tpl1_contents",$tpl1);
 
253
   $smarty->assign("tpl2_contents",$tpl2);
 
254
   $smarty->assign("tpl3_contents",$tpl3);
 
255
 
 
256
   $smarty->caching = false;
 
257
   $smarty->display('index.tpl');
 
258
 
 
259
   index.tpl
 
260
   ---------
 
261
 
 
262
   <table>
 
263
           <tr>
 
264
                   <td>{$tpl1_contents}</td>
 
265
                   <td>{$tpl2_contents}</td>
 
266
                   <td>{$tpl3_contents}</td>
 
267
           </tr>
 
268
   </table>
 
269
 
 
270
 
 
271
 
 
272
 
 
273
   Another approach:
 
274
 
 
275
   You could write a custom insert function to fetch your internal
 
276
   templates:
 
277
 
 
278
   <table>
 
279
           <tr>
 
280
                   <td>{insert name=fetch_tpl tpl="internal1.tpl"}</td>
 
281
                   <td>{insert name=fetch_tpl tpl="internal2.tpl"}</td>
 
282
                   <td>{insert name=fetch_tpl tpl="internal3.tpl"}</td>
 
283
           </tr>
 
284
   </table>