From 52e80776c639a31fc0813c72f43f3f70a8131b2c Mon Sep 17 00:00:00 2001 From: mohrt Date: Thu, 18 Jan 2001 20:41:43 +0000 Subject: [PATCH] added dislaimers --- README | 530 ++------------------------------------- Smarty.addons.php | 29 ++- Smarty.class.php | 26 ++ demo/templates/index.tpl | 7 +- doc.sgm | 164 ++++++------ libs/Smarty.class.php | 26 ++ templates/index.tpl | 7 +- 7 files changed, 205 insertions(+), 584 deletions(-) diff --git a/README b/README index 30c39d3b..1c5dff44 100644 --- a/README +++ b/README @@ -1,7 +1,8 @@ NAME: - Smarty - the PHP compiling template engine v0.9 - + Smarty - the PHP compiling template engine + +VERSION: 1.0 AUTHORS: @@ -28,8 +29,6 @@ DESCRIPTION: 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. Some of Smarty's features: @@ -42,519 +41,42 @@ DESCRIPTION: the template language is extremely extensible. * configurable template delimiter tag syntax, so you can use {}, {{}}, , 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 + * 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. * unlimited nesting of sections,ifs, etc. allowed * it is possible to imbed PHP code right in your template files, - although doubtfully needed since the engine is so customizable. + although not recommended and doubtfully needed since the engine + is so customizable. REQUIREMENTS: - Smarty requires PHP 4.0.4 or later (4.0.3 and earlier contain - a bug in preg_grep() that won't allow the parser to function - properly.) - -VARIABLE TYPES: - - 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 - {#tableBgColor#} <-- prints variable from config file - {if %News.index% is even} <-- checks if the index is even - ... - {/if} - -CLASS METHODS: - - assign($var,$val) - ----------------- - Assign variables to be used in the template engine. - - append($var,$val) - ----------------- - Append values to assigned variables - - display($tpl_file) - ---------------------- - Print the results of a parsed template file - - fetch($tpl_file) - -------------------------- - Return the results of a parsed template file - - clear_assign($var) - ------------------ - Clear an assigned template variable. - - clear_all_assign() - ------------------ - Clear all the assigned template variables. - - get_template_vars() - ------------------ - returns an array containing assigned template variables - - -CLASS VARIABLES: (default value in parenthesis) - - $compile_check Whether or not to check for a needed compile. - To optimize performance, set this to - false once development is complete and - the scripts are initially compiled. - (true) - - $template_dir Name of directory containing templates - - $compile_dir_ext Extention to give the name of the compile - directory. For example, if your templates - are stored in a directory named - "templates", then all compiled template - files will be kept in "templates_c" in the - same directory. (_c) - - $tpl_file_ext The extention used on template files. (.tpl) - All other files in the template directory - without this extention are ignored. - - $max_recursion_depth The maximum recursion depth for template - files includes. This is to help catch an - infinite loop. 0 == unlimited. (10) - - $allow_php Whether or not to allow PHP code in your - templates. If set to false, PHP code is - escaped. (false) - - - $left_delimiter The left delimiter of the template syntax. - For some development tools, it may be handy - to change the delimiters to something like - "" respectfully. ({) - - $right_delimiter The right delimiter of the template syntax. (}) - - $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. - + Smarty requires PHP 4 or later. Smarty was developed and tested + with 4.0.4pl1. INSTALLATION: -* 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) - can write to the directory. You will see appropriate error - messages if the directory creation or php file creation fails. +* copy the Smarty.class.php, Smarty.addons.php and Config_File.class.php + scripts to a directory that is in your PHP include path. + +* in the same directory as your php application, + create a "templates" directory and a "templates_c" directory. + Be sure the "templates_c" directory is writable by your + web server user (usually nobody), or chmod 777 the directory if + you are not sure. * setup your php and template files. A good working example is included to get you started. - -EXAMPLE: - -A simple example, built out of a few files: - -index.php ---------- - -assign("Name","Gomer Pyle"); -$smarty->assign("loopvar",array("one","two","three","four")); -$smarty->assign("loopvar2",array("one","two","three","")); - -// now simply display the template -$smarty->display("./templates/index.tpl"); - -?> - -templates/header.tpl --------------------- - - - -My Homepage - - -templates/footer.tpl --------------------- - - - - - -templates/index.tpl -------------------- - -{* include the header.tpl file here *} -{include header.tpl} -hello, my name is {$Name}.
-{if $Name eq "Joe"} - I am Joe.
-{else} - I am not Joe.
-{/if} -{* now lets test a section loop *} -

-testing a loop:
-{* $loopvar is used to determine the number - of times the section is looped *} -{section name="outside" loop=$loopvar} - {* show the current loop iteration *} - current loop iteration is {$outside/rownum}
- {* show the current index value of $loopvar - within the "outside" section *} - loop var is {$outside/loopvar}
- {* now we'll loop through a nested section *} - {section name="inside" loop=$loopvar} - {* show the current index value of $loopvar - within the "inside" section *} - inside loop: {$inside/loopvar}
- {/section} -

-{/section} - -

-{* display $Name as HTML escaped *} -Hello, my name is {$Name|htmlesc} -{* include the footer.tpl file here *} -{include footer.tpl} - - -INCLUDE LOGIC: - -Smarty supports including other template files. - -* you must supply the relative path to the - included template file from the default - template directory path. - - {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: - -Smarty supports if/else logic like so: - -{if $Name eq "John"} - I am John! -{elseif $Name eq "Joe"} - I am Joe! -{else} - I don't know who I am. -{/if} - -* "eq", "ne","neq", "gt", "lt", "lte", "le", "gte" "ge", - "==","!=",">","<","<=",">=" are all valid conditional - qualifiers. - -SECTIONS: - -Sections are portions of the template that are meant to be looped. - -Example: - -(Assuming $LastName, $MiddleName and $FirstName have been assigned): - -{section name="employees" loop=$LastName} - This employee is {$employees/LastName},{$employees/FirstName} - {$employees/MiddleName}
-{/section} - -The "name" attribute of a section is the name of the section. -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. - -* 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} -* It is OK to mention variables of parent sections - within nested child sections. -* nothing in the section will display if the - looping array is unset. - -Sections can be nested, like so: - -{section name="employees" loop=$LastName} - This employee is {$employees/LastName}, - {$employees/FirstName} {$employees/MiddleName}
- {section name="employee_jobs" loop=$JobDescription} - Available jobs for {$employees/FirstName}: - {$employee_jobs/JobDescription}
- {/section} -{/section} - -SPECIAL FUNCTIONALITY: - -There are some special functions that determine the -current loop iteration of a section. These are surrounded -with "%" characters, and they are: - -rownum: current row, first row treated as 1 -index: current row, first row treated as 0 - -The following are possible "is" expression types -for these functions: - -odd: true if value is odd -even: true if value is even -mod: true if value is divisible by X - -Examples: - -{section name=month loop=$var} - {if %month.rownum% eq 4} - {* in 4th row of section loop *} - {/if} - {if %month.rownum% is even} - {* current rownum is even *} - {/if} - {if %month.rownum% is odd} - {* current rownum is odd *} - {/if} - {if %month.rownum% is even by 3} - {* each even row, grouped by 3. - so rows 1,2,3 are true (even), - 4,5,6 are odd (false), etc *} - {/if} - {if %month.rownum% is odd by 3} - {* each odd row, grouped by 3. - so rows 1,2,3 are true (odd), - 4,5,6 are even (false), etc *} - {/if} - {if %month.rownum% is mod 4} - {* true if current row is divisible by 4 *} - {/if} -{/section} - -THE {strip} TAG: - -A special tag called {strip} can be used to strip out -extra space, tabs or newlines at the beginning and end -of each template row within {strip} and {/strip}. -For example: - - - - - {section name=row loop=$weekday} - {$row/weekday}  - {/section} - - - - -This will return unwanted results because of -the extra tabs and newlines contained within the -tags. Normally to remedy this, you must run all -the lines together in the template: - - - -{section name=row loop=$weekday}{$row/weekday} {/section} - - - - -As you can see, this quickly makes the template unreadable. -An alternate solution is to use the {strip} tag: - - - - {strip} - - {section name=row loop=$weekday} - {%row.weekday%}  - {/section} - - {/strip} - - - - -What this will do is strip out tabs, spaces and newlines -at the beginning and end of each line before outputting -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: - -These are used in the template to output the literal -left and right delimiters. Normally these are -"{" and "}" if you are using the default delimiters. - -VARIABLE MODIFIERS: - -Optionally, you can modify variables on-the-fly by passing -them through variable modifiers. Several variable modifiers -come with the default template engine. For example, if you -want a variable to be all uppercase when it is displayed, -you can do the following: - -{$Name|upper} - -This will display the value of $Name in uppercase. -Notice the vertical pipe "|" between the variable name -and the modifier. This is how the template parser -distinguishes that you want to pass the variable through -a modifier before being displayed. Anything to the right -of the variable name after a pipe "|" is a variable -modifier. - -Here is an example of printing the variable $Name -as HTML escaped: - -{$Name|escape} - -You are also allowed to mix any variable modifiers -on a single variable: - -{$Name|upper|escape} - -Variable modifiers are read from left to right. In the -above example, the variable will first be uppercased, -then HTML escaped, then finally displayed. - -Variable modifiers are passed the value of of the -variable (or the results of the previous modifier) -as the first argument. They can also be passed additional -arguments by specifying them in context, separated by -colons. For example, lets say you want to display only -the first 40 characters of a variable: - -{$article|length:40} - -This will print out the first 40 characters of the -variable $article. - -Variable modifiers are also allowed within template logic -constructs, such as {if ...} tags. Example: - -{if $Name|upper eq "JOE"} - His name is JOE. -{else} - His name is not JOE. -{/if} - -You may also use PHP functions as variable -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 value, otherwise it won't do much good! - -Example of using a PHP function: - -

-{$article|wordwrap:72}
-
- -This will print the value of $article wordwrapped at 72 chars. - -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. Smarty comes with a wrapper that passes -them in the correct order: - -{$date|date_format:"%Y-%m-%d"} - -This will pass the value of $date, followed by the specified -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 two -functions that come bundled with Smarty, which are the following: - -{html_options ...} creates HTML options for dropdowns -{html_select_date ...} creates HTML date dropdowns - -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: - -index.tpl ---------- - -{config_load file="index.conf"} - - - -index.conf ----------- - -title = "My Homepage" -imagePath = "/images" - - -creating your own: - -To create your own custom functions or modifiers, do the following: - -* 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]}, or {$var|modifier_name[:arg1:arg2]} +BUGS: + + There are no known bugs with Smarty, although there are some + bugs in PHP that cause problems with Smarty. preg_grep() previous + to 4.0.4 has a bug which Smarty has a built-in workaround for. + PHP 4.0.4 has a bug with user callbacks which would cause this + syntax in Smarty to crash PHP: {$varname|@modname} + Use PHP 4.0.4pl1 to fix this, or avoid using the "@" with + modifiers. COPYRIGHT: Copyright(c) 2000,2001 ispi. All rights reserved. diff --git a/Smarty.addons.php b/Smarty.addons.php index db63f02c..0b683ed4 100644 --- a/Smarty.addons.php +++ b/Smarty.addons.php @@ -2,10 +2,37 @@ /* * Project: Smarty: the PHP compiled template engine - * File: Smarty.functions.php + * File: Smarty.addons.php * Author: Monte Ohrt * Andrei Zmievski * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * You may contact the authors of Smarty by e-mail at: + * monte@ispi.net + * andrei@ispi.net + * + * Or, write to: + * Monte Ohrt + * CTO, ispi + * 237 S. 70th suite 220 + * Lincoln, NE 68510 + * + * The latest version of Smarty can be obtained from: + * http://www.phpinsider.com + * */ /*============================================*\ diff --git a/Smarty.class.php b/Smarty.class.php index 8f539011..e5401301 100644 --- a/Smarty.class.php +++ b/Smarty.class.php @@ -8,6 +8,32 @@ * Andrei Zmievski * parsing engine rewrite and a lot more * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * You may contact the authors of Smarty by e-mail at: + * monte@ispi.net + * andrei@ispi.net + * + * Or, write to: + * Monte Ohrt + * CTO, ispi + * 237 S. 70th suite 220 + * Lincoln, NE 68510 + * + * The latest version of Smarty can be obtained from: + * http://www.phpinsider.com * */ diff --git a/demo/templates/index.tpl b/demo/templates/index.tpl index 6bfbbc71..b1677583 100644 --- a/demo/templates/index.tpl +++ b/demo/templates/index.tpl @@ -1,9 +1,12 @@ {config_load file=test.conf section="my foo"} {include file=header.tpl title=foo} +
+
 Title: {#title#|capitalize}
 
-{$SCRIPT_NAME}
+
+the value of $SCRIPT_NAME is {$SCRIPT_NAME}
 
 {* A simple variable test *}
 hello, my name is {$Name|upper}
@@ -35,3 +38,5 @@ testing strip tags
 	
 
 {/strip}
+
+
diff --git a/doc.sgm b/doc.sgm index 4ff0e5ef..316f7562 100644 --- a/doc.sgm +++ b/doc.sgm @@ -2,8 +2,18 @@ Smarty - the compiling PHP template engine - MonteOhrt - AndreiZmievski + + MonteOhrt + +
monte@ispi.net
+
+
+ + AndreiZmievski + +
andrei@ispi.net
+
+
2001ispi, Inc.
@@ -12,10 +22,11 @@ It is undoubtedly one of the most asked questions on the PHP mailing lists: how do I make my PHP scripts independent of the layout? While PHP is billed as "HTML embedded scripting language", after writing a - couple of projects that mixed PHP and HTML freely one comes up with - the idea that separation of form and content is a Good Thing [TM]. In + couple of projects that mixed PHP and HTML freely one comes up with the + idea that separation of form and content is a Good Thing [TM]. In addition, in many companies the roles of layout designer and programmer - are separate. Consequently, the search for a templating solution ensues. + are separate. Consequently, the search for a templating solution + ensues. In our company for example, the development of an application goes on @@ -28,22 +39,20 @@ between programming/HTML a couple of times. Thus, it's important to have good template support because programmers don't want anything to do with HTML and don't want HTML designers mucking around with PHP - code, and designers need support for config files, dynamic blocks and - other stuff, but they don't want to have to deal with intricacies of - the PHP programming language. + code. Designers need support for config files, dynamic blocks and other + stuff, but they don't want to have to deal with intricacies of the PHP + programming language. Looking at many templating solutions available for PHP today, most of them provide a rudimentary way of substituting variables into templates - and do a limited form of dynamic block functionality (a section of a - template that is looped over and over with a set of indexed variables.) - But our needs required a bit more than that. We didn't want programmers - to be dealing with HTML layout at ALL, but this was almost inevitable. - For instance, if a designer wanted background colors to alternate on - dynamic blocks, this had to be worked out with the programmer in - advance. We also needed designers to be able to use their own - configuration files, and pull variables from them into the templates. - The list goes on. + and do a limited form of dynamic block functionality. But our needs + required a bit more than that. We didn't want programmers to be dealing + with HTML layout at ALL, but this was almost inevitable. For instance, + if a designer wanted background colors to alternate on dynamic blocks, + this had to be worked out with the programmer in advance. We also + needed designers to be able to use their own configuration files, and + pull variables from them into the templates. The list goes on. We started out writing out a spec for a template engine about a year @@ -63,9 +72,9 @@ expressions and the code turned out to be rather, shall we say, impenetrable. It was also noticably slow in large applications from all the parsing and regular expression work it had to do on each - invocation. But the main problem from programmer's point of view was - that you had to do a lot of work in the PHP script to setup and process - templates and dynamic blocks especially. + invocation. The biggest problem from a programmer's point of view was + all the necessary work in the PHP script to setup and process templates + and dynamic blocks. How do we make this easier? Then came the vision of what ultimately became Smarty. We know how fast @@ -103,7 +112,7 @@ as you like. Unlimited nesting of sections, ifs, etc. allowed. It is possible to embed PHP code right in your template files, - although this may not be needed (and definately not recommended) + although this may not be needed (nor recommended) since the engine is so customizable. @@ -133,33 +142,30 @@ Requirements - Smarty requires PHP 4 or later. 4.0.4 contains a bug that crashes PHP when - the "@" modifier, such as {$var|@count}. 4.0.3 - and earlier contain a bug in preg_grep() that won't allow the parser to - function properly, so to preserve performance Smarty will automatically - use built-in preg_grep() when it can and use en emulated version of it - otherwise. + Smarty requires PHP 4 or later. See the + BUGS section for caveats. Installing Smarty - Installing Smarty is fairly straightforward, there is just one thing you - must be aware of. Remember that Smarty creates compiled versions of the - template code. This usually means allowing user "nobody" (or whomever - the web server runs as) to have permission to write the files. Each - installation of a Smarty application minimally needs a templates + Installing Smarty is fairly straightforward, there is just one thing + you must be aware of. Remember that Smarty creates compiled versions of + the template code. This usually means allowing user "nobody" (or + whomever the web server runs as) to have permission to write the files. + Each installation of a Smarty application minimally needs a templates directory and a compiled templates directory. If you use configuration files you will also need a directory for those. By default these are named "templates", and "templates_c" and "configs" respectively. - Copy the Smarty.class.php and Smarty.addons.php scripts to a directory - that is in your PHP include_path. NOTE: PHP will try to create a - directory alongside the executing script called "templates_c". Be sure - that directory permissions allow this to happen. You will see PHP error - messages if this fails. You can also create the directory yourself - before hand, and change the file ownership accordingly. See below. + Copy the Smarty.class.php, Smarty.addons.php and Config_File.class.php + scripts to a directory that is in your PHP include_path. NOTE: PHP will + try to create a directory alongside the executing script called + "templates_c". Be sure that directory permissions allow this to happen. + You will see PHP error messages if this fails. You can also create the + directory yourself before hand, and change the file ownership + accordingly. See below. Example of installing Smarty @@ -181,9 +187,9 @@ chown nobody:nobody templates_c Setting up Smarty - There are several variables that are at the top of the Smarty.class.php file. You - can usually get away with leaving these at their default settings. This is a list - of them and what each one does. + There are several variables that are at the top of the Smarty.class.php + file. You can usually get away with leaving these at their default + settings. This is a list of them and what each one does. Configuration variables @@ -193,8 +199,8 @@ chown nobody:nobody templates_c Upon each invocation of the PHP application, Smarty recursively traverses the template directory and its subdirectories and - searches for all the files with the template extension that have - changed (later time stamp) since the last time they were + searches for all the files with the template extension that + have changed (later time stamp) since the last time they were compiled. For each one that has changed, it recompiles that template. By default this variable is set to true. The compile check has very minimal impact on the application performance. @@ -226,8 +232,9 @@ chown nobody:nobody templates_c $tpl_file_ext - This is the extention used for template files. By default this is ".tpl". - All other files in the template directory are ignored. + This is the extention used for template files. By default this + is ".tpl". All other files in the template directory are + ignored. @@ -236,7 +243,7 @@ chown nobody:nobody templates_c Whether or not to allow PHP code in the templates. If set to false, PHP code is escaped and not interpreted. Embedding PHP code into templates is highly discouraged. Use custom functions - or modifiers instead. Default is "false". + or modifiers instead. Default is "false". @@ -268,7 +275,8 @@ chown nobody:nobody templates_c $custom_mods - This is a mapping of the names of variable modifiers in the template to + This is a mapping of the names of variable + modifiers in the template to the names of functions in PHP. These are usually kept in Smarty.addons.php. @@ -499,7 +507,7 @@ Your last login was on January 11th, 2001. Config file variables cannot be displayed until after they are loaded in from a config file. This procedure is explained later in this document under - config_load. + config_load. @@ -537,8 +545,8 @@ Your last login was on January 11th, 2001. - Both built-in functions and custom functions work exactly the same - way syntactically. + Both built-in functions and custom functions have the same syntax in + the templates. @@ -560,9 +568,9 @@ Your last login was on January 11th, 2001. {include file=#includeFile#} - +</SELECT> @@ -588,9 +596,9 @@ Your last login was on January 11th, 2001. {include file=#includeFile#} {* display dropdown lists *} - +</SELECT> @@ -605,8 +613,8 @@ Your last login was on January 11th, 2001. and change the colors. With a config file, the colors can be kept in one place, and only one file needs to be updated. Note that to use config files, you must include the Config_File.class.php - In your PHP include path. The Config_File class can be found at - http://www.phpinsider.com. Smarty will implicitly include the file if you + In your PHP include path. Config_File.class.php comes bundled with + Smarty. Smarty will implicitly include the file if you don't already include it in your application. @@ -650,7 +658,7 @@ Intro = """This is a value that spans more Config files are loaded into templates with the built-in function - called config_load. + called config_load. @@ -660,7 +668,7 @@ Intro = """This is a value that spans more are integral to the template language. You cannot create custom functions with the same names, nor can you modify built-in functions. - + config_load This function is used for loading in variables from a @@ -788,9 +796,9 @@ Intro = """This is a value that spans more parameters #banner_location_id# and #site_id#. Smarty will look for a function named insert_getBanner() in your PHP application, passing the values of #banner_location_id# and #site_id# as the first argument - in an indexed array. (All insert function names in + in an indexed array. All insert function names in your application must be prepended with "insert_" to remedy possible - function name-space conflicts.) Your insert_getBanner() function should + function name-space conflicts. Your insert_getBanner() function should do something with the passed values and return the results. These results are then displayed in the template in place of the insert tag. In this example, Smarty would call this function: @@ -837,7 +845,7 @@ Intro = """This is a value that spans more ... {/if} -{* you can also imbed php function calls, where appropriate *} +{* you can also imbed php function calls *} {if count($var) gt 0} ... {/if} @@ -933,7 +941,7 @@ OUTPUT: - + section,sectionelse Template sections are used for looping over arrays of data. @@ -942,8 +950,7 @@ OUTPUT: section can be anything you like, made up of letters, numbers and underscores. Sections can be nested, and the nested section names must be unique from each other. The loop variable - determines the number of times the section will loop. sectionelse - will be used if there are no values in the loop variable. + determines the number of times the section will loop. When printing a variable within a section, the section name must be prepended to the variable name, separated by a slash (/). sectionelse is executed when there are no values in the loop @@ -1197,8 +1204,8 @@ the section was shown. strip - Strip is another nice feature of the template engine. Many times - you run into the issue where white space and carriage returns + Many times web designers + run into the issue where white space and carriage returns affect the output of the rendered HTML (browser "features"), so you must run all your tags together in the template to get the desired results. This usually ends up in unreadable or @@ -1432,7 +1439,8 @@ OUTPUT: Variable Modifiers - Variable modifiers are a bit different than custom functions. + Variable modifiers are a bit different than + custom functions. They do just what they sound like, they modify variables before they are displayed to the template. The best way to explain these are by example. @@ -1668,7 +1676,7 @@ is the first week that has at least 4 days in the current year, and with Monday This truncates a variable to a character length, default is 80. As an optional second parameter, you can specify a string of text - to display at the end if the variable was indeed truncated. The + to display at the end if the variable was truncated. The characters in the string are included with the original truncation length. By default, truncate will attempt to cut off at a word boundary. If you want to cut off at the exact character length, pass the optional @@ -1711,6 +1719,8 @@ is the first week that has at least 4 days in the current year, and with Monday As of now, Smarty is not a validating template parser. This means that the parser will blindly convert the template to PHP scripts, irregardless of any syntax errors in the markup tags that may be present in the template. + Smarty can catch certain template errors like missing attributes to + functions, but not syntax errors like missing close tags. These types of errors can end up in PHP run-time errors. When you encounter a PHP error when attempting to display the template in a browser, the error line number will correspond to the @@ -1724,16 +1734,16 @@ is the first week that has at least 4 days in the current year, and with Monday - - Syntax Highlighting in editors + + BUGS - We have created some syntax highlighting for Nedit, a freely downloadable - text editor for X windows. You can find the files and instructions on the - Smarty web site. + There are no known bugs with Smarty, although there are some + bugs in PHP that can cause problems with Smarty. preg_grep() previous + to 4.0.4 has a bug which Smarty accomodates with a built-in workaround. + PHP 4.0.4 has a bug with user callbacks which would cause this + syntax in Smarty to crash PHP: {$varname|@modname} + Use PHP 4.0.4pl1 to fix this, or avoid using the "@" with + modifiers. - - FAQ - -
diff --git a/libs/Smarty.class.php b/libs/Smarty.class.php index 8f539011..e5401301 100644 --- a/libs/Smarty.class.php +++ b/libs/Smarty.class.php @@ -8,6 +8,32 @@ * Andrei Zmievski * parsing engine rewrite and a lot more * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * You may contact the authors of Smarty by e-mail at: + * monte@ispi.net + * andrei@ispi.net + * + * Or, write to: + * Monte Ohrt + * CTO, ispi + * 237 S. 70th suite 220 + * Lincoln, NE 68510 + * + * The latest version of Smarty can be obtained from: + * http://www.phpinsider.com * */ diff --git a/templates/index.tpl b/templates/index.tpl index 6bfbbc71..b1677583 100644 --- a/templates/index.tpl +++ b/templates/index.tpl @@ -1,9 +1,12 @@ {config_load file=test.conf section="my foo"} {include file=header.tpl title=foo} +
+
 Title: {#title#|capitalize}
 
-{$SCRIPT_NAME}
+
+the value of $SCRIPT_NAME is {$SCRIPT_NAME}
 
 {* A simple variable test *}
 hello, my name is {$Name|upper}
@@ -35,3 +38,5 @@ testing strip tags
 	
 
 {/strip}
+
+