| 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 | [email protected] (subscribe to the general list) |
|---|
| 129 | [email protected] (unsubscribe from the general list) |
|---|
| 130 | [email protected] (subscribe to digest) |
|---|
| 131 | [email protected] (unsubscribe from digest) |
|---|
| 132 | [email protected] (subscribe to the dev list) |
|---|
| 133 | [email protected] (unsubscribe from the dev list) |
|---|
| 134 | [email protected] (subscribe to the cvs list) |
|---|
| 135 | [email protected] (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> |
|---|