5. What?
Arguably the most widely used PHP templating
system
Created by Andrei Zmievski
Tightly integrated into the CMSMS core
6. What?
Arguably the most widely used PHP templating
system
Created by Andrei Zmievski
Tightly integrated into the CMSMS core
Seamlessly used on all page, module and other
templates throughout the system
7. What?
Arguably the most widely used PHP templating
system
Created by Andrei Zmievski
Tightly integrated into the CMSMS core
Seamlessly used on all page, module and other
templates throughout the system
Released under the LGPL -- basically means itâs
pretty liberally licensed
10. Why?
Separates the display logic cleanly from the
controller logic
Much safer by not allowing full range of PHP
functionality in a template
11. Why?
Separates the display logic cleanly from the
controller logic
Much safer by not allowing full range of PHP
functionality in a template
Allows for many tricks to make complicated
display easier
12. Why?
Separates the display logic cleanly from the
controller logic
Much safer by not allowing full range of PHP
functionality in a template
Allows for many tricks to make complicated
display easier
Get a lot of web-friendly functionality for free
13. Why?
Separates the display logic cleanly from the
controller logic
Much safer by not allowing full range of PHP
functionality in a template
Allows for many tricks to make complicated
display easier
Get a lot of web-friendly functionality for free
And mainly...
23. Literal Tags
Escapes javascript
Escapes CSS
Really... escapes anything with { or } in it.
Smarty gets confused
So literal tags basically have Smarty ignore
everything between
24. Literal Tags
<script type="text/javascript">
/ Get all of the tabs and add an onmouseover
/
/ event listener to each tab
/
var tabs = getElementsByClass('tab',
document.getElementById('featuresarea-tabs'),'li') ;
for(i=0; i<tabs.length; i++)
{
! var this_tab = ! document.getElementById(tabs[i].id);
! this_tab.onmouseover = function(){
! ! showtab(this.id);
! ! document.getElementById(this.id).className += " selected";
! };
}!
//]]>
</script>
25. Literal Tags
{literal}
<script type="text/javascript">
/ Get all of the tabs and add an onmouseover
/
/ event listener to each tab
/
var tabs = getElementsByClass('tab',
document.getElementById('featuresarea-tabs'),'li') ;
for(i=0; i<tabs.length; i++)
{
! var this_tab = ! document.getElementById(tabs[i].id);
! this_tab.onmouseover = function(){
! ! showtab(this.id);
! ! document.getElementById(this.id).className += " selected";
! };
}!
//]]>
</script>
{/literal}
26. The Immortal Question
How do I know what variables are available
to me in my template?
28. {get_template_vars}
On a regular page, outputs something like:
SCRIPT_NAME = /1.6.x/index.php
app_name = CMS
sitename = CMS Made Simple Site
lang =
encoding = utf-8
gCms = Object
cgsimple = Object
content_obj = Object
content_id = 69
page = get_template_vars
page_id = get_template_vars
page_name = get_template_vars
etc.
29. {get_template_vars}
On a regular page, outputs something like:
SCRIPT_NAME = /1.6.x/index.php
app_name = CMS
sitename = CMS Made Simple Site
lang =
encoding = utf-8
gCms = Object
cgsimple = Object
content_obj = Object
content_id = 69
page = get_template_vars
page_id = get_template_vars
page_name = get_template_vars
etc. Which means you can use:
{$page_name}
in this template and get the
pageâs name.
33. ModiïŹers
Take output and modiïŹes it directly in
Smarty.
Allows multiple modiïŹers to be chained.
Format: {$variable|modiïŹer_function:extra:parameters}
34. ModiïŹers
Take output and modiïŹes it directly in
Smarty.
Allows multiple modiïŹers to be chained.
Format: {$variable|modiïŹer_function:extra:parameters}
Chaining: {$variable|modiïŹer_function|another_one:with:params}
35. ModiïŹers
Take output and modiïŹes it directly in
Smarty.
Allows multiple modiïŹers to be chained.
Format: {$variable|modiïŹer_function:extra:parameters}
Chaining: {$variable|modiïŹer_function|another_one:with:params}
Smarty comes with a lot of nice modiïŹers.
See chapters 5 and 6 for some examples.
38. Examples
{$title|upper} -- Convert the string to upper
case
{$title|truncate:40:â...â} -- Truncate the string at
40 characters and put an ellipsis on it
39. Examples
{$title|upper} -- Convert the string to upper
case
{$title|truncate:40:â...â} -- Truncate the string at
40 characters and put an ellipsis on it
{$smarty.now|date_format:â%Y/%m/%dâ} -- Get
the current date and give it a nice formatting
40. Examples
{$title|upper} -- Convert the string to upper
case
{$title|truncate:40:â...â} -- Truncate the string at
40 characters and put an ellipsis on it
{$smarty.now|date_format:â%Y/%m/%dâ} -- Get
the current date and give it a nice formatting
{$variable|var_dump} -- Any PHP function will
work
42. {capture}
Allows you capture output of smarty tags
and variables and used it elsewhere
Useful for testing if something has output
data
Allows you to get around issues where path
of execution isnât correct
43. {capture} Example
Div should only show if there is content
{capture name=outp}{content block=âsideblockâ|trim}{/capture}
{if $smarty.capture.outp}
<div id=âsideblockâ>
{$smarty.capture.outp}
</div>
{/if}
44. {cycle}
Used to alternate a set of values
Useful for alternating classes - ex.
Alternating table rows
Multiple columns
45. {cycle} Example
Split display of items into 2 columns
{foreach from=$values item=âthe_itemâ}
<div class=â{cycle values=âcol1,col2â}â>
{$the_item}
</div>
{/foreach}
46. {escape}
Encodes a variable in various formats -- ex.
Encode an email address so that itâs not
easily scraped by a spam bot
Encode output to make sure itâs valid xhtml
47. {escape} example
Make a legible email address more difïŹcult
to read via the source.
{$user.email|escape:âhexentityâ}
(Converts email@domain.com to %62%64, etc.)