It’s not a new name when we talk about LAMP. Not even like, I am the first going to write any thing about this.
It’s just for my Quick reference (As many time I collected some good information from the net and later that is not available for so many reason... :) )
Smarty is a PHP template available open source. Easy to use, have good documentation and plug-in available and even allow to write custom fuctions
What is a template and what’s the use to have that?
Templates are used to separate the application logic from presentation logic. Programmer handles the application side and presentation side will be maintained by designer.
So templates try to present the code in such a way so that designer can easily understand or don’t have to go through all the details of coding.
Available PHP templates are:-
- Smarty PHP template,
- PEAR::HTML_Template_Flexy PHP template, 4/2/2009 class="MsoNormal" style="">PEAR::HTML_Template_IT PHP template,
- PEAR::HTML_Template_PHPLIB PHP template,
- PEAR::HTML_Template_Sigma PHP template,
- PEAR::HTML_Template_Xipe PHP template,
- patTemplate PHP template.
Why use Smarty template?
In Smarty’s word:
- Designers can't break application code. They can mess with the templates all they want, but the code stays intact. The code will be tighter, more secure and easier to maintain.
- Errors in the templates are confined to the Smarty’s error handling routines, making them as simple and intuitive as possible for the designer.
- With presentation on its own layer, designers can modify or completely redesign it from scratch, all without intervention from the programmer.
- Programmers aren't messing with templates. They can go about maintaining the application code, changing the way content is acquired, making new business rules, etc. without disturbing the presentation layer.
- Templates are a close representation of what the final output will be, which an intuitive approach is. Designers don't care how the content got to the template. If you have extraneous data in the template such as an SQL statement, this opens the risk of breaking application code by accidental deletion or alteration by the designer.
- You are not opening your server to the execution of arbitrary PHP code. Smarty has many security features built in so designers won't breach security, whether intentional or accidental. They can only do what they are confined to in the templates.
Smarty uses {$title} instead of <? echo $title; ?>.
{$title} is less extraneous than <? echo $title; ?>, so it was pretty evident that a simpler syntax helps to make templates easier to read and maintain.
Installation of smarty template
- Download smarty. You will get “libs” folder. Libs folder will have : -
- internals, plugin, configFile.class.php, debug.tpl, smarty.class.php and smarty_compile.class.php.
- Now create four dirs:- (under a folder like /smarty/)
- Smarty/templates/
- Smarty/template_c/
- Smarty/cache/
- Smarty/configs/
Note : template_c will have your all compiled template.
- Now you will store all your templates in /templates/ folder.
- Your config file will be placed at /configs/ folder.
- Smarty will store cache file at /cache/ folder, if you have enabled cache. You will enable cache through setting.
Note : Give /template_c and /cache proper permission for writing.
Now start coding with Smarty Template
Your first smarty page: - index.php [PHP file]
// Full path to smarty class-
require ‘your_Smarty_path/Smarty.class.php’;
$smarty = new Smarty();
// Configurations
$smarty->template_dir = ‘your_smarty_path /templates’;
$smarty->compile_dir = ‘your_smarty_path /templates_c’;
$smarty->cache_dir = ‘your_smarty_path /cache’;
$smarty->config_dir = ‘your_smarty_path /configs’;
# now assign variables (defined in template)
$smarty->assign(‘name’, ‘Smarty Enabled File’);
$smarty->display(‘index.tpl’); // template file of index.php
Now index.tpl [Smarty File]
<html>
<head>
<title> My First Smarty File
</head>
<body>
{$name}
</body>
</html>
This is the simplest example of smarty template.
Smarty config file: Smarty config file can have, configuration directives for whole site with some control statement for controlling the config directive usability also. Through this you can tell which variable in config file will be printed or not. The variable can be maintained for section wise also.
Mention config file in template-
{config_load file = ‘config.conf’} at top of the template page.
Use variables of config file like this in template:-
<title> {#pageTitle#}
See two ‘#’ sign before and after variable.
In smarty config file, variable will be declared like this:-
#global variable
pageTitle = 'testing'
You can use double quotes or avoid it in config file. In general use double quotes for string.
Smarty config file can have sections
# student section
[student]
myVars = '…';
# hidden section. Database section.
[.database]
databaseName = 'IGNOU';
databaseUser = 'smarty';
Sample config file
# this is comment
# global vars
pageTitle = 'Testing'
bodyBgColor = 'gray'
[student]
pageTitle = 'Student Info Page'
bodyBgColor = 'orchid'
Use of template variables
{config_load file='config.conf' section='student'}
or
{config_load file='config.conf'}
First will give preference to student section variables in config file. So, when variables in template file do not found in student section then it will look in global variable section.
Documentation for using smarty template
You will find full document of smarty template uses at
More Smarty Example:
{strip} {/strip} is used in template for stripping whitespace from source.
One dimension array loop in smarty
For
In PHP file:
$arrValue = array('bob','jim','joe','jerry','fred');
$smarty->assign('student', $arrValue);
In Smarty template (tpl) file:
{section name=mysec loop=$student}
{$student[mysec]}
{/section}
Looping Associative array in smarty
In PHP file:
// assign an associative array of data
$arrValue = array(
array('student' => 'bob', 'phone' => '555-3425'),
array('student' => 'jim', 'phone' => '555-4364'),
array('student' => 'joe', 'phone' => '555-3422'),
array('student' => 'jerry', 'phone' => '555-4973'),
array('student' => 'fred', 'phone' => '555-3235')
);
$smarty->assign('student ', $arrValue);
In Smarty Template (tpl) file:
Loop in associative array:
{section name=mysec2 loop=$student }
{strip}
{$users[mysec2].student} : {$users[mysec2].phone}
{/strip}
{/section}
Using PHP code in template (tpl) file:
For running php codes directly in template page, use {php} {/php}.
{php}
echo 'Hello World';
{/php}
Variable modifiers example: capitalize, escape and display date.
In tpl file This will capitalize name variable value:
{$name | capitalize}
Date: {$smarty.nowdate_format:"%d-%m-%Y"}
Include file in template file:
{include file="footer.tpl" title="Header below body"}
Smarty predefined variable
We can use PHP predefined variable in smart template (tpl) file:
Script Name: {$smarty.server.SCRIPT_NAME}
PATH: {$smarty.env.PATH}
PHP_VERSION: {$smarty.const.PHP_VERSION}
Smarty "Capture" Function:
{capture name=banner assign=testAssign}
Hello Testing
{/capture}
Now checking for banner is assigned or not!
{if $smarty.capture.banner ne ''}
{/if}
I have also used assign=testAssign, So I can use this also-
{$testAssign}
Smarty support Custom Function. How to write Custom Function…
Reference :http://waxjelly.wordpress.com/2007/03/14/how-to-write-a-custom-smarty-function-in-php
http://www.smarty.net