source: branches/feature-module-update/data/module/Smarty/FAQ @ 15079

Revision 15079, 12.4 KB checked in by nanasess, 17 years ago (diff)

svn:mime-type application/x-httpd-php; charset=UTF-8 設定

  • Property svn:mime-type set to application/x-httpd-php; charset=UTF-8
Line 
1QUESTION INDEX
2--------------
3
4GENERAL
5
6Q: What is Smarty?
7Q: What's the difference between Smarty and other template engines?
8Q: What do you mean "Compiled PHP Scripts" ?
9Q: Why can't I just use PHPA (http://php-accelerator.co.uk) or Zend Cache?
10Q: Why does smarty have a built in cache? Wouldn't it be better to handle this
11   in a separate class?
12Q: Is Smarty faster than <insert other PHP template engine>?
13Q: How can I be sure to get the best performance from Smarty?
14Q: Do you have a mailing list?
15Q: Can you change the mailing list so reply-to sends to the list and not the
16   user?
17
18TROUBLESHOOTING
19
20Q: Smarty doesn't work.
21Q: 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
24Q: I get the following error when running Smarty:
25   Warning: Wrong parameter count for preg_replace() in
26   Smarty.class.php on line 371
27Q: 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
30Q: I get PHP errors in my {if} tag logic.
31Q: I'm changing my php code and/or templates, and my results are not getting
32   updated.
33Q: I'm running Windows 2000 and I get blank content. My compiled PHP files are
34   also zero length.
35Q: The template goes into an infinite loop when I include included templates
36   that pass local variables
37Q: Javascript is causing Smarty errors in my templates.
38Q: I get "SAFE MODE Restriction in effect. ..."-errors when running smarty.
39
40MISC
41
42Q: Can I use Macromedia's Dreamweaver to edit my templates?
43Q: Dreamweaver is urlencoding the template delimiters when they are in a SRC or
44   HREF link. How do I get around this?
45
46HOWTO
47
48Q: How do I generate different cache files per template based on arguments
49   passed to the page?
50Q: How do I pass a template variable as a parameter? {function param={$varname}}
51   does not work.
52Q: How do I include cached template(s) within a non-cached template?
53
54
55GENERAL
56-------
57
58Q: What is Smarty?
59A: 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
62Q: What's the difference between Smarty and other template engines?
63A: 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
72Q: What do you mean "Compiled PHP Scripts" ?
73A: 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
81Q: Why can't I just use PHPA (http://php-accelerator.co.uk) or Zend Cache?
82A: 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
95Q: Why does Smarty have a built in cache? Wouldn't it be better to handle this
96   in a separate class?
97A: 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
105Q: Is Smarty faster than <insert other PHP template engine>?
106A: 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
113Q: How can I be sure to get the best performance from Smarty?
114A: 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   
121Q: Do you have a mailing list?
122A:  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
141Q: Can you change the mailing list so Reply-To sends to the list and not the
142   user?
143A: 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
146TROUBLESHOOTING
147---------------
148
149Q: Smarty doesn't work.
150A: 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
153Q: 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
156A: 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
166Q: I get the following error when running Smarty: Warning: Wrong parameter
167   count for preg_replace() in Smarty.class.php on line 371
168A: 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
172Q: 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
175A: 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
178Q: I get PHP errors in my {if} tag logic.
179A: 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
185Q: I'm changing my php code and/or templates, and my results are not getting
186   updated.
187A: 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
195Q: I'm running Windows 2000 and I get blank content. My compiled PHP files are
196   also zero length.
197A: 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
203Q: The template goes into an infinite loop when I include included templates
204   that pass local variables
205A: This was fixed in 1.3.2 (new global attribute)
206
207Q: Javascript is causing Smarty errors in my templates.
208A: Surround your javascript with {literal}{/literal} tags. See the docs.
209
210Q: I get "SAFE MODE Restriction in effect. ..."-errors when running smarty.
211A: Use $smarty->use_sub_dirs = false when running php in safe mode.
212
213MISC
214----
215
216Q: Can I use Macromedia's Dreamweaver to edit my templates?
217A: 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
221Q: Dreamweaver is urlencoding the template delimiters when they are in a SRC or
222   HREF link. How do I get around this?
223A: 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
227HOWTO
228-----
229   
230Q: How do I generate different cache files per template based on arguments
231   passed to the page?
232A: 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
240Q: How do I pass a template variable as a parameter? {function param={$varname}}
241   does not work.
242A: {function param=$varname} (You cannot nest template delimiters.)
243
244Q: How do I include cached template(s) within a non-cached template?
245A: 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>
Note: See TracBrowser for help on using the repository browser.