Files
smarty/FAQ

198 lines
9.8 KiB
Plaintext
Raw Normal View History

2001-09-16 20:19:14 +00:00
QUESTION INDEX
--------------
Q: What is Smarty?
Q: What's the difference between Smarty and other template engines?
Q: What do you mean "Compiled PHP Scripts" ?
Q: Why can't I just use APC <http://apc.communityconnect.com/> (or Zend Cache)?
Q: Why does smarty have a built in cache? Wouldn't it be better to handle this
in a separate class?
Q: Is Smarty faster than <insert other PHP template engine>?
Q: How can I be sure to get the best performance from Smarty?
Q: Do you have a mailing list?
Q: Smarty doesn't work.
Q: I get the following error when running Smarty:
Warning: Wrong parameter count for preg_replace() in
Smarty.class.php on line 371
Q: I get the following error when running Smarty:
Fatal error: Failed opening required 'PEAR.php'
(include_path='') in Config_File.class.php on line 3
Q: I get this error when passing variables to {include}:
Fatal error: Call to undefined function: get_defined_vars() in
/path/to/Smarty/templates_c/index.tpl.php on line 8
Q: I get PHP errors in my {if} tag logic.
Q: I'm changing my php code and/or templates, and my results are not getting
updated.
Q: I'm running Windows 2000 and I get blank content. My compiled PHP files are
also zero length.
Q: The template goes into an infinite loop when I include included templates
that pass local variables
Q: My ISP did not setup the PEAR repository, nor will they set it up. How do I
make Smarty run without it?
Q: Javascript is causing Smarty errors in my templates.
Q: Can I use Macromedia's Dreamweaver to edit my templates?
Q: Dreamweaver is urlencoding the template delimiters when they are in a SRC or
HREF link. How do I get around this?
2001-01-22 19:17:11 +00:00
GENERAL
-------
Q: What is Smarty?
A: Smarty is a template engine for PHP... but be aware this isn't just another
PHP template engine. It's much more than that.
Q: What's the difference between Smarty and other template engines?
A: Most other template engines for PHP provide basic variable substitution and
dynamic block functionality. Smarty takes a step further to be a "smart"
template engine, adding features such as configuration files, template
functions, variable modifiers (see the docs!) and making all of this
functionality as easy as possible to use for both programmers and template
2001-01-22 19:22:24 +00:00
designers. Smarty also compiles the templates into PHP scripts, eliminating
the need to parse the templates on every invocation, making Smarty extremely
scalable and managable for large application needs.
2001-01-22 19:17:11 +00:00
Q: What do you mean "Compiled PHP Scripts" ?
A: Smarty reads the template files and creates PHP scripts from them. Once
these PHP scripts are created, Smarty executes these, never having to parse
the template files again. If you change a template file, Smarty will
recreate the PHP script for it. All this is done automatically by Smarty.
Template designers never need to mess with the generated PHP scripts or even
know of their existance. (NOTE: you can turn off this compile checking step
in Smarty for increased performance.)
2001-01-22 19:17:11 +00:00
Q: Why can't I just use APC <http://apc.communityconnect.com/> (or Zend Cache)?
2001-04-11 20:54:35 +00:00
A: You certainly can. Smarty's cache and these cache solutions have nothing in
common. What APC does is caches compiled bytecode of your PHP scripts in
shared memory or in a file. This speeds up server response and saves the
compilation step. Smarty creates PHP scripts (which APC will cache nicely)
and also has it's own internal caching mechanism for the output of the
template contents. For example, if you have a template that requires several
database queries, Smarty can cache this output, saving the need to call the
database every time. APC cannot help you here. Smarty and APC (or Zend
Cache) actually complement each other nicely. If performance is of the
utmost importance, we would recommend using one of these with any PHP
application, using Smarty or not.
2001-04-24 15:16:14 +00:00
Q: Why does smarty have a built in cache? Wouldn't it be better to handle this
in a separate class?
A: Smarty's caching functionality is tightly integrated with the template
engine, making it quite a bit more flexible than a simple caching wrapper.
For instance, you can cache select portions of a template page. Let's say
you have a polling box on your site. With Smarty, you can leave the poll
dynamic and cache the rest of the page. You can also pass templates
multiple cache ids, meaning that a template can have several caches
depending on URL, cookies, etc.
Q: Is Smarty faster than <insert other PHP template engine>?
2001-03-02 22:54:21 +00:00
A: It could be. One of the strengths of Smarty is that it does not need to
parse the template files on every hit to the server. Version 1.3.1 has
many noticable performance tune-ups, so your best bet is to try some
benchmarks and compare for yourself.
The above comparison assumes that you are not using Smarty's built-in
ability to cache templates. If you are, that makes this comparison pretty
2001-03-02 22:54:21 +00:00
unfair since Smarty will basically be displaying static content instead of
2001-04-24 15:16:14 +00:00
generating templates, which will really speed things up especially for
complicated tests.
2001-03-02 22:54:21 +00:00
Q: How can I be sure to get the best performance from Smarty?
2001-04-11 20:54:35 +00:00
A: Be sure you set $compile_check=false once your templates are initially
compiled. This will skip the unneeded step of testing if the template has
changed since it was last compiled. If you have complex pages that don't
change too often, turn on the caching engine and adjust your application so
it doesn't do unnecessary work (like db calls) if a cached page is
available. See the documentation for examples.
2001-03-02 22:54:21 +00:00
2001-01-26 17:47:59 +00:00
Q: Do you have a mailing list?
A: Yes. Subscribe by sending an e-mail to subscribe-smarty@lists.ispi.net. This
2001-04-24 15:16:14 +00:00
is also archived at http://marc.theaimsgroup.com/?l=smarty&r=1&w=2
2001-01-26 17:47:59 +00:00
2001-01-19 16:10:06 +00:00
TROUBLESHOOTING
---------------
2001-01-21 22:17:28 +00:00
Q: Smarty doesn't work.
A: You must be using PHP 4.0.4pl1 or later to fix all known problems
2001-01-22 19:22:24 +00:00
Smarty has with PHP. Read the BUGS file for more info.
2001-01-21 22:17:28 +00:00
2001-01-19 16:10:06 +00:00
Q: I get the following error when running Smarty:
Warning: Wrong parameter count for preg_replace() in
Smarty.class.php on line 371
A: preg_replace had a parameter added in PHP 4.0.2 that Smarty
2001-01-21 22:17:28 +00:00
requires. Upgrade to at least 4.0.4pl to fix all known PHP issues with
2001-01-19 16:10:06 +00:00
Smarty.
2001-01-21 22:17:28 +00:00
Q: I get the following error when running Smarty:
Fatal error: Failed opening required 'PEAR.php'
(include_path='') in Config_File.class.php on line 3
A: Smarty uses the PEAR libraries for some of its error handling routines.
PEAR libraries come with the distribution of PHP. Be sure that the path to
these libraries is included in your php include_path. Unix users check
/usr/local/lib/php. Windows users check C:\php\pear. You may also need to
change the filename from PEAR.php.in to PEAR.php (windows distribution)
Example entry in php.ini:
(unix) include_path=".:/usr/local/lib/php"
(windows) include_path=".;\php\pear"
2001-01-21 22:17:28 +00:00
2001-01-26 19:35:15 +00:00
Q: I get this error when passing variables to {include}:
Fatal error: Call to undefined function: get_defined_vars() in
/path/to/Smarty/templates_c/index.tpl.php on line 8
A: get_defined_vars() was added to PHP 4.0.4. If you plan on passing
variables to included templates, you will need PHP 4.0.4 or later.
Q: I get PHP errors in my {if} tag logic.
A: All conditional qualifiers must be separated by spaces. This syntax will not
work: {if $name=="Wilma"} You must instead do this: {if $name == "Wilma"}.
The reason for this is syntax ambiguity. Both "==" and "eq" are equivalent
in the template parser, so something like {if $nameeq"Wilma"} wouldn't be
parsable by the tokenizer.
2001-02-20 21:58:09 +00:00
Q: I'm changing my php code and/or templates, and my results are not getting
updated.
A: This may be the result of your compile or cache settings. If you are
changing your php code, your templates will not necessarily get recompiled
to reflect the changes. Use $force_compile during develpment to avoid these
situations. Also turn off caching during development when you aren't
specifically testing it. You can also remove everything from your
compile_dir and cache_dir and reload the page to be sure everything gets
regenerated.
Q: I'm running Windows 2000 and I get blank content. My compiled PHP files are
also zero length.
A: There seems to be a problem with some W2k machines and exclusive file
locking. Comment out the flock() call in _write_file to get around this,
although be aware this could possibly cause a problem with simultaneous
2001-04-11 20:54:35 +00:00
writes to a file, especially with caching turned on. NOTE: As of Smarty
1.4.0, a workaround was put in place that should solve this.
Q: The template goes into an infinite loop when I include included templates
that pass local variables
A: This was fixed in 1.3.2 (new global attribute)
2001-04-11 20:54:35 +00:00
Q: My ISP did not setup the PEAR repository, nor will they set it up. How do I
make Smarty run without it?
A: The easiest thing to do is grab all of PEAR and install it locally for your
own use. There's nothing that says PEAR must be installed in its default
directory. There won't be a version of Smarty that runs without PEAR, as it
2001-04-30 14:08:00 +00:00
dependant on it, and may become moreso in the future.
Q: Javascript is causing Smarty errors in my templates.
A: Surround your javascript with {literal}{/literal} tags. See the docs.
DREAMWEAVER
-----------
Q: Can I use Macromedia's Dreamweaver to edit my templates?
A: Certainly. You might want to change your tag delimiters from {} to something
that resembles valid HTML, like <!--{ }--> or <{ }> or something similar.
This way the editor won't view the template tags as errors.
Q: Dreamweaver is urlencoding the template delimiters when they are in a SRC or
HREF link. How do I get around this?
A: In Edit - Properties - Rewrite HTML you can specify if Dreamweaver should
change special letters to %-equivalent or not. The default is on which
produces this error.