mirror of
https://github.com/smarty-php/smarty.git
synced 2025-08-05 19:04:27 +02:00
update documenation, bug fixes
This commit is contained in:
22
CREDITS
Normal file
22
CREDITS
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
Monte Ohrt <monte@ispi.net>:
|
||||||
|
Concepted compiling templates into PHP scripts, wrote initial "proof of
|
||||||
|
concept" implementation, and maintains documentation & code base.
|
||||||
|
|
||||||
|
Andrei Zmievski <andrei@ispi.net>:
|
||||||
|
Rewrote parser from scratch and maintains code base.
|
||||||
|
|
||||||
|
Anne Holz <anne@ispi.net>:
|
||||||
|
Provided creative input with respect to web design.
|
||||||
|
|
||||||
|
Frank Kromann <fmk@php.net>:
|
||||||
|
Idea of custom function ability.
|
||||||
|
|
||||||
|
A special thanks goes to the people that have contributed other templating
|
||||||
|
solutions to the PHP community which we learned a lot from.
|
||||||
|
|
||||||
|
A special thanks goes to the members of the php-template mailing list and
|
||||||
|
the smarty mailing list, whom sharing and bringing many ideas to the table and
|
||||||
|
contributing source code, too numerous to list.
|
||||||
|
|
||||||
|
Rasmus Lerdorf <rasmus@php.net>: For starting what eventually became
|
||||||
|
the coolest programming language ever.
|
22
FAQ
22
FAQ
@@ -37,6 +37,16 @@ A: You certainly can. Smarty's cache and these cache solutions have nothing in
|
|||||||
utmost importance, we would recommend using one of these with any PHP
|
utmost importance, we would recommend using one of these with any PHP
|
||||||
application, using Smarty or not.
|
application, using Smarty or not.
|
||||||
|
|
||||||
|
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>?
|
Q: Is Smarty faster than <insert other PHP template engine>?
|
||||||
A: It could be. One of the strengths of Smarty is that it does not need to
|
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
|
parse the template files on every hit to the server. Version 1.3.1 has
|
||||||
@@ -46,8 +56,8 @@ A: It could be. One of the strengths of Smarty is that it does not need to
|
|||||||
The above comparison assumes that you are not using Smarty's built-in
|
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
|
ability to cache templates. If you are, that makes this comparison pretty
|
||||||
unfair since Smarty will basically be displaying static content instead of
|
unfair since Smarty will basically be displaying static content instead of
|
||||||
generating templates, which will speed things up, especially for compilcated
|
generating templates, which will really speed things up especially for
|
||||||
templates.
|
complicated tests.
|
||||||
|
|
||||||
Q: How can I be sure to get the best performance from Smarty?
|
Q: How can I be sure to get the best performance from Smarty?
|
||||||
A: Be sure you set $compile_check=false once your templates are initially
|
A: Be sure you set $compile_check=false once your templates are initially
|
||||||
@@ -64,7 +74,7 @@ A: Certainly. You might want to change your tag delimiters from {} to something
|
|||||||
|
|
||||||
Q: Do you have a mailing list?
|
Q: Do you have a mailing list?
|
||||||
A: Yes. Subscribe by sending an e-mail to subscribe-smarty@lists.ispi.net. This
|
A: Yes. Subscribe by sending an e-mail to subscribe-smarty@lists.ispi.net. This
|
||||||
is also archived at http://marc.theaimsgroup.com/ under www/smarty
|
is also archived at http://marc.theaimsgroup.com/?l=smarty&r=1&w=2
|
||||||
|
|
||||||
|
|
||||||
TROUBLESHOOTING
|
TROUBLESHOOTING
|
||||||
@@ -124,12 +134,6 @@ Q: The template goes into an infinite loop when I include included templates
|
|||||||
that pass local variables
|
that pass local variables
|
||||||
A: This was fixed in 1.3.2 (new global attribute)
|
A: This was fixed in 1.3.2 (new global attribute)
|
||||||
|
|
||||||
Q: How can I tell what compiled template file corresponds to to which source
|
|
||||||
file? (Smarty 1.4.0 and later have encoded compiled filenames)
|
|
||||||
A: Compiled template files have headers that tell which source file was used to
|
|
||||||
compile it. Grep for the pathname, or use "head -2 *" to see the first two
|
|
||||||
lines of each compiled file.
|
|
||||||
|
|
||||||
Q: My ISP did not setup the PEAR repository, nor will they set it up. How do I
|
Q: My ISP did not setup the PEAR repository, nor will they set it up. How do I
|
||||||
make Smarty run without it?
|
make Smarty run without it?
|
||||||
A: The easiest thing to do is grab all of PEAR and install it locally for your
|
A: The easiest thing to do is grab all of PEAR and install it locally for your
|
||||||
|
11
NEWS
11
NEWS
@@ -1,17 +1,22 @@
|
|||||||
Version 1.4.0
|
Version 1.4.0
|
||||||
-------------
|
-------------
|
||||||
|
- updated GLOBAL_ASSIGN to take SCRIPT_NAME from HTTP_SERVER_VARS
|
||||||
|
instead of global variable. You can also assign several variables
|
||||||
|
in one shot with an array. (Monte)
|
||||||
- added template filters (Monte)
|
- added template filters (Monte)
|
||||||
- added RELEASE_NOTES file to distribution (Monte)
|
- added RELEASE_NOTES file to distribution (Monte)
|
||||||
|
- moved CREDITS out of manual into its own file (Monte)
|
||||||
- added register_resource() and unregister_resource() functions (Monte)
|
- added register_resource() and unregister_resource() functions (Monte)
|
||||||
- changed syntax of variables called within section loops,
|
- changed syntax of variables called within section loops,
|
||||||
supplied fix_vars.php script to fix old syntax (Andrei)
|
supplied fix_vars.php script to fix old syntax (Andrei)
|
||||||
- added $check_cached_insert_tags to speed up cached pages if
|
- added $insert_tag_check to speed up cached pages if
|
||||||
{insert ...} is not used (Monte)
|
{insert ...} is not used (Monte)
|
||||||
- added $compiler_class variable to allow specifying a different compiler
|
- added $compiler_class variable to allow specifying a different compiler
|
||||||
class. (Andrei)
|
class. (Andrei)
|
||||||
- changed Smarty to compile templates at runtime, allowing for arbitrary
|
- changed Smarty to compile templates at runtime, allowing for arbitrary
|
||||||
template resources. Also added fix for LOCK_EX under windows and changed
|
template resources. (Monte)
|
||||||
a couple file permissions for security. (Monte)
|
- added fix for LOCK_EX under windows and changed a couple file
|
||||||
|
permissions for security. (Monte)
|
||||||
- allow arbitrary date strings to date_format, html_select_date and
|
- allow arbitrary date strings to date_format, html_select_date and
|
||||||
html_select_time (Monte)
|
html_select_time (Monte)
|
||||||
|
|
||||||
|
3
README
3
README
@@ -52,11 +52,12 @@ DESCRIPTION:
|
|||||||
{}, {{}}, <!--{}-->, or whatever you like.
|
{}, {{}}, <!--{}-->, or whatever you like.
|
||||||
* template if/elseif/else/endif constructs are passed to the PHP parser,
|
* template if/elseif/else/endif constructs are passed to the PHP parser,
|
||||||
so the if syntax can be as simple or as complex as you like.
|
so the if syntax can be as simple or as complex as you like.
|
||||||
* unlimited nesting of sections,ifs, etc. allowed
|
* unlimited nesting of sections, ifs, etc. allowed
|
||||||
* it is possible to imbed PHP code right in your template files,
|
* it is possible to imbed PHP code right in your template files,
|
||||||
although not recommended and doubtfully needed since the engine
|
although not recommended and doubtfully needed since the engine
|
||||||
is so customizable.
|
is so customizable.
|
||||||
* built in caching
|
* built in caching
|
||||||
|
* arbitrary template sources (flat files, databases, etc.)
|
||||||
|
|
||||||
COPYRIGHT:
|
COPYRIGHT:
|
||||||
Copyright (c) 2001 ispi of Lincoln, Inc. All rights reserved.
|
Copyright (c) 2001 ispi of Lincoln, Inc. All rights reserved.
|
||||||
|
@@ -15,6 +15,10 @@ fix_vars.php *.tpl' Be sure you have proper write permission, and backup your
|
|||||||
scripts first to be safe! The examples in the 1.4.0 documentation have been
|
scripts first to be safe! The examples in the 1.4.0 documentation have been
|
||||||
updated to reflect the changes.
|
updated to reflect the changes.
|
||||||
|
|
||||||
|
cd /path/to/templates
|
||||||
|
cp /path/to/fix_vars.php .
|
||||||
|
find . -name "*.tpl" -exec php -q ./fix_vars.php {} \;
|
||||||
|
|
||||||
NEW AND IMPROVED COMPILER
|
NEW AND IMPROVED COMPILER
|
||||||
|
|
||||||
Smarty 1.4.0 also has a new compilation process. Instead of compiling all the
|
Smarty 1.4.0 also has a new compilation process. Instead of compiling all the
|
||||||
@@ -42,25 +46,25 @@ etc. Just give some formats a try and see what works.
|
|||||||
|
|
||||||
Smarty now has template filters, meaning that you can run your templates
|
Smarty now has template filters, meaning that you can run your templates
|
||||||
through custom functions before they are compiled. This is good for things like
|
through custom functions before they are compiled. This is good for things like
|
||||||
removing unwanted comments, "beautifiying" your template code, keep an eye on
|
removing unwanted comments, "beautifying" your template code, keep an eye on
|
||||||
words or functionality people are putting in templates, translating XML ->
|
words or functionality people are putting in templates, translating XML ->
|
||||||
HTML, etc. See the register_filter documentation for more info.
|
HTML, etc. See the register_filter documentation for more info.
|
||||||
|
|
||||||
The format of the files created in the $compile_dir are now a bit different.
|
|
||||||
Instead of reflecting the name and path of the source template, it uses an
|
|
||||||
encoded file name, all in the top level directory. This was done to make way
|
|
||||||
for arbitrary template resources. Each compiled template has a header that
|
|
||||||
states what template resource was used to create it. From a unix command
|
|
||||||
prompt, you can use "head -2 *" to see the first two lines of each file.
|
|
||||||
|
|
||||||
UPGRADE NOTES
|
UPGRADE NOTES
|
||||||
|
|
||||||
When upgrading to 1.4.0, you will want to first clear out all your files in the
|
The format of the files created in the $compile_dir are now a bit different.
|
||||||
$compile_dir, since it now uses a new format. If you have $compile_check set to
|
The compiled template filename is the template resource name url-encoded.
|
||||||
false and the compiled template does not yet exist, it will compile it
|
Therefore, all compiled files are now in the top directory of $compile_dir.
|
||||||
regardless of this setting. This way you can clear out the $compile_dir and not
|
This was done to make way for arbitrary template resources. Each compiled
|
||||||
worry about setting $compile_check to true to get the inital compilation under
|
template has a header that states what template resource was used to create it.
|
||||||
way.
|
From a unix command prompt, you can use "head -2 *" to see the first two lines
|
||||||
|
of each file.
|
||||||
|
|
||||||
|
When upgrading to 1.4.0, you will want to clear out all your old files in the
|
||||||
|
$compile_dir. If you have $compile_check set to false and the compiled template
|
||||||
|
does not yet exist, it will compile it regardless of this setting. This way you
|
||||||
|
can clear out the $compile_dir and not worry about setting $compile_check to
|
||||||
|
true to get the inital compilation under way.
|
||||||
|
|
||||||
1.3.2
|
1.3.2
|
||||||
-----
|
-----
|
||||||
|
@@ -60,9 +60,13 @@ class Smarty
|
|||||||
var $compile_dir = './templates_c'; // name of directory for compiled templates
|
var $compile_dir = './templates_c'; // name of directory for compiled templates
|
||||||
var $config_dir = './configs'; // directory where config files are located
|
var $config_dir = './configs'; // directory where config files are located
|
||||||
|
|
||||||
var $global_assign = array('SCRIPT_NAME'); // variables from the GLOBALS array
|
var $global_assign = array( 'HTTP_SERVER_VARS' =>
|
||||||
// that are implicitly assigned
|
array( 'SCRIPT_NAME' )
|
||||||
// to all templates
|
); // variables from the GLOBALS array
|
||||||
|
// that are implicitly assigned
|
||||||
|
// to all templates
|
||||||
|
var $undefined = null; // undefined variables in $global_assign will be
|
||||||
|
// created with this value
|
||||||
var $compile_check = true; // whether to check for compiling step or not:
|
var $compile_check = true; // whether to check for compiling step or not:
|
||||||
// This is generally set to false once the
|
// This is generally set to false once the
|
||||||
// application is entered into production and
|
// application is entered into production and
|
||||||
@@ -78,12 +82,12 @@ class Smarty
|
|||||||
var $cache_dir = './cache'; // name of directory for template cache
|
var $cache_dir = './cache'; // name of directory for template cache
|
||||||
var $cache_lifetime = 3600; // number of seconds cached content will persist.
|
var $cache_lifetime = 3600; // number of seconds cached content will persist.
|
||||||
// 0 = never expires. default is one hour (3600)
|
// 0 = never expires. default is one hour (3600)
|
||||||
var $check_cached_insert_tags = true; // if you have caching turned on and you
|
var $insert_tag_check = true; // if you have caching turned on and you
|
||||||
// don't use {insert} tags anywhere
|
// don't use {insert} tags anywhere
|
||||||
// in your templates, set this to false.
|
// in your templates, set this to false.
|
||||||
// this will tell Smarty not to look for
|
// this will tell Smarty not to look for
|
||||||
// insert tags and speed up cached page
|
// insert tags and speed up cached page
|
||||||
// fetches.
|
// fetches.
|
||||||
|
|
||||||
var $tpl_file_ext = '.tpl'; // template file extention
|
var $tpl_file_ext = '.tpl'; // template file extention
|
||||||
|
|
||||||
@@ -139,7 +143,7 @@ class Smarty
|
|||||||
|
|
||||||
// internal vars
|
// internal vars
|
||||||
var $_error_msg = false; // error messages. true/false
|
var $_error_msg = false; // error messages. true/false
|
||||||
var $_tpl_vars = array();
|
var $_tpl_vars = array(); // where assigned template vars are kept
|
||||||
var $_smarty_md5 = 'f8d698aea36fcbead2b9d5359ffca76f'; // md5 checksum of the string 'Smarty'
|
var $_smarty_md5 = 'f8d698aea36fcbead2b9d5359ffca76f'; // md5 checksum of the string 'Smarty'
|
||||||
|
|
||||||
/*======================================================================*\
|
/*======================================================================*\
|
||||||
@@ -148,9 +152,21 @@ class Smarty
|
|||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function Smarty()
|
function Smarty()
|
||||||
{
|
{
|
||||||
foreach ($this->global_assign as $var_name) {
|
foreach ($this->global_assign as $key => $var_name) {
|
||||||
if (isset($GLOBALS[$var_name])) {
|
if (is_array($var_name)) {
|
||||||
$this->assign($var_name, $GLOBALS[$var_name]);
|
foreach ($var_name as $var) {
|
||||||
|
if (isset($GLOBALS[$key][$var])) {
|
||||||
|
$this->assign($var, $GLOBALS[$key][$var]);
|
||||||
|
} else {
|
||||||
|
$this->assign($var, $this->undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (isset($GLOBALS[$var_name])) {
|
||||||
|
$this->assign($var_name, $GLOBALS[$var_name]);
|
||||||
|
} else {
|
||||||
|
$this->assign($var_name, $this->undefined);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -410,7 +426,7 @@ class Smarty
|
|||||||
($this->cache_lifetime == 0 ||
|
($this->cache_lifetime == 0 ||
|
||||||
(time() - filemtime($cache_file) <= $this->cache_lifetime))) {
|
(time() - filemtime($cache_file) <= $this->cache_lifetime))) {
|
||||||
$results = $this->_read_file($cache_file);
|
$results = $this->_read_file($cache_file);
|
||||||
if($this->check_cached_insert_tags) {
|
if($this->insert_tag_check) {
|
||||||
$results = $this->_process_cached_inserts($results);
|
$results = $this->_process_cached_inserts($results);
|
||||||
}
|
}
|
||||||
if ($display) {
|
if ($display) {
|
||||||
@@ -500,8 +516,8 @@ class Smarty
|
|||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function _fetch_compile_path($tpl_file, &$compile_path)
|
function _fetch_compile_path($tpl_file, &$compile_path)
|
||||||
{
|
{
|
||||||
// for now, everything is in $compile_dir
|
// everything is in $compile_dir
|
||||||
$compile_path = $this->compile_dir.'/'.md5($tpl_file).'.php';
|
$compile_path = $this->compile_dir.'/'.urlencode($tpl_file).'.php';
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -511,7 +527,7 @@ class Smarty
|
|||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function _compiled_template_exists($include_path)
|
function _compiled_template_exists($include_path)
|
||||||
{
|
{
|
||||||
// for now, everything is in $compile_dir
|
// everything is in $compile_dir
|
||||||
return file_exists($include_path);
|
return file_exists($include_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -521,7 +537,7 @@ class Smarty
|
|||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function _fetch_compiled_template_timestamp($include_path)
|
function _fetch_compiled_template_timestamp($include_path)
|
||||||
{
|
{
|
||||||
// for now, everything is in $compile_dir
|
// everything is in $compile_dir
|
||||||
return filemtime($include_path);
|
return filemtime($include_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -531,7 +547,7 @@ class Smarty
|
|||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function _write_compiled_template($compile_path, $template_compiled)
|
function _write_compiled_template($compile_path, $template_compiled)
|
||||||
{
|
{
|
||||||
// for now, we save everything into $compile_dir
|
// we save everything into $compile_dir
|
||||||
$this->_write_file($compile_path, $template_compiled);
|
$this->_write_file($compile_path, $template_compiled);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -542,6 +558,7 @@ class Smarty
|
|||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function _fetch_template_source($tpl_path, &$template_source, &$template_timestamp)
|
function _fetch_template_source($tpl_path, &$template_source, &$template_timestamp)
|
||||||
{
|
{
|
||||||
|
|
||||||
// split tpl_path by the first colon
|
// split tpl_path by the first colon
|
||||||
$tpl_path_parts = explode(':', $tpl_path, 2);
|
$tpl_path_parts = explode(':', $tpl_path, 2);
|
||||||
|
|
||||||
|
@@ -53,6 +53,7 @@ class Smarty_Compiler extends Smarty {
|
|||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function _compile_file($tpl_file, $template_source, &$template_compiled)
|
function _compile_file($tpl_file, $template_source, &$template_compiled)
|
||||||
{
|
{
|
||||||
|
|
||||||
// run template source through functions registered in filter_functions
|
// run template source through functions registered in filter_functions
|
||||||
if(is_array($this->filter_functions) && count($this->filter_functions) > 0) {
|
if(is_array($this->filter_functions) && count($this->filter_functions) > 0) {
|
||||||
foreach($this->filter_functions as $curr_func) {
|
foreach($this->filter_functions as $curr_func) {
|
||||||
@@ -64,7 +65,7 @@ class Smarty_Compiler extends Smarty {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->_current_file = $template_source;
|
$this->_current_file = $tpl_file;
|
||||||
$this->_current_line_no = 1;
|
$this->_current_line_no = 1;
|
||||||
$ldq = preg_quote($this->left_delimiter, '!');
|
$ldq = preg_quote($this->left_delimiter, '!');
|
||||||
$rdq = preg_quote($this->right_delimiter, '!');
|
$rdq = preg_quote($this->right_delimiter, '!');
|
||||||
|
396
docs.sgml
396
docs.sgml
@@ -85,7 +85,8 @@
|
|||||||
syntax. So what if we combined the two strengths? Thus, Smarty was
|
syntax. So what if we combined the two strengths? Thus, Smarty was
|
||||||
born...
|
born...
|
||||||
</para>
|
</para>
|
||||||
<sect1><title>What is Smarty?</title>
|
<sect1>
|
||||||
|
<title>What is Smarty?</title>
|
||||||
<para>
|
<para>
|
||||||
Smarty is a template engine for PHP. One of the unique aspects about
|
Smarty is a template engine for PHP. One of the unique aspects about
|
||||||
Smarty that sets it apart from other templating solutions is that it
|
Smarty that sets it apart from other templating solutions is that it
|
||||||
@@ -116,6 +117,7 @@
|
|||||||
although this may not be needed (nor recommended)
|
although this may not be needed (nor recommended)
|
||||||
since the engine is so customizable.</para></listitem>
|
since the engine is so customizable.</para></listitem>
|
||||||
<listitem><para>Built-in caching support (new in 1.3.0)</para></listitem>
|
<listitem><para>Built-in caching support (new in 1.3.0)</para></listitem>
|
||||||
|
<listitem><para>Arbitrary template sources (new in 1.4.0)</para></listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
</sect1>
|
</sect1>
|
||||||
<sect1>
|
<sect1>
|
||||||
@@ -359,6 +361,15 @@ chmod 700 cache
|
|||||||
added to Smarty 1.3.0.
|
added to Smarty 1.3.0.
|
||||||
</para>
|
</para>
|
||||||
</sect2>
|
</sect2>
|
||||||
|
<sect2 id="setting.insert.tag.check">
|
||||||
|
<title>$insert_tag_check</title>
|
||||||
|
<para>
|
||||||
|
If you have $caching enabled and you do not use the <link
|
||||||
|
linkend="function.insert">insert</link> tag anywhere in your
|
||||||
|
templates, set this to false. This saves the insert tag search,
|
||||||
|
speeding up cached page fetches.
|
||||||
|
</para>
|
||||||
|
</sect2>
|
||||||
<sect2 id="setting.tpl.file.ext">
|
<sect2 id="setting.tpl.file.ext">
|
||||||
<title>$tpl_file_ext</title>
|
<title>$tpl_file_ext</title>
|
||||||
<para>
|
<para>
|
||||||
@@ -461,7 +472,7 @@ chmod 700 cache
|
|||||||
These functions are used in the PHP portion of your application.
|
These functions are used in the PHP portion of your application.
|
||||||
</para>
|
</para>
|
||||||
<sect1>
|
<sect1>
|
||||||
<title>Smarty API Functions</title>
|
<title>API Functions</title>
|
||||||
<sect2 id="api.assign">
|
<sect2 id="api.assign">
|
||||||
<title>assign</title>
|
<title>assign</title>
|
||||||
<funcsynopsis>
|
<funcsynopsis>
|
||||||
@@ -575,39 +586,6 @@ $smarty->clear_assign(array("Name","Address","Zip"));
|
|||||||
// clear all assigned variables
|
// clear all assigned variables
|
||||||
$smarty->clear_all_assign();
|
$smarty->clear_all_assign();
|
||||||
|
|
||||||
</programlisting>
|
|
||||||
</example>
|
|
||||||
</sect2>
|
|
||||||
<sect2 id="api.register.function">
|
|
||||||
<title>register_function</title>
|
|
||||||
<funcsynopsis>
|
|
||||||
<funcprototype>
|
|
||||||
<funcdef>void <function>register_function</function></funcdef>
|
|
||||||
<paramdef>string <parameter>funcname</parameter></paramdef>
|
|
||||||
<paramdef>string <parameter>funcimpl</parameter></paramdef>
|
|
||||||
</funcprototype>
|
|
||||||
</funcsynopsis>
|
|
||||||
<para>
|
|
||||||
Use this to dynamically register functions with Smarty. Pass in
|
|
||||||
the template function name, followed by the actual PHP function
|
|
||||||
name that it will map to.
|
|
||||||
</para>
|
|
||||||
<example>
|
|
||||||
<title>register_function</title>
|
|
||||||
<programlisting>
|
|
||||||
|
|
||||||
$smarty->register_function("date_now","print_current_date");
|
|
||||||
|
|
||||||
function print_current_date ($params) {
|
|
||||||
extract($params);
|
|
||||||
if(empty($format))
|
|
||||||
$format="%b %e, %Y";
|
|
||||||
echo strftime($format,time());
|
|
||||||
}
|
|
||||||
|
|
||||||
// now you can use this in Smarty to print the current date: {date_now}
|
|
||||||
// or, {date_now format="%Y/%m/%d"} to format it.
|
|
||||||
|
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</sect2>
|
</sect2>
|
||||||
@@ -661,6 +639,39 @@ $smarty->clear_cache("index.tpl","CACHEID");
|
|||||||
$smarty->clear_all_cache();
|
$smarty->clear_all_cache();
|
||||||
|
|
||||||
|
|
||||||
|
</programlisting>
|
||||||
|
</example>
|
||||||
|
</sect2>
|
||||||
|
<sect2 id="api.register.function">
|
||||||
|
<title>register_function</title>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>void <function>register_function</function></funcdef>
|
||||||
|
<paramdef>string <parameter>funcname</parameter></paramdef>
|
||||||
|
<paramdef>string <parameter>funcimpl</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
<para>
|
||||||
|
Use this to dynamically register functions with Smarty. Pass in
|
||||||
|
the template function name, followed by the actual PHP function
|
||||||
|
name that it will map to.
|
||||||
|
</para>
|
||||||
|
<example>
|
||||||
|
<title>register_function</title>
|
||||||
|
<programlisting>
|
||||||
|
|
||||||
|
$smarty->register_function("date_now","print_current_date");
|
||||||
|
|
||||||
|
function print_current_date ($params) {
|
||||||
|
extract($params);
|
||||||
|
if(empty($format))
|
||||||
|
$format="%b %e, %Y";
|
||||||
|
echo strftime($format,time());
|
||||||
|
}
|
||||||
|
|
||||||
|
// now you can use this in Smarty to print the current date: {date_now}
|
||||||
|
// or, {date_now format="%Y/%m/%d"} to format it.
|
||||||
|
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</sect2>
|
</sect2>
|
||||||
@@ -709,7 +720,7 @@ $smarty->unregister_modifier("fetch");
|
|||||||
|
|
||||||
$smarty->register_modifier("sslash","stripslashes");
|
$smarty->register_modifier("sslash","stripslashes");
|
||||||
|
|
||||||
// now you can use {$var} to strip slashes from variables
|
// now you can use {$var|sslash} to strip slashes from variables
|
||||||
|
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
@@ -999,7 +1010,7 @@ echo $output;
|
|||||||
</sect2>
|
</sect2>
|
||||||
</sect1>
|
</sect1>
|
||||||
<sect1 id="section.template.resources">
|
<sect1 id="section.template.resources">
|
||||||
<title>Smarty Template Resources</title>
|
<title>Template Resources</title>
|
||||||
<para>
|
<para>
|
||||||
Your templates may come from a variety of sources. When you display or
|
Your templates may come from a variety of sources. When you display or
|
||||||
fetch a template, or when you include a template from within another
|
fetch a template, or when you include a template from within another
|
||||||
@@ -1060,7 +1071,7 @@ $smarty->display("file:/path/to/my/templates/menu.tpl");
|
|||||||
retrieving templates from a database. You do this by first
|
retrieving templates from a database. You do this by first
|
||||||
registering your resource handler function, then creating your
|
registering your resource handler function, then creating your
|
||||||
function to get the template. Smarty expects your function to be of
|
function to get the template. Smarty expects your function to be of
|
||||||
this form: funcname($tpl_name,&tpl_source, &$tpl_timestamp)
|
this form: funcname($tpl_name,&$tpl_source, &$tpl_timestamp)
|
||||||
{} $tpl_name is passed into the function, and your function should
|
{} $tpl_name is passed into the function, and your function should
|
||||||
populate $tpl_source and $tpl_timestamp with the template source
|
populate $tpl_source and $tpl_timestamp with the template source
|
||||||
and the last modified time of the template respectively.
|
and the last modified time of the template respectively.
|
||||||
@@ -1083,6 +1094,7 @@ function get_db_template ($tpl_name, &$tpl_source, &$tpl_timestamp) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// register the resource name "db"
|
||||||
$smarty->register_resource("db" => "get_db_template");
|
$smarty->register_resource("db" => "get_db_template");
|
||||||
|
|
||||||
// using resource from php script
|
// using resource from php script
|
||||||
@@ -1096,7 +1108,7 @@ $smarty->display("db:index.tpl");
|
|||||||
</sect2>
|
</sect2>
|
||||||
</sect1>
|
</sect1>
|
||||||
<sect1 id="section.template.filters">
|
<sect1 id="section.template.filters">
|
||||||
<title>Smarty Template Filters</title>
|
<title>Template Filters</title>
|
||||||
<para>
|
<para>
|
||||||
Template filters are PHP functions that your templates are ran through
|
Template filters are PHP functions that your templates are ran through
|
||||||
before they are compiled. This is good for preprocessing your templates
|
before they are compiled. This is good for preprocessing your templates
|
||||||
@@ -3074,19 +3086,17 @@ OUTPUT:
|
|||||||
<sect1 id="variable.modifiers">
|
<sect1 id="variable.modifiers">
|
||||||
<title>Variable Modifiers</title>
|
<title>Variable Modifiers</title>
|
||||||
<para>
|
<para>
|
||||||
Variable modifiers are a bit different than
|
Variable modifiers are a bit different than <link
|
||||||
<link linkend="custom.functions">custom functions</link>.
|
linkend="custom.functions">custom functions</link>. Variable modifiers
|
||||||
Variable modifiers alter variable contents before they are displayed to
|
alter variable contents before they are displayed to the template. All
|
||||||
the template. All modifiers will get the value of the variable as the
|
modifiers will get the value of the variable as the first argument, and
|
||||||
first argument, and must return a single value. Modifier parameters are
|
must return a single value. Modifier parameters are separated by
|
||||||
separated by colons. Any additional parameters passed to a modifier are
|
colons. Any additional parameters passed to a modifier are passed as-is
|
||||||
passed as-is positionally, much like calling a PHP function. You can
|
positionally, much like calling a PHP function. You can also use native
|
||||||
also use native PHP functions as modifiers, but only if they expect the
|
PHP functions as modifiers, but only if they expect the correct
|
||||||
correct arguments. If they do not, you can always write a wrapper
|
arguments. If they do not, you can always write a wrapper function in
|
||||||
function in Smarty to get what you want (date_format is a wrapper
|
Smarty to get what you want. You can chain as many modifiers together
|
||||||
function to strftime() for example.) You can chain as many modifiers
|
on a variable as you like, separating each with a vertical pipe "|".
|
||||||
together on a variable as you like, separating each with a vertical
|
|
||||||
pipe "|".
|
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
NOTE: if you apply a modifier to an array instead of a single value
|
NOTE: if you apply a modifier to an array instead of a single value
|
||||||
@@ -3105,7 +3115,7 @@ OUTPUT:
|
|||||||
<programlisting>
|
<programlisting>
|
||||||
|
|
||||||
{$articleTitle}
|
{$articleTitle}
|
||||||
{$articleTitle}
|
{$articleTitle|capitalize}
|
||||||
|
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
|
|
||||||
@@ -3126,7 +3136,7 @@ Police Begin Campaign To Rundown Jaywalkers.
|
|||||||
|
|
||||||
|
|
||||||
{$articleTitle}
|
{$articleTitle}
|
||||||
{$articleTitle}
|
{$articleTitle|count_characters}
|
||||||
|
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
|
|
||||||
@@ -3147,7 +3157,7 @@ Cold Wave Linked to Temperatures
|
|||||||
|
|
||||||
|
|
||||||
{$articleTitle}
|
{$articleTitle}
|
||||||
{$articleTitle}
|
{$articleTitle|count_paragraphs}
|
||||||
|
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
|
|
||||||
@@ -3170,7 +3180,7 @@ Man is Fatally Slain. Death Causes Loneliness, Feeling of Isolation.
|
|||||||
|
|
||||||
|
|
||||||
{$articleTitle}
|
{$articleTitle}
|
||||||
{$articleTitle}
|
{$articleTitle|count_sentences}
|
||||||
|
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
|
|
||||||
@@ -3191,7 +3201,7 @@ Two Soviet Ships Collide - One Dies. Enraged Cow Injures Farmer with Axe.
|
|||||||
|
|
||||||
|
|
||||||
{$articleTitle}
|
{$articleTitle}
|
||||||
{$articleTitle}
|
{$articleTitle|count_words}
|
||||||
|
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
|
|
||||||
@@ -3242,8 +3252,8 @@ Dealers Will Hear Car Talk at Noon.
|
|||||||
<programlisting>
|
<programlisting>
|
||||||
|
|
||||||
{$currentDate}
|
{$currentDate}
|
||||||
{$currentDate}
|
{$currentDate|date_format:"%A, %B %e, %Y"}
|
||||||
{$currentDate}
|
{$currentDate|date_format:"%H:%M:%S"}
|
||||||
|
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
|
|
||||||
@@ -3382,7 +3392,7 @@ system's manpage for a full list of valid specifiers.
|
|||||||
<programlisting>
|
<programlisting>
|
||||||
|
|
||||||
{* this will display "no title" (without the quotes) if $articleTitle is empty *}
|
{* this will display "no title" (without the quotes) if $articleTitle is empty *}
|
||||||
{$articleTitle}
|
{$articleTitle|default:"no title"}
|
||||||
|
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
|
|
||||||
@@ -3432,9 +3442,9 @@ no title
|
|||||||
<programlisting>
|
<programlisting>
|
||||||
|
|
||||||
{$articleTitle}
|
{$articleTitle}
|
||||||
{$articleTitle}
|
{$articleTitle|escape}
|
||||||
{$articleTitle}
|
{$articleTitle|escape:"html"}
|
||||||
{$articleTitle}
|
{$articleTitle|escape:"url"}
|
||||||
|
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
|
|
||||||
@@ -3456,7 +3466,7 @@ Stiff+Opposition+Expected+to+Casketless+Funeral+Plan
|
|||||||
<programlisting>
|
<programlisting>
|
||||||
|
|
||||||
{$articleTitle}
|
{$articleTitle}
|
||||||
{$articleTitle}
|
{$articleTitle|lower}
|
||||||
|
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
|
|
||||||
@@ -3510,8 +3520,8 @@ two convicts evade noose, jury hung.
|
|||||||
<programlisting>
|
<programlisting>
|
||||||
|
|
||||||
{$articleTitle}
|
{$articleTitle}
|
||||||
{$articleTitle}
|
{$articleTitle|replace:"Garden":"Vineyard"}
|
||||||
{$articleTitle}
|
{$articleTitle|replace:" ":" "}
|
||||||
|
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
|
|
||||||
@@ -3561,8 +3571,8 @@ Child's Stool Great for Use in Garden.
|
|||||||
<programlisting>
|
<programlisting>
|
||||||
|
|
||||||
{$articleTitle}
|
{$articleTitle}
|
||||||
{$articleTitle}
|
{$articleTitle|spacify}
|
||||||
{$articleTitle}
|
{$articleTitle|spacify:"^^"}
|
||||||
|
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
|
|
||||||
@@ -3611,8 +3621,8 @@ S^^o^^m^^e^^t^^h^^i^^n^^g^^ ^^W^^e^^n^^t^^ ^^W^^r^^o^^n^^g^^ ^^i^^n^^ ^^J^^e^^t^
|
|||||||
<programlisting>
|
<programlisting>
|
||||||
|
|
||||||
{$number}
|
{$number}
|
||||||
{$number}
|
{$number|string_format:"%.2f"}
|
||||||
{$number}
|
{$number|string_format:"%d"}
|
||||||
|
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
|
|
||||||
@@ -3633,7 +3643,7 @@ OUTPUT:
|
|||||||
<programlisting>
|
<programlisting>
|
||||||
|
|
||||||
{$articleTitle}
|
{$articleTitle}
|
||||||
{$articleTitle}
|
{$articleTitle|strip_tags}
|
||||||
|
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
|
|
||||||
@@ -3700,10 +3710,38 @@ Blind Woman Gets New Kidney from Dad she Hasn't Seen in years.
|
|||||||
<example>
|
<example>
|
||||||
<title>truncate</title>
|
<title>truncate</title>
|
||||||
<programlisting>
|
<programlisting>
|
||||||
|
{$articleTitle}
|
||||||
|
{$articleTitle|truncate}
|
||||||
|
{$articleTitle|truncate:30}
|
||||||
|
{$articleTitle|truncate:30:""}
|
||||||
|
{$articleTitle|truncate:30:"---"}
|
||||||
|
{$articleTitle|truncate:30:"":true}
|
||||||
|
{$articleTitle|truncate:30:"...":true}
|
||||||
|
|
||||||
|
OUTPUT:
|
||||||
|
|
||||||
|
Two Sisters Reunite after Eighteen Years at Checkout Counter.
|
||||||
|
Two Sisters Reunite after Eighteen Years at Checkout Counter.
|
||||||
|
Two Sisters Reunite after...
|
||||||
|
Two Sisters Reunite after
|
||||||
|
Two Sisters Reunite after---
|
||||||
|
Two Sisters Reunite after Eigh
|
||||||
|
Two Sisters Reunite after E...
|
||||||
|
|
||||||
|
</programlisting>
|
||||||
|
</example>
|
||||||
|
</sect2>
|
||||||
|
<sect2>
|
||||||
|
<title>upper</title>
|
||||||
|
<para>
|
||||||
|
This is used to uppercase a variable.
|
||||||
|
</para>
|
||||||
|
<example>
|
||||||
|
<title>upper</title>
|
||||||
|
<programlisting>
|
||||||
|
|
||||||
{$articleTitle}
|
{$articleTitle}
|
||||||
{$articleTitle}
|
{$articleTitle|upper}
|
||||||
{$articleTitle}
|
|
||||||
|
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
|
|
||||||
@@ -3726,17 +3764,129 @@ IF STRIKE ISN'T SETTLED QUICKLY IT MAY LAST A WHILE.
|
|||||||
<programlisting>
|
<programlisting>
|
||||||
|
|
||||||
{$articleTitle}
|
{$articleTitle}
|
||||||
{$articleTitle}
|
{$articleTitle|upper|spacify}
|
||||||
{$articleTitle}
|
{$articleTitle|lower|spacify|truncate}
|
||||||
{$articleTitle}
|
{$articleTitle|lower|truncate:30|spacify}
|
||||||
{$articleTitle}
|
{$articleTitle|lower|spacify|truncate:30:". . ."}
|
||||||
|
|
||||||
|
|
||||||
|
OUTPUT:
|
||||||
|
|
||||||
|
Smokers are Productive, but Death Cuts Efficiency.
|
||||||
|
S M O K E R S A R E P R O D U C T I V E , B U T D E A T H C U T S E F F I C I E N C Y .
|
||||||
|
s m o k e r s a r e p r o d u c t i v e , b u t d e a t h c u t s...
|
||||||
|
s m o k e r s a r e p r o d u c t i v e , b u t . . .
|
||||||
|
s m o k e r s a r e p. . .
|
||||||
|
|
||||||
|
</programlisting>
|
||||||
|
</example>
|
||||||
|
</sect2>
|
||||||
|
<sect2>
|
||||||
|
<title>Creating your own Variable Modifiers</title>
|
||||||
|
<para>
|
||||||
|
Creating your own modifiers is a fairly straight forward process.
|
||||||
|
The best way is to look at the ones that come with Smarty as
|
||||||
|
examples. The function names begin with smarty_mod_ and they are
|
||||||
|
located in the Smarty.addons.php file.
|
||||||
|
</para>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem><para>add your modifier to the Smarty.addons.php file.
|
||||||
|
It is recommended that you prepend your function name
|
||||||
|
with smarty_mod_</para></listitem>
|
||||||
|
<listitem><para>map a template modifier name to your PHP function.
|
||||||
|
This is done at the top of the Smarty.class.php file
|
||||||
|
in the $custom_mods array.</para></listitem>
|
||||||
|
<listitem><para>Thats it! you can now use that modifier
|
||||||
|
from within Smarty.</para></listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
<para>
|
||||||
|
You can also add modifiers programatically with the <link
|
||||||
|
linkend="api.register.modifier">register_modifier API</link>.
|
||||||
|
</para>
|
||||||
|
</sect2>
|
||||||
|
</sect1>
|
||||||
|
</chapter>
|
||||||
|
<chapter>
|
||||||
|
<title>Troubleshooting</title>
|
||||||
|
<para></para>
|
||||||
|
<sect1>
|
||||||
|
<title>Smarty/PHP errors</title>
|
||||||
|
<para>
|
||||||
|
Smarty can catch many errors such as missing tag attributes
|
||||||
|
or malformed variable names. If this happens, you will see an error
|
||||||
|
similar to the following:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<example>
|
||||||
|
<title>Smarty errors</title>
|
||||||
|
<programlisting>
|
||||||
|
|
||||||
|
Warning: Smarty: [in index.tpl line 4]: syntax error: unknown tag - '%blah'
|
||||||
|
in /path/to/smarty/Smarty.class.php on line 1041
|
||||||
|
|
||||||
|
Fatal error: Smarty: [in index.tpl line 28]: syntax error: missing section name
|
||||||
|
in /path/to/smarty/Smarty.class.php on line 1041
|
||||||
|
|
||||||
|
</programlisting>
|
||||||
|
</example>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Smarty shows you the template name, the line number and the error.
|
||||||
|
After that, the error consists of the actual line number in the Smarty
|
||||||
|
class that the error occured.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
There are certain errors that Smarty cannot catch, such as missing
|
||||||
|
close tags. These types of errors usually end up in PHP compile-time
|
||||||
|
parsing errors.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<example>
|
||||||
|
<title>PHP parsing errors</title>
|
||||||
|
<programlisting>
|
||||||
|
|
||||||
|
Parse error: parse error in /path/to/smarty/templates_c/index.tpl.php on line 75
|
||||||
|
|
||||||
|
</programlisting>
|
||||||
|
</example>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
When you encounter a PHP parsing error, the error line number will
|
||||||
|
correspond to the compiled PHP script, not the template itself. Usually
|
||||||
|
you can look at the template and spot the syntax error. Here are some
|
||||||
|
common things to look for: missing close tags for {if}{/if} or
|
||||||
|
{section}{/section}, or syntax of logic within an {if} tag. If you
|
||||||
|
can't find the error, you might have to open the compiled PHP file and
|
||||||
|
go to the line number to figure out where the corresponding error is in
|
||||||
|
the template.
|
||||||
|
</para>
|
||||||
|
</sect1>
|
||||||
|
</chapter>
|
||||||
|
<chapter id="tips">
|
||||||
|
<title>Tips & Tricks</title>
|
||||||
|
<para>
|
||||||
|
</para>
|
||||||
|
<sect1>
|
||||||
|
<title>Dates</title>
|
||||||
|
<para>
|
||||||
|
As a rule of thumb, always pass dates to Smarty as timestamps.
|
||||||
|
This allows template designers to use <link
|
||||||
|
linkend="date.format">date_format</link> for full control over date
|
||||||
|
formatting, and also makes it easy to compare dates if necessary.
|
||||||
|
</para>
|
||||||
|
<example>
|
||||||
|
<title>using date_format</title>
|
||||||
|
<programlisting>
|
||||||
|
|
||||||
|
{$startDate|date_format}
|
||||||
|
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
|
|
||||||
Jan 4, 2001
|
Jan 4, 2001
|
||||||
|
|
||||||
|
|
||||||
{$startDate}
|
{$startDate|date_format:"%Y/%m/%d"}
|
||||||
|
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
|
|
||||||
@@ -3777,8 +3927,65 @@ function makeTimeStamp($year="",$month="",$day="")
|
|||||||
|
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</sect2>
|
|
||||||
</sect1>
|
</sect1>
|
||||||
|
<sect1>
|
||||||
|
<title>WAP/WML</title>
|
||||||
|
<para>
|
||||||
|
WAP/WML templates require a php Content-Type header to be passed along
|
||||||
|
with the template. The easist way to do this would be to write a custom
|
||||||
|
function that prints the header. If you are using caching, that won't
|
||||||
|
work so we'll do it using the insert tag (remember insert tags are not
|
||||||
|
cached!) Be sure that there is nothing output to the browser before the
|
||||||
|
template, or else the header may fail.
|
||||||
|
</para>
|
||||||
|
<example>
|
||||||
|
<title>using insert to write a WML Content-Type header</title>
|
||||||
|
<programlisting>
|
||||||
|
|
||||||
|
// be sure apache is configure for the .wml extensions!
|
||||||
|
// put this function somewhere in your application, or in Smarty.addons.php
|
||||||
|
function insert_header() {
|
||||||
|
// this function expects $content argument
|
||||||
|
extract(func_get_arg(0));
|
||||||
|
if(empty($content))
|
||||||
|
return;
|
||||||
|
header($content);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// your Smarty template _must_ begin with the insert tag example:
|
||||||
|
|
||||||
|
{insert name=header content="Content-Type: text/vnd.wap.wml"}
|
||||||
|
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
|
||||||
|
|
||||||
|
<!-- begin new wml deck -->
|
||||||
|
<wml>
|
||||||
|
<!-- begin first card -->
|
||||||
|
<card>
|
||||||
|
<do type="accept">
|
||||||
|
<go href="#two"/>
|
||||||
|
</do>
|
||||||
|
<p>
|
||||||
|
Welcome to WAP with Smarty!
|
||||||
|
Press OK to continue...
|
||||||
|
</p>
|
||||||
|
</card>
|
||||||
|
<!-- begin second card -->
|
||||||
|
<card id="two">
|
||||||
|
<p>
|
||||||
|
Pretty easy isn't it?
|
||||||
|
</p>
|
||||||
|
</card>
|
||||||
|
</wml>
|
||||||
|
|
||||||
|
</programlisting>
|
||||||
|
</example>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</chapter>
|
</chapter>
|
||||||
<chapter id="resources">
|
<chapter id="resources">
|
||||||
<title>Resources</title>
|
<title>Resources</title>
|
||||||
@@ -3805,35 +4012,4 @@ function makeTimeStamp($year="",$month="",$day="")
|
|||||||
/usr/local/lib/php. Windows users check C:/php/pear.
|
/usr/local/lib/php. Windows users check C:/php/pear.
|
||||||
</para>
|
</para>
|
||||||
</chapter>
|
</chapter>
|
||||||
<chapter id="credits">
|
|
||||||
<title>CREDITS</title>
|
|
||||||
<para>
|
|
||||||
Monte Ohrt <monte@ispi.net>: Concepted compiling templates into PHP
|
|
||||||
scripts, wrote initial "proof of concept" implementation, and maintains
|
|
||||||
documentation.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
Andrei Zmievski <andrei@ispi.net>: Rewrote parser from scratch and
|
|
||||||
added other features too numerous to mention.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
Anne Holz <anne@ispi.net>: Provided creative input with respect
|
|
||||||
to web design.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
Frank Kromann <fmk@php.net>: Idea of custom function ability.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
A special thanks goes to the people that have contributed other templating
|
|
||||||
solutions to the PHP community which we learned a lot from.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
A special thanks goes to the members of the php-template mailing list and
|
|
||||||
the smarty mailing list, whom sharing and bringing many ideas to the table.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
Rasmus Lerdorf <rasmus@php.net>: For starting what eventually became
|
|
||||||
the coolest programming language ever.
|
|
||||||
</para>
|
|
||||||
</chapter>
|
|
||||||
</book>
|
</book>
|
||||||
|
@@ -60,9 +60,13 @@ class Smarty
|
|||||||
var $compile_dir = './templates_c'; // name of directory for compiled templates
|
var $compile_dir = './templates_c'; // name of directory for compiled templates
|
||||||
var $config_dir = './configs'; // directory where config files are located
|
var $config_dir = './configs'; // directory where config files are located
|
||||||
|
|
||||||
var $global_assign = array('SCRIPT_NAME'); // variables from the GLOBALS array
|
var $global_assign = array( 'HTTP_SERVER_VARS' =>
|
||||||
// that are implicitly assigned
|
array( 'SCRIPT_NAME' )
|
||||||
// to all templates
|
); // variables from the GLOBALS array
|
||||||
|
// that are implicitly assigned
|
||||||
|
// to all templates
|
||||||
|
var $undefined = null; // undefined variables in $global_assign will be
|
||||||
|
// created with this value
|
||||||
var $compile_check = true; // whether to check for compiling step or not:
|
var $compile_check = true; // whether to check for compiling step or not:
|
||||||
// This is generally set to false once the
|
// This is generally set to false once the
|
||||||
// application is entered into production and
|
// application is entered into production and
|
||||||
@@ -78,12 +82,12 @@ class Smarty
|
|||||||
var $cache_dir = './cache'; // name of directory for template cache
|
var $cache_dir = './cache'; // name of directory for template cache
|
||||||
var $cache_lifetime = 3600; // number of seconds cached content will persist.
|
var $cache_lifetime = 3600; // number of seconds cached content will persist.
|
||||||
// 0 = never expires. default is one hour (3600)
|
// 0 = never expires. default is one hour (3600)
|
||||||
var $check_cached_insert_tags = true; // if you have caching turned on and you
|
var $insert_tag_check = true; // if you have caching turned on and you
|
||||||
// don't use {insert} tags anywhere
|
// don't use {insert} tags anywhere
|
||||||
// in your templates, set this to false.
|
// in your templates, set this to false.
|
||||||
// this will tell Smarty not to look for
|
// this will tell Smarty not to look for
|
||||||
// insert tags and speed up cached page
|
// insert tags and speed up cached page
|
||||||
// fetches.
|
// fetches.
|
||||||
|
|
||||||
var $tpl_file_ext = '.tpl'; // template file extention
|
var $tpl_file_ext = '.tpl'; // template file extention
|
||||||
|
|
||||||
@@ -139,7 +143,7 @@ class Smarty
|
|||||||
|
|
||||||
// internal vars
|
// internal vars
|
||||||
var $_error_msg = false; // error messages. true/false
|
var $_error_msg = false; // error messages. true/false
|
||||||
var $_tpl_vars = array();
|
var $_tpl_vars = array(); // where assigned template vars are kept
|
||||||
var $_smarty_md5 = 'f8d698aea36fcbead2b9d5359ffca76f'; // md5 checksum of the string 'Smarty'
|
var $_smarty_md5 = 'f8d698aea36fcbead2b9d5359ffca76f'; // md5 checksum of the string 'Smarty'
|
||||||
|
|
||||||
/*======================================================================*\
|
/*======================================================================*\
|
||||||
@@ -148,9 +152,21 @@ class Smarty
|
|||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function Smarty()
|
function Smarty()
|
||||||
{
|
{
|
||||||
foreach ($this->global_assign as $var_name) {
|
foreach ($this->global_assign as $key => $var_name) {
|
||||||
if (isset($GLOBALS[$var_name])) {
|
if (is_array($var_name)) {
|
||||||
$this->assign($var_name, $GLOBALS[$var_name]);
|
foreach ($var_name as $var) {
|
||||||
|
if (isset($GLOBALS[$key][$var])) {
|
||||||
|
$this->assign($var, $GLOBALS[$key][$var]);
|
||||||
|
} else {
|
||||||
|
$this->assign($var, $this->undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (isset($GLOBALS[$var_name])) {
|
||||||
|
$this->assign($var_name, $GLOBALS[$var_name]);
|
||||||
|
} else {
|
||||||
|
$this->assign($var_name, $this->undefined);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -410,7 +426,7 @@ class Smarty
|
|||||||
($this->cache_lifetime == 0 ||
|
($this->cache_lifetime == 0 ||
|
||||||
(time() - filemtime($cache_file) <= $this->cache_lifetime))) {
|
(time() - filemtime($cache_file) <= $this->cache_lifetime))) {
|
||||||
$results = $this->_read_file($cache_file);
|
$results = $this->_read_file($cache_file);
|
||||||
if($this->check_cached_insert_tags) {
|
if($this->insert_tag_check) {
|
||||||
$results = $this->_process_cached_inserts($results);
|
$results = $this->_process_cached_inserts($results);
|
||||||
}
|
}
|
||||||
if ($display) {
|
if ($display) {
|
||||||
@@ -500,8 +516,8 @@ class Smarty
|
|||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function _fetch_compile_path($tpl_file, &$compile_path)
|
function _fetch_compile_path($tpl_file, &$compile_path)
|
||||||
{
|
{
|
||||||
// for now, everything is in $compile_dir
|
// everything is in $compile_dir
|
||||||
$compile_path = $this->compile_dir.'/'.md5($tpl_file).'.php';
|
$compile_path = $this->compile_dir.'/'.urlencode($tpl_file).'.php';
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -511,7 +527,7 @@ class Smarty
|
|||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function _compiled_template_exists($include_path)
|
function _compiled_template_exists($include_path)
|
||||||
{
|
{
|
||||||
// for now, everything is in $compile_dir
|
// everything is in $compile_dir
|
||||||
return file_exists($include_path);
|
return file_exists($include_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -521,7 +537,7 @@ class Smarty
|
|||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function _fetch_compiled_template_timestamp($include_path)
|
function _fetch_compiled_template_timestamp($include_path)
|
||||||
{
|
{
|
||||||
// for now, everything is in $compile_dir
|
// everything is in $compile_dir
|
||||||
return filemtime($include_path);
|
return filemtime($include_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -531,7 +547,7 @@ class Smarty
|
|||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function _write_compiled_template($compile_path, $template_compiled)
|
function _write_compiled_template($compile_path, $template_compiled)
|
||||||
{
|
{
|
||||||
// for now, we save everything into $compile_dir
|
// we save everything into $compile_dir
|
||||||
$this->_write_file($compile_path, $template_compiled);
|
$this->_write_file($compile_path, $template_compiled);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -542,6 +558,7 @@ class Smarty
|
|||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function _fetch_template_source($tpl_path, &$template_source, &$template_timestamp)
|
function _fetch_template_source($tpl_path, &$template_source, &$template_timestamp)
|
||||||
{
|
{
|
||||||
|
|
||||||
// split tpl_path by the first colon
|
// split tpl_path by the first colon
|
||||||
$tpl_path_parts = explode(':', $tpl_path, 2);
|
$tpl_path_parts = explode(':', $tpl_path, 2);
|
||||||
|
|
||||||
|
@@ -53,6 +53,7 @@ class Smarty_Compiler extends Smarty {
|
|||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function _compile_file($tpl_file, $template_source, &$template_compiled)
|
function _compile_file($tpl_file, $template_source, &$template_compiled)
|
||||||
{
|
{
|
||||||
|
|
||||||
// run template source through functions registered in filter_functions
|
// run template source through functions registered in filter_functions
|
||||||
if(is_array($this->filter_functions) && count($this->filter_functions) > 0) {
|
if(is_array($this->filter_functions) && count($this->filter_functions) > 0) {
|
||||||
foreach($this->filter_functions as $curr_func) {
|
foreach($this->filter_functions as $curr_func) {
|
||||||
@@ -64,7 +65,7 @@ class Smarty_Compiler extends Smarty {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->_current_file = $template_source;
|
$this->_current_file = $tpl_file;
|
||||||
$this->_current_line_no = 1;
|
$this->_current_line_no = 1;
|
||||||
$ldq = preg_quote($this->left_delimiter, '!');
|
$ldq = preg_quote($this->left_delimiter, '!');
|
||||||
$rdq = preg_quote($this->right_delimiter, '!');
|
$rdq = preg_quote($this->right_delimiter, '!');
|
||||||
|
Reference in New Issue
Block a user