mirror of
https://github.com/smarty-php/smarty.git
synced 2025-08-05 10:54:27 +02:00
update changes
This commit is contained in:
159
README
159
README
@@ -10,14 +10,14 @@ AUTHORS:
|
||||
|
||||
SYNOPSIS:
|
||||
|
||||
require("smarty.class.php");
|
||||
require("Smarty.class.php");
|
||||
|
||||
$smarty = new Smarty;
|
||||
|
||||
$smarty->assign("Title","My Homepage");
|
||||
$smarty->assign("Names",array("John","Gary","Gregg","James"));
|
||||
|
||||
$smarty->spew("./templates/index.tpl");
|
||||
$smarty->display("./templates/index.tpl");
|
||||
|
||||
DESCRIPTION:
|
||||
|
||||
@@ -25,8 +25,8 @@ DESCRIPTION:
|
||||
|
||||
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
|
||||
precompiles the templates into native php scripts upon the first
|
||||
execution, then executes the php scripts from that point forward.
|
||||
compiles the templates into native php scripts upon the first
|
||||
execution. After that, it just executes the compiled PHP scripts.
|
||||
Therefore, there is no costly template file parsing for each request.
|
||||
Smarty also has built-in page caching to minimize the regeneration
|
||||
of unchanged content.
|
||||
@@ -36,12 +36,12 @@ DESCRIPTION:
|
||||
* it is extremely fast
|
||||
* it is relatively simple since the PHP parser does the dirty work.
|
||||
* no template parsing overhead, only compiles once.
|
||||
* it is smart about automatically recompiling the template
|
||||
* it is smart about recompiling only the template
|
||||
files that have changed.
|
||||
* you can make custom functions and custom variable modifiers, so
|
||||
the template language is extremely extensible.
|
||||
* configurable template delimiter tag syntax, so you can use
|
||||
{}, {{}}, <!--{}-->, or whatever your fancy.
|
||||
{}, {{}}, <!--{}-->, or whatever you like.
|
||||
* template if/else/endif constructs are passed to the PHP parser,
|
||||
so the if syntax can be as simple or as complex as you like
|
||||
* unlimited nesting of sections,ifs, etc. allowed
|
||||
@@ -57,15 +57,16 @@ REQUIREMENTS:
|
||||
|
||||
VARIABLE TYPES:
|
||||
|
||||
Smarty has two different syntaxes for variables. One for script
|
||||
variables (prefixed with $), and one for internal variables
|
||||
generated by the template parser (prefixed and suffixed with %).
|
||||
Smarty has three different syntaxes for variables. One for script
|
||||
variables (prefixed with $), one for config file variables
|
||||
which are surrounded by # symbols, and one for variables that
|
||||
are internal to the template language, which are surrounded by
|
||||
% symbols.
|
||||
|
||||
Variable examples:
|
||||
{$Name} <-- prints the value of $Name
|
||||
{%News.rownum%} <-- prints the current iteration
|
||||
of the section named "News"
|
||||
{if %News.rownum% is even} <-- checks if the rownum is even
|
||||
{#tableBgColor#} <-- prints variable from config file
|
||||
{if %News.index% is even} <-- checks if the index is even
|
||||
...
|
||||
{/if}
|
||||
|
||||
@@ -75,7 +76,11 @@ CLASS METHODS:
|
||||
-----------------
|
||||
Assign variables to be used in the template engine.
|
||||
|
||||
spew($tpl_file)
|
||||
append($var,$val)
|
||||
-----------------
|
||||
Append values to assigned variables
|
||||
|
||||
display($tpl_file)
|
||||
----------------------
|
||||
Print the results of a parsed template file
|
||||
|
||||
@@ -91,6 +96,10 @@ CLASS METHODS:
|
||||
------------------
|
||||
Clear all the assigned template variables.
|
||||
|
||||
get_template_vars()
|
||||
------------------
|
||||
returns an array containing assigned template variables
|
||||
|
||||
|
||||
CLASS VARIABLES: (default value in parenthesis)
|
||||
|
||||
@@ -129,17 +138,21 @@ CLASS VARIABLES: (default value in parenthesis)
|
||||
|
||||
$right_delimiter The right delimiter of the template syntax. (})
|
||||
|
||||
$registered_functions Names of the custom template functions
|
||||
that Smarty will recognize.
|
||||
To add your own, add them to this array
|
||||
and add the actual functions to the
|
||||
smarty.functions.php file.
|
||||
(array( "htmlesc","urlesc","default","config" );)
|
||||
$config_dir The name of the directory containing config files
|
||||
|
||||
$custom_tags An array containing the names of custom functions
|
||||
and what function each are mapped to.
|
||||
|
||||
$modifiers An array containing the names of variable modifiers
|
||||
and what function each are mapped to.
|
||||
|
||||
$global_assign An array contiaining the names of variables
|
||||
that are implicitly assigned to the templates.
|
||||
|
||||
|
||||
INSTALLATION:
|
||||
|
||||
* copy the smarty.class.php and smarty.functions.php scripts to a
|
||||
* copy the Smarty.class.php and Smarty.addons.php scripts to a
|
||||
directory that is accessible by PHP. NOTE: Smarty will need to
|
||||
create a directory for the compiled templates. Be sure that the
|
||||
web server user (or which ever user the PHP parser is run as)
|
||||
@@ -159,7 +172,7 @@ index.php
|
||||
|
||||
<?
|
||||
|
||||
require("smarty.class.php");
|
||||
require("Smarty.class.php");
|
||||
|
||||
$smarty = new Smarty;
|
||||
|
||||
@@ -171,7 +184,7 @@ $smarty->assign("loopvar",array("one","two","three","four"));
|
||||
$smarty->assign("loopvar2",array("one","two","three","<four>"));
|
||||
|
||||
// now simply display the template
|
||||
$smarty->spew("./templates/index.tpl");
|
||||
$smarty->display("./templates/index.tpl");
|
||||
|
||||
?>
|
||||
|
||||
@@ -208,7 +221,7 @@ testing a loop:<br>
|
||||
of times the section is looped *}
|
||||
{section name="outside" loop=$loopvar}
|
||||
{* show the current loop iteration *}
|
||||
current loop iteration is {%outside.rownum%}<br>
|
||||
current loop iteration is {$outside/rownum}<br>
|
||||
{* show the current index value of $loopvar
|
||||
within the "outside" section *}
|
||||
loop var is {$outside/loopvar}<br>
|
||||
@@ -233,11 +246,17 @@ INCLUDE LOGIC:
|
||||
Smarty supports including other template files.
|
||||
|
||||
* you must supply the relative path to the
|
||||
included template file from the template
|
||||
in use. Example: in index.tpl, the file
|
||||
header.tpl is included from the same directory:
|
||||
included template file from the default
|
||||
template directory path.
|
||||
|
||||
{include header.tpl}
|
||||
{include file="header.tpl"}
|
||||
|
||||
* you can pass local variables to an included
|
||||
template. The included template inherits all current
|
||||
template variables, in addition to the given
|
||||
ones:
|
||||
|
||||
{include file="header.tpl" title="main menu" border="yes"}
|
||||
|
||||
IF/ELSE LOGIC:
|
||||
|
||||
@@ -245,11 +264,12 @@ Smarty supports if/else logic like so:
|
||||
|
||||
{if $Name eq "John"}
|
||||
I am John!
|
||||
{elseif $Name eq "Joe"}
|
||||
I am Joe!
|
||||
{else}
|
||||
I am not John.
|
||||
I don't know who I am.
|
||||
{/if}
|
||||
|
||||
A few important things to know:
|
||||
* "eq", "ne","neq", "gt", "lt", "lte", "le", "gte" "ge",
|
||||
"==","!=",">","<","<=",">=" are all valid conditional
|
||||
qualifiers.
|
||||
@@ -272,9 +292,8 @@ The "loop" attribute is the name of an array that determines
|
||||
the number of times the section will be looped. In this example
|
||||
if $LastName has four elements, the section will loop four times.
|
||||
|
||||
A few important things to know:
|
||||
* ALL sections must be given a name.
|
||||
* ALL section names MUST be unique from one another.
|
||||
* ALL sections must be given a name
|
||||
* Nested sections names MUST have unique names from one another
|
||||
* All variables meant to be looped within a section
|
||||
MUST have the section name prepended to the name
|
||||
like so: {$section_name/variable_name}
|
||||
@@ -348,7 +367,7 @@ For example:
|
||||
<TD>
|
||||
<TT>
|
||||
{section name=row loop=$weekday}
|
||||
{%row.weekday%}
|
||||
{$row/weekday}
|
||||
{/section}
|
||||
</TT>
|
||||
</TD>
|
||||
@@ -357,17 +376,17 @@ For example:
|
||||
This will return unwanted results because of
|
||||
the extra tabs and newlines contained within the <TT></TT>
|
||||
tags. Normally to remedy this, you must run all
|
||||
the lines together in the template like so:
|
||||
the lines together in the template:
|
||||
|
||||
<TR>
|
||||
<TD>
|
||||
<TT>{section name=row loop=$weekday}{%row.weekday%} {/section}</TT>
|
||||
<TT>{section name=row loop=$weekday}{$row/weekday} {/section}</TT>
|
||||
</TD>
|
||||
</TR>
|
||||
|
||||
|
||||
As you can see, this quickly makes the template unreadable.
|
||||
An alternate solution is to use the {strip} tag like so:
|
||||
An alternate solution is to use the {strip} tag:
|
||||
|
||||
<TR>
|
||||
<TD>
|
||||
@@ -388,7 +407,7 @@ the results. This helps keep the template file readable
|
||||
without affecting the output. Only text between {strip}
|
||||
and {/strip} is affected.
|
||||
|
||||
{%ldelim%} AND {%rdelim%} TAGS:
|
||||
{ldelim} AND {rdelim} TAGS:
|
||||
|
||||
These are used in the template to output the literal
|
||||
left and right delimiters. Normally these are
|
||||
@@ -415,12 +434,12 @@ modifier.
|
||||
Here is an example of printing the variable $Name
|
||||
as HTML escaped:
|
||||
|
||||
{$Name|htmlesc}
|
||||
{$Name|escape}
|
||||
|
||||
You are also allowed to mix any variable modifiers
|
||||
on a single variable:
|
||||
|
||||
{$Name|upper|htmlesc}
|
||||
{$Name|upper|escape}
|
||||
|
||||
Variable modifiers are read from left to right. In the
|
||||
above example, the variable will first be uppercased,
|
||||
@@ -452,7 +471,7 @@ modifiers. If a modifier is not found in the registered
|
||||
template modifiers, it will be assumed that it is a PHP
|
||||
function, and will be passed as so. Be careful though,
|
||||
all modifiers must take the input as the first value
|
||||
and return a modified value, otherwise it won't do much good!
|
||||
and return a value, otherwise it won't do much good!
|
||||
|
||||
Example of using a PHP function:
|
||||
|
||||
@@ -466,31 +485,47 @@ TIP: For PHP functions that do not expect the variable
|
||||
arguments in the correct order, you can write a variable
|
||||
modifier "wrapper" that passes them in the correct order.
|
||||
For instance, strftime() expects the date format first,
|
||||
followed by the date. You can write a wrapper that passes
|
||||
followed by the date. Smarty comes with a wrapper that passes
|
||||
them in the correct order:
|
||||
|
||||
{$date|dateFormat:"%Y-%m-%d"}
|
||||
{$date|date_format:"%Y-%m-%d"}
|
||||
|
||||
This will pass the value of $date, followed by the specified
|
||||
date format to your variable modifier "dateFormat". This
|
||||
date format to your variable modifier "date_format". This
|
||||
can in turn pass the values to strftime() in the correct
|
||||
order, then return the results.
|
||||
|
||||
HINT: always pass dates to Smarty in a unix
|
||||
timestamp format. Smarty can then use this to format the
|
||||
date in countless ways with date_format.
|
||||
|
||||
|
||||
CUSTOM FUNCTIONS:
|
||||
|
||||
You may create your own custom template functions. There are four
|
||||
You may create your own custom template functions. There are two
|
||||
functions that come bundled with Smarty, which are the following:
|
||||
|
||||
{htmlesc $var} prints a variable html escaped.
|
||||
{urlesc $var} prints a variable url escaped.
|
||||
{default $var,"default value"} prints the default value if
|
||||
$var is empty.
|
||||
{config "file.conf","var"} prints the value of a variable
|
||||
from a config file.
|
||||
{html_options ...} creates HTML options for dropdowns
|
||||
{html_select_date ...} creates HTML date dropdowns
|
||||
|
||||
For this "config" function, config files must be in the following syntax:
|
||||
CONFIG FILES:
|
||||
|
||||
Smarty allows variables to be pulled in from config files to
|
||||
Be used in the templates. Section names are optional. NOTE:
|
||||
config file sections are not related to template looping
|
||||
sections. They are two different things.
|
||||
|
||||
{config_load file="filename"}
|
||||
{config_load file="filename" section="sectionname"}
|
||||
|
||||
Config files have the following format:
|
||||
|
||||
var = "value"
|
||||
|
||||
[ sectionname ]
|
||||
var = "value"
|
||||
|
||||
[ sectionname2 ]
|
||||
var = "value"
|
||||
|
||||
example:
|
||||
@@ -498,28 +533,30 @@ example:
|
||||
index.tpl
|
||||
---------
|
||||
|
||||
{config "config/index.conf","title"}
|
||||
{config_load file="index.conf"}
|
||||
|
||||
<IMG SRC="{#imagePath#}/icon.gif">
|
||||
|
||||
index.conf
|
||||
----------
|
||||
|
||||
title = "My Homepage"
|
||||
Name = "Gomer"
|
||||
imagePath = "/images"
|
||||
|
||||
|
||||
creating your own:
|
||||
|
||||
To create your own custom functions, do the following:
|
||||
To create your own custom functions or modifiers, do the following:
|
||||
|
||||
* edit the smarty.functions.php file, add your custom function. Be sure
|
||||
the function name is prepended with "smarty_".
|
||||
* edit the smarty.class.php file, add your custom function name to the
|
||||
array (leave off the smarty_ prefix.)
|
||||
* edit the Smarty.addons.php file, add your function. Be sure
|
||||
the function name does not interfere with the namespace of other
|
||||
functions.
|
||||
* edit the Smarty.class.php file, add your custom function name to the
|
||||
appropriate array, and map it to a Smarty function or modifier.
|
||||
* make a mention of your custom function in a template, like so:
|
||||
{function_name [arguments]}
|
||||
* The arguments are passed "as is" to the custom function.
|
||||
{function_name [arguments]}, or {$var|modifier_name[:arg1:arg2]}
|
||||
|
||||
COPYRIGHT:
|
||||
Copyright(c) 2000 ispi. All rights reserved.
|
||||
Copyright(c) 2000,2001 ispi. All rights reserved.
|
||||
This software is released under the GNU General Public License.
|
||||
Please read the disclaimer at the top of the Smarty.class.php file.
|
||||
|
@@ -41,11 +41,11 @@ class Smarty
|
||||
|
||||
var $config_dir = "./configs"; // directory where config files are located
|
||||
|
||||
var $custom_tags = array( 'html_options' => 'smarty_func_html_options',
|
||||
var $custom_funcs = array( 'html_options' => 'smarty_func_html_options',
|
||||
'html_select_date' => 'smarty_func_html_select_date'
|
||||
);
|
||||
|
||||
var $modifiers = array( 'lower' => 'strtolower',
|
||||
var $custom_mods = array( 'lower' => 'strtolower',
|
||||
'upper' => 'strtoupper',
|
||||
'capitalize' => 'ucwords',
|
||||
'escape' => 'smarty_mod_escape',
|
||||
@@ -59,6 +59,15 @@ class Smarty
|
||||
var $global_assign = array( 'SCRIPT_NAME'
|
||||
);
|
||||
|
||||
var $cache_enable = true; // turn template cache on/off
|
||||
|
||||
var $cache_dir = ""; // the directory path where
|
||||
// cached templates are placed.
|
||||
// if empty, uses compile directory
|
||||
|
||||
var $cache_exp_time = 3600; // number of seconds cache is good for
|
||||
|
||||
|
||||
// internal vars
|
||||
var $_error_msg = false; // error messages
|
||||
var $_tpl_vars = array();
|
||||
@@ -455,7 +464,7 @@ class Smarty
|
||||
return $this->_compile_insert_tag($tag_args);
|
||||
|
||||
default:
|
||||
if (isset($this->custom_tags[$tag_command])) {
|
||||
if (isset($this->custom_funcs[$tag_command])) {
|
||||
return $this->_compile_custom_tag($tag_command, $tag_args);
|
||||
} else
|
||||
/* TODO syntax error: unknown tag */
|
||||
@@ -467,7 +476,7 @@ class Smarty
|
||||
function _compile_custom_tag($tag_command, $tag_args)
|
||||
{
|
||||
$attrs = $this->_parse_attrs($tag_args);
|
||||
$function = $this->custom_tags[$tag_command];
|
||||
$function = $this->custom_funcs[$tag_command];
|
||||
foreach ($attrs as $arg_name => $arg_value) {
|
||||
if (is_bool($arg_value))
|
||||
$arg_value = $arg_value ? 'true' : 'false';
|
||||
@@ -858,9 +867,9 @@ class Smarty
|
||||
|
||||
function _parse_var($var_expr)
|
||||
{
|
||||
$modifiers = explode('|', substr($var_expr, 1));
|
||||
$custom_mods = explode('|', substr($var_expr, 1));
|
||||
|
||||
$sections = explode('/', array_shift($modifiers));
|
||||
$sections = explode('/', array_shift($custom_mods));
|
||||
$var_name = array_pop($sections);
|
||||
|
||||
$output = "\$$var_name";
|
||||
@@ -869,42 +878,42 @@ class Smarty
|
||||
$output .= "[\$_sections['$section']['properties']['index']]";
|
||||
}
|
||||
|
||||
$this->_parse_modifiers($output, $modifiers);
|
||||
$this->_parse_modifiers($output, $custom_mods);
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
function _parse_conf_var($conf_var_expr)
|
||||
{
|
||||
$modifiers = explode('|', $conf_var_expr);
|
||||
$custom_mods = explode('|', $conf_var_expr);
|
||||
|
||||
$var_name = substr(array_shift($modifiers), 1, -1);
|
||||
$var_name = substr(array_shift($custom_mods), 1, -1);
|
||||
|
||||
$output = "\$_config['$var_name']";
|
||||
|
||||
$this->_parse_modifiers($output, $modifiers);
|
||||
$this->_parse_modifiers($output, $custom_mods);
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
function _parse_section_prop($section_prop_expr)
|
||||
{
|
||||
$modifiers = explode('|', $section_prop_expr);
|
||||
$custom_mods = explode('|', $section_prop_expr);
|
||||
|
||||
preg_match('!%(\w+)\.(\w+)%!', array_shift($modifiers), $match);
|
||||
preg_match('!%(\w+)\.(\w+)%!', array_shift($custom_mods), $match);
|
||||
$section_name = $match[1];
|
||||
$prop_name = $match[2];
|
||||
|
||||
$output = "\$_sections['$section_name']['properties']['$prop_name']";
|
||||
|
||||
$this->_parse_modifiers($output, $modifiers);
|
||||
$this->_parse_modifiers($output, $custom_mods);
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
function _parse_modifiers(&$output, $modifiers)
|
||||
function _parse_modifiers(&$output, $custom_mods)
|
||||
{
|
||||
foreach ($modifiers as $modifier) {
|
||||
foreach ($custom_mods as $modifier) {
|
||||
$modifier = explode(':', $modifier);
|
||||
$modifier_name = array_shift($modifier);
|
||||
|
||||
@@ -918,7 +927,7 @@ class Smarty
|
||||
* First we lookup the modifier function name in the registered
|
||||
* modifiers table.
|
||||
*/
|
||||
$mod_func_name = $this->modifiers[$modifier_name];
|
||||
$mod_func_name = $this->custom_mods[$modifier_name];
|
||||
|
||||
/*
|
||||
* If we don't find that modifier there, we assume it's just a PHP
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<?
|
||||
|
||||
require("Smarty.class.php");
|
||||
require("./Smarty.class.php");
|
||||
|
||||
$smarty = new Smarty;
|
||||
|
||||
|
@@ -19,4 +19,4 @@ My interests are:
|
||||
none
|
||||
{/section}
|
||||
|
||||
{$Name|@count}
|
||||
({$FirstName|@count})
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<?
|
||||
|
||||
require("Smarty.class.php");
|
||||
require("./Smarty.class.php");
|
||||
|
||||
$smarty = new Smarty;
|
||||
|
||||
|
@@ -41,11 +41,11 @@ class Smarty
|
||||
|
||||
var $config_dir = "./configs"; // directory where config files are located
|
||||
|
||||
var $custom_tags = array( 'html_options' => 'smarty_func_html_options',
|
||||
var $custom_funcs = array( 'html_options' => 'smarty_func_html_options',
|
||||
'html_select_date' => 'smarty_func_html_select_date'
|
||||
);
|
||||
|
||||
var $modifiers = array( 'lower' => 'strtolower',
|
||||
var $custom_mods = array( 'lower' => 'strtolower',
|
||||
'upper' => 'strtoupper',
|
||||
'capitalize' => 'ucwords',
|
||||
'escape' => 'smarty_mod_escape',
|
||||
@@ -59,6 +59,15 @@ class Smarty
|
||||
var $global_assign = array( 'SCRIPT_NAME'
|
||||
);
|
||||
|
||||
var $cache_enable = true; // turn template cache on/off
|
||||
|
||||
var $cache_dir = ""; // the directory path where
|
||||
// cached templates are placed.
|
||||
// if empty, uses compile directory
|
||||
|
||||
var $cache_exp_time = 3600; // number of seconds cache is good for
|
||||
|
||||
|
||||
// internal vars
|
||||
var $_error_msg = false; // error messages
|
||||
var $_tpl_vars = array();
|
||||
@@ -455,7 +464,7 @@ class Smarty
|
||||
return $this->_compile_insert_tag($tag_args);
|
||||
|
||||
default:
|
||||
if (isset($this->custom_tags[$tag_command])) {
|
||||
if (isset($this->custom_funcs[$tag_command])) {
|
||||
return $this->_compile_custom_tag($tag_command, $tag_args);
|
||||
} else
|
||||
/* TODO syntax error: unknown tag */
|
||||
@@ -467,7 +476,7 @@ class Smarty
|
||||
function _compile_custom_tag($tag_command, $tag_args)
|
||||
{
|
||||
$attrs = $this->_parse_attrs($tag_args);
|
||||
$function = $this->custom_tags[$tag_command];
|
||||
$function = $this->custom_funcs[$tag_command];
|
||||
foreach ($attrs as $arg_name => $arg_value) {
|
||||
if (is_bool($arg_value))
|
||||
$arg_value = $arg_value ? 'true' : 'false';
|
||||
@@ -858,9 +867,9 @@ class Smarty
|
||||
|
||||
function _parse_var($var_expr)
|
||||
{
|
||||
$modifiers = explode('|', substr($var_expr, 1));
|
||||
$custom_mods = explode('|', substr($var_expr, 1));
|
||||
|
||||
$sections = explode('/', array_shift($modifiers));
|
||||
$sections = explode('/', array_shift($custom_mods));
|
||||
$var_name = array_pop($sections);
|
||||
|
||||
$output = "\$$var_name";
|
||||
@@ -869,42 +878,42 @@ class Smarty
|
||||
$output .= "[\$_sections['$section']['properties']['index']]";
|
||||
}
|
||||
|
||||
$this->_parse_modifiers($output, $modifiers);
|
||||
$this->_parse_modifiers($output, $custom_mods);
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
function _parse_conf_var($conf_var_expr)
|
||||
{
|
||||
$modifiers = explode('|', $conf_var_expr);
|
||||
$custom_mods = explode('|', $conf_var_expr);
|
||||
|
||||
$var_name = substr(array_shift($modifiers), 1, -1);
|
||||
$var_name = substr(array_shift($custom_mods), 1, -1);
|
||||
|
||||
$output = "\$_config['$var_name']";
|
||||
|
||||
$this->_parse_modifiers($output, $modifiers);
|
||||
$this->_parse_modifiers($output, $custom_mods);
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
function _parse_section_prop($section_prop_expr)
|
||||
{
|
||||
$modifiers = explode('|', $section_prop_expr);
|
||||
$custom_mods = explode('|', $section_prop_expr);
|
||||
|
||||
preg_match('!%(\w+)\.(\w+)%!', array_shift($modifiers), $match);
|
||||
preg_match('!%(\w+)\.(\w+)%!', array_shift($custom_mods), $match);
|
||||
$section_name = $match[1];
|
||||
$prop_name = $match[2];
|
||||
|
||||
$output = "\$_sections['$section_name']['properties']['$prop_name']";
|
||||
|
||||
$this->_parse_modifiers($output, $modifiers);
|
||||
$this->_parse_modifiers($output, $custom_mods);
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
function _parse_modifiers(&$output, $modifiers)
|
||||
function _parse_modifiers(&$output, $custom_mods)
|
||||
{
|
||||
foreach ($modifiers as $modifier) {
|
||||
foreach ($custom_mods as $modifier) {
|
||||
$modifier = explode(':', $modifier);
|
||||
$modifier_name = array_shift($modifier);
|
||||
|
||||
@@ -918,7 +927,7 @@ class Smarty
|
||||
* First we lookup the modifier function name in the registered
|
||||
* modifiers table.
|
||||
*/
|
||||
$mod_func_name = $this->modifiers[$modifier_name];
|
||||
$mod_func_name = $this->custom_mods[$modifier_name];
|
||||
|
||||
/*
|
||||
* If we don't find that modifier there, we assume it's just a PHP
|
||||
|
@@ -19,4 +19,4 @@ My interests are:
|
||||
none
|
||||
{/section}
|
||||
|
||||
{$Name|@count}
|
||||
({$FirstName|@count})
|
||||
|
Reference in New Issue
Block a user