Académique Documents
Professionnel Documents
Culture Documents
scripting
templates
para deixar
ainda
mais
inteligentes
Igor Escobar em DesenvolvimentoLinguagens
quarta-feira, 13 de maio de 2009
0SHARES|
Facebook
A-A+
Uma compilao de dicas e tcnicas muito teis para
se programar em
Smarty Template Engine e construir dinmicos e
inteligentes templates
para programadores PHP e designers de templates.
Uma tima fonte para
quem est comeando a codificar Smarty Templates.
Tenho certeza que
economizar muito tempo de procura.
{capture name='nav'}
<ul>
{section name=item loop=$nav}
<li><a href="{$nav[item].url}"
title="{$nav[item].title}">{$nav[item].label}</
a></li>
{/section}
</ul>
{/capture}
Mostra o contedo da caption $nav:
{$smarty.capture.nav}
Voc pode tambm setar a sada da caption para uma
varivel de template:
{$navmenu}
Quando o name no especificado, o nome da
caption automaticamente setado como default:
{$smarty.capture.default}
{capture name='columns'}3{/capture}
Ento, arquivo index.tpl
{include file='header.tpl'}
{if $smarty.capture.columns == '3'}
...
{/if}
{include file='footer.tpl'}
Pode at mesmo acessar a varivel dentro do
footer.tpl
{php}
$smarty = new Smarty;
$smarty->left_delimiter = '<!--{';
$smarty->right_delimiter = '}-->';
$smarty->assign('size', '36px');
$smarty->assign('pre', 'Great');
$smarty->assign('post', 'Templates');
$smarty->display(message.tpl');
{/php}
message.tpl
<style type="text/css">
<!-h2 {font-size: <!--{$size}-->}
-->
</style>
<h2>Welcome to the World of <!--{$pre|
capitalize}--> Smarty <!--{$post|capitalize}-></h2>
<script language="javascript"
type="text/javascript" >
<!-function welcome(){
alert('Welcome to the World of <!--{$pre|
capitalize}--> Smarty <!--{$post|capitalize}->');
}
welcome();
-->
</script>
O cdigo acima mostra o texto Welcome to the World
of Great Smarty
Templates com uma fonte de tamanho 26px e alerts
com o mesmo texto.
<?php
$smarty = new Smarty;
$smarty->debugging = true;
...
?>
Se a janela do debug console no abrir quando a
pgina for carregada, sete a
propriedade $debug_tpl para o seu caminho path. Por
padro, Smarty vai olhar para o debug.tpl
no SMARTY_DIR. Este arquivo includo nas
distribuies do Smarty e pode ser achado na pasta
libs/.
O jeito mais fcil e mais rpido para habilitar o
debugging console colocando a tag {debug}
nos seus templates. Funciona da mesma forma. No
entanto, Isso s
permite visualizar todas as variveis disponveis dentro
do escopo do
template atual.
Exemplo:
<h1>{$title}</h1>
{debug}
<p>{$description}</p>
{$smarty.get.page}
Valor de sada da varivel $_POST[page] do
formulrio
{$smarty.post.page}
Sada de uma varivel de cookie, $_COOKIE[status]
{$smarty.cookie.status}
Sada de uma varivel de servidor,
$_SERVER[SERVER_NAME]
{$smarty.server.SERVER_NAME}
Sada de uma varivel do ambiente do seu sistema,
$_ENV[PATH]
{$smarty.env.PATH}
Sada de uma varivel de sesso, $_SESSION[id]
{$smarty.session.id}
Sada da varivel username de todos os arrays juntos
(get/post/cookies/server/env)
{$smarty.request.username}
{php}
// using $this->_tpl_vars
echo $this->_tpl_vars['title'];
// using $this->get_template_vars() method
// the variable $this, is a smarty object
echo $this->get_template_vars('title');
{/php}
{include file="templates/$filename.tpl"}
O cdigo acima no funciona com aspas simples:
{include file='templates/$filename.tpl'}
Array Indexes
Assumindo que $module[1] contm user_menu:
O $module[1] acima vai ser substitudo por
user_menu e ser traduzido dentro de
user_menu.tpl.
{include file="$module[1].tpl"}
Com o valor de $index igual a 1, o cdigo abaixo vai
fazer algo parecido com o cdigo de acima. Neste caso
anexo a backticks.
{include file="`$module[$index]`.tpl"}
Associative Arrays
Assumindo que $item[name] seja igual a Computer:
A varivel $item.name abaixo vai ser substituido de
Computer para Computer unit.
Use a tag {if} para gerar uma sada padro sempre que
uma varivel estiver em branco. Ou use o atalho, A
varivel modificadora default.
Considerando o cdigo a seguir, exibir dentro da
clula de uma tabela:
<table><tr><td>
{if $user eq ''}
{else}
{$user}
{/if}
</td></tr></table>
O shortcut:
<table><tr><td>{$user|
default:' '}</td></tr></table>
Esse o cdigo que maniputa a
propriedade src do img:
<img src="{$image_url|
default:'/images/default.png'}" />
O shortcut pode ser bem limpo olhando assim, somente
neste tutorial,
mas se voc tiver o hbito de usar SEMPRE nos seus
templates, ao longo
do tempo isso pode ser meio feio de ser ver.
<a href="{$image_url|
default:'/images/default.png'}">
<img src="{$image_url|
default:'/images/default.png'}" />
</a>
<p>Path: {$image_url|
default:'/images/default.png'}</p>
E, finalmente, aqui est um mtodo bem mais limpo
utilizando a tag{assign} com default.
<html>
<head>
<title>{$title|default:'Smarty World'}</title>
</head>
<body>
No footer.tpl
</body>
</html>
{$number}
{$number|string_format:'%.2f'}
{$number|string_format:'%d'}
Com o $number igual a 23.5787446, o cdigo acima vai
mostrar:
23.5787446
23.58
24
{$createDate|date_format}
Sada:
Feb 28, 2009
date format Customizado:
{$createDate|date_format:'%Y/%m/%d'}
Mostra:
2009/02/28
Comparando datas:
<?php
function makeTimeStamp($year='',
$month='', $day='')
{
if(empty($year)) {
$year = strftime('%Y');
}
if(empty($month)) {
$month = strftime('%m');
}
if(empty($day)) {
$day = strftime('%d');
}
return mktime(0, 0, 0, $month, $day,
$year);
}
?>
<table>
{section name=item loop=$items}
<tr class="{cycle values='odd,even'}">
<td>{$items[item].title}</td>
<td>{$items[item].description}</td>
</tr>
{/section}
</table>
<?php
require 'Smarty.class.php';
$smarty = new Smarty;
$smarty->display('index.tpl');
function insert_getNews($params)
{
if ($params['type'] == 'latest') {
// recebe as notcias e processa
}
// retorna o resultado
return $html;
}
?>
O template, chamado index.tpl:
<div class="news">
<h3>Latest Smarty News</h3>
{insert name='getNews' type='latest'}
</div>
o
<?php
// function para receber as notcias
function fetch_news($symbol)
{
// o news items pode ser recebido pelo
banco de dados
// mas para este exemplo, eu s criei um
array para simular o retorno.
$items = array(
array('title'=>'Smarty News',
'description'=>'Great Smarty Templates'),
array('title'=>'PHP News',
'description'=>'Smarty Templating Engine'),
);
return $items;
}
function smarty_function_news($params,
&$smarty)
{
// chamando nossa funo personalizada
$news = fetch_news($params['symbol']);
// assinando como uma variavel de
template
$smarty->assign($params['assign'],
$news);
}
Para usar o plugin Smarty News no seu index.tpl:
<script type="text/javascript"
src="popup.js"></script>
2. Adicione a tag {literal} no incio e no fim {/literal} de
cdigos CSS ou Javascript que estejam incorporados
ao seu documento, assim, o Smarty vai deixar tudo o
que estiver entre o {literal} e {/literal} em paz.
CSS Incorporado:
<style type="text/css">
<!-{literal}
p {text-indent: 10pt}
body {margin:0; padding:0;}
{/literal}
-->
</style>
Javascript Incorporado:
<script language="javascript"
type="text/javascript" >
<!-{literal}
function hello_world(){
alert('Hello Smarty World');
}
{/literal}
-->
</script>
3. Mude o Smarty $left_delimiter e $right_delimiter
de forma que os delimitadores no se confundam com
os delmitadores de
outras linguagens. Alm disso, isso possibilita que voc
insira
variveis de template dentro de arquivos CSS e
Javascript dinmicamente.
O Cdigo PHP:
<?php
require 'Smarty.class.php';
<head>
<style type="text/css">
<!-<!--{$element}--> {font-size: <!--{$size}-->}
-->
</head>
<body>
<<!--{$element}-->><!--{$title}--></<!-{$element}-->>
<script language="javascript"
type="text/javascript" >
<!-function show_popup()
{
<!--{$popup}-->('<!--{$title}-->');
}
//-->
</script>
</body>
O cdigo acima vai mostrar:
<head>
<style type="text/css">
<!-h1 {font-size: 36px}
-->
</head>
<body>
<h1>The Smarty Template Engine</h1>
<script language="javascript"
type="text/javascript" >
<!-function show_popup()
{
alert('The Smarty Template Engine');
}
//-->
</script>
</body>
4. Use {ldelim} e {rdelim} no lugar de { and } na
definio das regras dos seus arquivos css e na hora
de escrever funes javascript.
Exemplo, arquivos CSS:
<style type="text/css">
<!-p {ldelim}text-indent: 10pt;{rdelim}
body {ldelim}margin:0; padding:0;
{rdelim}
-->
</style>
Mostrar:
<style type="text/css">
<!-p {text-indent: 10pt;}
body {margin:0; padding:0;}
-->
</style>
<?php
require 'Smarty.class.php';
$smarty = new Smarty;
// Quando $caching = 1,
$smarty->display('home.tpl');
?>
Duas coisas que devem ser consideradas quando
implementamos caching:
1.
No recomendado colocar o diretrio de cache
abaixo da pasta raiz do servidor. Set $cache_dir para
um diretrio que
no seja acessvel via web.
2.
Tenha certeza de que o diretrio do cache tem
permisso de escrita no servidor.
Enfim, conclumos. 16 Tcnicas Smarty Scripting para
deixar seus
templates ainda mais inteligentes para o seus projetos
Web Smarty.
Para qualquer outra coisa, visite o site oficial do Smarty
Template Engine para o PHP.
Se voc tem alguma outra dica que no foi includa
aqui, sinta-se vontade para inclu-la nos comentrios.
Este artigo uma traduo/adaptao do artigo 16 Very
Useful Sm