[ Index ] |
|
Code source de Serendipity 1.2 |
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>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sat Nov 24 09:00:37 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |