2001-01-18 22:13:12 +00:00
|
|
|
SMARTY QUICKSTART GUIDE
|
|
|
|
|
-----------------------
|
|
|
|
|
|
|
|
|
|
So you don't like reading documentation either? This guide is to help you
|
|
|
|
|
immediately get your feet wet in Smarty, get a feel for how it works, what it is
|
|
|
|
|
for and if it will work for you.
|
|
|
|
|
|
|
|
|
|
We make a few assumptions here, such as you already have PHP installed on your
|
|
|
|
|
web server, you know the basics of unix file permissions, the basics of PHP and
|
|
|
|
|
how it works, etc.
|
|
|
|
|
|
|
|
|
|
OK, Let's get started.
|
|
|
|
|
|
|
|
|
|
INSTALLATION
|
|
|
|
|
------------
|
|
|
|
|
|
|
|
|
|
Unpack the Smarty tarball. You will see three class files: Smarty.class.php,
|
|
|
|
|
Smarty.addons.php and Config_File.class.php. You will need to have all three of
|
|
|
|
|
these files somewhere in your PHP include path, so when you call
|
|
|
|
|
require("Smarty.class.php") from within your application, it can find the class.
|
|
|
|
|
|
|
|
|
|
Ok, now change directories somewhere inside of your web server document root.
|
|
|
|
|
For this guide, we'll create a directory under the document root named "Smarty",
|
|
|
|
|
and put all of our work here.
|
|
|
|
|
|
|
|
|
|
$> cd /home/htdocs
|
|
|
|
|
$> mkdir Smarty
|
|
|
|
|
$> cd Smarty
|
|
|
|
|
|
|
|
|
|
now, we need to create a few directories for Smarty to use:
|
|
|
|
|
|
|
|
|
|
$> mkdir templates
|
|
|
|
|
$> mkdir templates_c
|
|
|
|
|
$> mkdir configs
|
|
|
|
|
|
|
|
|
|
Smarty needs to be able to write to the templates_c directory. You can change
|
|
|
|
|
the ownership of this directory to your web server user, but we'll just
|
|
|
|
|
change the permissions to 777 (drwxrwxrwx) to make it easy for this guide.
|
|
|
|
|
|
|
|
|
|
$> chmod 777 templates_c
|
|
|
|
|
$> ls -l
|
|
|
|
|
drwxrwxr-x 2 mohrt staff 512 Jan 18 14:18 configs/
|
|
|
|
|
drwxrwxr-x 2 mohrt staff 512 Jan 18 14:18 templates/
|
|
|
|
|
drwxrwxrwx 2 mohrt staff 512 Jan 18 14:18 templates_c/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Now we need to create two files, index.php and templates/index.tpl. index.php
|
|
|
|
|
is the file that we will be calling from our web browser. index.tpl is the file
|
|
|
|
|
that Smarty will use as it's template file. (.tpl files are never called
|
|
|
|
|
directly from the browser, only Smarty calls them.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------- index.php --------
|
|
|
|
|
<?php
|
|
|
|
|
require("Smarty.class.php");
|
|
|
|
|
$smarty = new Smarty;
|
2001-01-18 22:37:37 +00:00
|
|
|
$smarty->assign("Name","Ned");
|
2001-01-18 22:13:12 +00:00
|
|
|
$smarty->display("./templates/index.tpl");
|
|
|
|
|
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------- templates/index.tpl --------
|
|
|
|
|
<HTML>
|
|
|
|
|
<TITLE>Hello</TITLE>
|
|
|
|
|
<BODY>
|
2001-01-18 22:38:49 +00:00
|
|
|
Hello, {$Name}!
|
2001-01-18 22:13:12 +00:00
|
|
|
</BODY>
|
|
|
|
|
</HTML>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Now, view the index.php file from your web browser:
|
|
|
|
|
http://your.host.com/Smarty/index.php
|
|
|
|
|
|
2001-01-18 22:37:37 +00:00
|
|
|
You should see "Hello, Ned!" in your browser. If not, retrace the steps above
|
2001-01-18 22:13:12 +00:00
|
|
|
and make sure you follow the instructions exactly as they say. Also check the
|
|
|
|
|
installation instructions in the documenation, and check your installation of
|
|
|
|
|
PHP to be sure things are setup properly.
|
|
|
|
|
|
2001-01-18 22:37:37 +00:00
|
|
|
You see "Hello, Ned!" in your browser? Good!
|
2001-01-18 22:13:12 +00:00
|
|
|
|
|
|
|
|
What happened here is Smarty took the index.tpl file and compiled it into a php
|
|
|
|
|
script which you can take a look at in the templates_c directory. Smarty will
|
|
|
|
|
continue to use this compiled script until the index.tpl file is changed, then
|
|
|
|
|
it will automatically recompile. What this means for you: forget about the
|
2001-01-18 22:37:37 +00:00
|
|
|
templates_c directory. Out of sight, out of mind. You don't need to worry about
|
|
|
|
|
it, Smarty takes care of this technical stuff. Out of curiosity, you can see how
|
2001-01-18 22:13:12 +00:00
|
|
|
your templates look as compiled php scripts, but please don't touch them!
|
|
|
|
|
|
|
|
|
|
Now that we have Smarty functioning properly, let's get into the guts of Smarty
|
|
|
|
|
and learn what thing is all about. I'll try to briefly show examples to cover
|
|
|
|
|
the most important features of Smarty.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ASSIGNING VARIABLES
|
|
|
|
|
-------------------
|
|
|
|
|
|
2001-01-18 22:37:37 +00:00
|
|
|
Assigning variables to the template is very similar to the ways other template
|
|
|
|
|
engines do it. Example:
|
2001-01-18 22:13:12 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
--------- index.php --------
|
|
|
|
|
<?php
|
|
|
|
|
require("Smarty.class.php");
|
|
|
|
|
$smarty = new Smarty;
|
2001-01-18 22:37:37 +00:00
|
|
|
$smarty->assign("Name","Ned");
|
2001-01-18 22:13:12 +00:00
|
|
|
$smarty->assign(array(
|
2001-01-18 22:37:37 +00:00
|
|
|
"FirstName" => "Ned",
|
2001-01-18 22:13:12 +00:00
|
|
|
"LastName" => "Flanders",
|
|
|
|
|
"Address" => "Springfield"
|
|
|
|
|
));
|
|
|
|
|
$zipcode = "55555";
|
|
|
|
|
$smarty->assign("Zipcode",$zipcode);
|
|
|
|
|
$smarty->display("./templates/index.tpl");
|
|
|
|
|
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------- templates/index.tpl --------
|
|
|
|
|
<HTML>
|
|
|
|
|
<TITLE>Hello</TITLE>
|
|
|
|
|
<BODY>
|
2001-01-18 22:38:49 +00:00
|
|
|
Hello, {$Name}!<br>
|
|
|
|
|
{$FirstName}, {$LastName}<br>
|
|
|
|
|
{$Address}, {$Zipcode}
|
2001-01-18 22:13:12 +00:00
|
|
|
</BODY>
|
|
|
|
|
</HTML>
|
|
|
|
|
|
|
|
|
|
|
2001-01-18 22:37:37 +00:00
|
|
|
You can assign variables either one by one, or as an associative array. There
|
2001-01-18 22:13:12 +00:00
|
|
|
is also a way to append to assigned variables. See the documentation for
|
|
|
|
|
details.
|
|
|
|
|
|
|
|
|
|
INCLUDE
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
Now, let's see how Smarty can be used to include other template files. This is
|
|
|
|
|
handy if you have repetitive template data, such as headers and footers. You
|
|
|
|
|
will need to create a couple more template files: templates/header.tpl and
|
|
|
|
|
templates/footer.tpl.
|
|
|
|
|
|
|
|
|
|
--------- index.php --------
|
|
|
|
|
<?php
|
|
|
|
|
require("Smarty.class.php");
|
|
|
|
|
$smarty = new Smarty;
|
2001-01-18 22:37:37 +00:00
|
|
|
$smarty->assign("Name","Ned");
|
2001-01-18 22:13:12 +00:00
|
|
|
$smarty->assign(array(
|
2001-01-18 22:38:49 +00:00
|
|
|
<<<<<<< QUICKSTART
|
|
|
|
|
"FirstName" => "Fred",
|
|
|
|
|
"LastName" => "Flanders",
|
|
|
|
|
"Address" => "Springfield"
|
|
|
|
|
));
|
|
|
|
|
=======
|
2001-01-18 22:37:37 +00:00
|
|
|
"FirstName" => "Ned",
|
2001-01-18 22:13:12 +00:00
|
|
|
"LastName" => "Flanders",
|
|
|
|
|
"Address" => "Springfield"
|
|
|
|
|
));
|
2001-01-18 22:38:49 +00:00
|
|
|
>>>>>>> 1.2
|
2001-01-18 22:13:12 +00:00
|
|
|
$zipcode = "55555";
|
|
|
|
|
$smarty->assign("Zipcode",$zipcode);
|
|
|
|
|
$smarty->display("./templates/index.tpl");
|
|
|
|
|
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------- templates/index.tpl --------
|
|
|
|
|
{include file="header.tpl" title="Home Page"}
|
2001-01-18 22:38:49 +00:00
|
|
|
Hello, {$Name}!<br>
|
|
|
|
|
{$FirstName}, {$LastName}<br>
|
|
|
|
|
{$Address}, {$Zipcode}
|
2001-01-18 22:13:12 +00:00
|
|
|
{include file="footer.tpl"}
|
|
|
|
|
|
|
|
|
|
--------- templates/header.tpl --------
|
|
|
|
|
<HTML>
|
|
|
|
|
<TITLE>{$title|default:"Home Page"}</TITLE>
|
|
|
|
|
<BODY>
|
|
|
|
|
|
|
|
|
|
--------- templates/footer.tpl --------
|
|
|
|
|
</BODY>
|
|
|
|
|
</HTML>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Notice we are passing the variable "title" when we include the header.tpl file.
|
|
|
|
|
You can pass as many variables as you want. The included file inherits all the
|
|
|
|
|
current template vars, plus any that are passed to it. The passed variables are
|
|
|
|
|
only available within the scope of the included file. Also notice the way the
|
|
|
|
|
$title variable is printed to the template. It uses a variable modifier called
|
|
|
|
|
"default". Printing {$title|default:"Home Page"} means that if the value of
|
|
|
|
|
$title is empty, the text "Home Page" will be printed instead of nothing.
|
|
|
|
|
|
|
|
|
|
IF/ELSEIF/ELSE
|
|
|
|
|
--------------
|
|
|
|
|
|
2001-01-18 22:37:37 +00:00
|
|
|
This syntax is very straightforward. The documention goes into depth on this
|
2001-01-18 22:13:12 +00:00
|
|
|
one, so you should be able to do just about anything you want to with it.
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
|
|
--------- templates/index.tpl --------
|
|
|
|
|
{include file="header.tpl" title="Home Page"}
|
2001-01-18 22:38:49 +00:00
|
|
|
<<<<<<< QUICKSTART
|
|
|
|
|
{if $Name eq ""}
|
|
|
|
|
Hello, Noname!<br>
|
|
|
|
|
{elseif $Name eq "Fred"}
|
|
|
|
|
Hello, Frederick!<br>
|
|
|
|
|
{else}
|
|
|
|
|
Hello, {$Name}<br>
|
|
|
|
|
{/if}
|
|
|
|
|
|
|
|
|
|
{$FirstName}, {$LastName}<br>
|
|
|
|
|
{$Address}, {$Zipcode}
|
|
|
|
|
=======
|
2001-01-18 22:13:12 +00:00
|
|
|
{if $Name eq ""}
|
|
|
|
|
Hello, Noname!<br>
|
2001-01-18 22:37:37 +00:00
|
|
|
{elseif $Name eq "Ned"}
|
|
|
|
|
Hello, Neddy!<br>
|
2001-01-18 22:13:12 +00:00
|
|
|
{else}
|
|
|
|
|
Hello, {$Name}<br>
|
|
|
|
|
{/if}
|
|
|
|
|
|
|
|
|
|
{$FirstName}, {$LastName}<br>
|
|
|
|
|
{$Address}, {$Zipcode}
|
2001-01-18 22:38:49 +00:00
|
|
|
>>>>>>> 1.2
|
2001-01-18 22:13:12 +00:00
|
|
|
{include file="footer.tpl"}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SECTIONS (Dynamic Blocks)
|
|
|
|
|
-------------------------
|
|
|
|
|
|
|
|
|
|
Looping through arrays of data in Smarty is relatively simple, using the
|
|
|
|
|
{section} function. Two attributes are required: name and loop. name is the name
|
|
|
|
|
of the section, and loop is the name of the array that determines the number of
|
|
|
|
|
times the section will loop.
|
|
|
|
|
|
|
|
|
|
--------- index.php --------
|
|
|
|
|
<?php
|
|
|
|
|
require("Smarty.class.php");
|
|
|
|
|
$smarty = new Smarty;
|
2001-01-18 22:37:37 +00:00
|
|
|
$smarty->assign("FirstName",array("Ned","Bart","Montgomery"));
|
2001-01-18 22:13:12 +00:00
|
|
|
$smarty->assign("LastName",array("Flanders","Simpson","Burns"));
|
|
|
|
|
$smarty->display("./templates/index.tpl");
|
|
|
|
|
?>
|
|
|
|
|
|
|
|
|
|
--------- templates/index.tpl --------
|
|
|
|
|
{include file="header.tpl" title="Home Page"}
|
2001-01-18 22:38:49 +00:00
|
|
|
{section name=people loop=$FirstName}
|
|
|
|
|
{%people.rownum%} {$people/FirstName} {$people/LastName}<br>
|
|
|
|
|
{sectionelse}
|
|
|
|
|
There are no values to loop through.
|
|
|
|
|
{/section}
|
|
|
|
|
<p>
|
|
|
|
|
There were {%people.loop%} names in this list.
|
2001-01-18 22:13:12 +00:00
|
|
|
{include file="footer.tpl"}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Notice that when printing variables inside of the section, the section name must
|
|
|
|
|
be referenced in the name of the variable being displayed. This lets Smarty
|
|
|
|
|
understand that you want to print the value in the array postion indexed by the
|
|
|
|
|
current loop value. There are also internal template variables available within
|
|
|
|
|
the section that display the loop iteration and the total number of times the
|
|
|
|
|
section is looped. Also note the {sectionelse}. This would have been displayed
|
|
|
|
|
had the loop array $FirstName been empty.
|
|
|
|
|
|
|
|
|
|
You can also do complex nested sections, like so:
|
|
|
|
|
|
|
|
|
|
--------- index.php --------
|
|
|
|
|
<?php
|
|
|
|
|
require("Smarty.class.php");
|
|
|
|
|
$smarty = new Smarty;
|
2001-01-18 22:37:37 +00:00
|
|
|
$smarty->assign("FirstName",array("Ned","Bart","Montgomery"));
|
2001-01-18 22:13:12 +00:00
|
|
|
$smarty->assign("LastName",array("Flanders","Simpson","Burns"));
|
|
|
|
|
$smarty->assign("ContactNames",array(
|
2001-01-18 22:38:49 +00:00
|
|
|
array("email","home","cell"),
|
|
|
|
|
array("email","home"),
|
|
|
|
|
array("email","home","fax")
|
|
|
|
|
));
|
2001-01-18 22:13:12 +00:00
|
|
|
$smarty->assign("ContactVals",array(
|
2001-01-18 22:38:49 +00:00
|
|
|
array("fred@simpsons.com","555-666-7777","555-444-3333"),
|
|
|
|
|
array("bart@simpsons.com","555-111-2222"),
|
|
|
|
|
array("monty@simpsons.com","555-888-9999","555-234-5678"),
|
|
|
|
|
));
|
2001-01-18 22:13:12 +00:00
|
|
|
|
|
|
|
|
$smarty->display("./templates/index.tpl");
|
|
|
|
|
?>
|
|
|
|
|
|
|
|
|
|
--------- templates/index.tpl --------
|
|
|
|
|
{include file="header.tpl" title="Home Page"}
|
2001-01-18 22:38:49 +00:00
|
|
|
{section name=people loop=$FirstName}
|
|
|
|
|
{%people.rownum%} {$people/FirstName} {$people/LastName}<br>
|
|
|
|
|
{section name=contacts loop=$people/ContactNames}
|
|
|
|
|
{* for fun, lets bold every other row *}
|
|
|
|
|
{if %contacts.rownum% is even}<b>{/if}
|
|
|
|
|
{$people/contacts/ContactNames}: {$people/contacts/ContactVals}<br>
|
|
|
|
|
{if %contacts.rownum% is even}</b>{/if}
|
|
|
|
|
{/section}
|
|
|
|
|
<br>
|
|
|
|
|
{sectionelse}
|
|
|
|
|
There are no values to loop through.
|
|
|
|
|
{/section}
|
|
|
|
|
<p>
|
|
|
|
|
There were {%people.loop%} names in this list.
|
2001-01-18 22:13:12 +00:00
|
|
|
{include file="footer.tpl"}
|
|
|
|
|
|
|
|
|
|
|
2001-01-18 22:37:37 +00:00
|
|
|
This should be enough to get your feet wet. Also, check out config file
|
2001-01-18 22:13:12 +00:00
|
|
|
variables, built-in functions, custom functions, variable modifiers, all sorts
|
|
|
|
|
of good stuff. Now go read the documentation, and Good Luck!
|