Smarty for Beginners
by Hermawan Haryanto
2003-12-28
Synopsis
Join Hermawan as he shows you the basic of the Smarty templating system.
http://codewalkers.com/tutorials/56/1.html Page 1
Smarty for Beginners
by Hermawan Haryanto
Preface
With this tutorial I aim to explain how to use the (http://smarty.php.net/) Smarty
Template Engine in the simplest terms so even beginning coders of PHP can
understand how to use it as their primary template engine.
By reading this tutorial I presume that all of you have the idea of what Smarty can do
for you and how it is an amazing template engine which has speed, portability and
stability.
Getting Started
The first thing you need to do is download the distribution from the
(http://smarty.php.net/download.php) download section on its official site. Save it on
your computer then unzip it somewhere in your harddrive. There is a folder named
"libs" on your extracted files. Upload that "libs" folder on your webhosting account and
rename it as "smarty".
Next, create a sub folder on your web directory; let's say your created subfolder is
"smartyrules", so now you can access that folder using your browser by typing this
address http://www.domain.com/smartyrules.
Inside that folder you should create another two subfolders, called "html" and
"compile". I'll explain to you later why this is necessary. If you use a *nix distribution
then you need to CHMOD 777 to the folder "compile", but if you use Windows then you
won't need to do that.
File Creation
Let's go back to "smartyrules" folder. In that folder, create a new PHP file with the
contents of as follows:
<?php
# Filename: libs.inc.php
# the exact path is defined.
$fixpath = dirname(__FILE__);
# changes this value according to your uploaded smarty distribution.
# don't forget to add trailing back slash
# change 'username' to your username on web hosting account
define ("SMARTY_DIR", "/home/username/smarty/");
require_once (SMARTY_DIR."Smarty.class.php");
$smarty = new Smarty;
$smarty->compile_dir = "$fixpath/compile";
$smarty->template_dir = "$fixpath/html";
?>
http://codewalkers.com/tutorials/56/1.html Page 2
Smarty for Beginners
by Hermawan Haryanto
Save the file as libs.inc.php.
Create another new PHP file, the contents as follows:
<?php
# filename: index.php
require_once ("./libs.inc.php");
$smarty->display ("index.html");
?>
Save the file as index.php
Go to "html" directory in the "smartyrules" subfolder. Create a new html file, the
contents as follows:
<html>
<head>
<title>My First Smarty Page</title>
</head>
<body>
This is my First Smarty Page
</body>
</html>
Save the file as index.html
All set, now you can open your browser and type your address
http://www.domain.com/smartyrules. You'll see your page is generated using
index.html in subfolder "html" as the template. That would your first Smarty page.
What Smarty does is compile index.html and put it in the "compile" folder then display it
right away from there. You can see in the "compile" folder, there are new files, they
were created by Smarty.
The Basics
The basic operation of a template engine is to assign variables or arrays and integrate
them with your html page.
Let's try something simple first. Open your index.php page and add this line before the
$smarty->display function.
$smarty->assign ("name", "Hermawan Haryanto");
Open your index.html page and add this line:
My name is {$name}
http://codewalkers.com/tutorials/56/1.html Page 3
Smarty for Beginners
by Hermawan Haryanto
The result would be:
My name is Hermawan Haryanto
Now, let's try assigning arrays to your template. Add these lines in index.php
remembering all added lines would be before the $smarty->display function.
$friends = array("Mike", "Simpson", "Bill", "Torvald", "Paul", "John
Doe");
$smarty->assign ("friends", $friends);
Open your index.html page and add these lines:
Friends List:
{section name=i loop=$friends}
{$friends[i]}<br>
{/section}
You'll see the array is pulled and populated on the html page.
What about accessing a database?
Nice question. I'll try to explain it in here. First you need to know your database
configuration such as username, password and your database name. If you have them
already, then you can create your table using your Database Administration tools. I
prefer using phpMyAdmin, you get the latest version of it at (http://phpmyadmin.net/)
http://phpmyadmin.net.
Create your table using this query:
CREATE TABLE `friends` (
`friends_id` int(10) unsigned NOT NULL auto_increment,
`friends_name` varchar(255) default NULL,
UNIQUE KEY `friends_id` (`friends_id`)
) TYPE=MyISAM;
INSERT INTO `friends` VALUES (1, 'Paul');
INSERT INTO `friends` VALUES (2, 'Matt');
INSERT INTO `friends` VALUES (3, 'John');
INSERT INTO `friends` VALUES (4, 'Mike');
INSERT INTO `friends` VALUES (5, 'Rendi');
INSERT INTO `friends` VALUES (6, 'Pailul');
Open your index.php file and add these lines:
http://codewalkers.com/tutorials/56/1.html Page 4
Smarty for Beginners
by Hermawan Haryanto
$db_host = "localhost";
$db_user = "database_user";
$db_pass = "database_pass";
$db_data = "database";
$conn = mysql_connect ($db_host, $db_user, $db_pass) OR DIE ("Can't connect to
database");
@mysql_select_db ($db_data, $conn);
$query = "SELECT * FROM friends";
$result = mysql_query ($query, $conn);
if (mysql_num_rows ($result) >= 1)
{
$friends = array();
while ($rows = mysql_fetch_array ($result, MYSQL_ASSOC)) array_push ($friends,
$rows);
$smarty->assign ("friends", $friends);
}
Open your index.html page and add these lines:
Friends List:
{section name=i loop=$friends}
{$friends[i].friends_name}<br>
{/section}
Now you'll see the list of friends on your page. You can do some other formatting such
as nl2br, truncate, upper, or lower directly from html template page, not from your
script. That is why we use Smarty, to separate between business logic and
presentation logic. The script should only work to pull data from db but not to format
the result. The formatting of the result is done in the html page.
Some fun stuff
Open your index.html file again and let's add some fun stuff. We will use some Smarty
predefined variables.
Add this line:
{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}
Refresh your browser and you'll see today's date and time on the server. The
formatting is done using strftime().
Add this line:
{$smarty.server.PHP_SELF}
http://codewalkers.com/tutorials/56/1.html Page 5
Smarty for Beginners
by Hermawan Haryanto
Refresh your browser and you'll see the filename you are accessing now. I guess the
file would be "/smartyrules/index.php". Let me know if it's something else :).
You can read all of this stuff in the Smarty manual. There are plenty of Smarty
predefined variables you can adapt and use on your pages. That's all for now, I'll be
back with another tutorial soon. All questions and suggestions are welcome.
About the Author
Hermawan Haryanto is a Senior Programmer of a Web Development Company in Las
Vegas. Handling programming services world wide and writing articles and tutorials
since 1996. Authoring (http://dekap.com/) dEkap.com with his wife. Visit
(http://hermawan.com/) his homepage and you can contact him through hermawan at
codewalkers dot com.
http://codewalkers.com/tutorials/56/1.html Page 6