<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CrisDev - Cristian Medeiros &#187; smarty</title>
	<atom:link href="http://crisdev.eti.br/tag/smarty/feed" rel="self" type="application/rss+xml" />
	<link>http://crisdev.eti.br</link>
	<description>Desenvolvedor Web</description>
	<lastBuildDate>Sun, 03 Apr 2011 15:38:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Smarty e Xajax &#8211; implementando</title>
		<link>http://crisdev.eti.br/smarty-e-xajax-implementando.html</link>
		<comments>http://crisdev.eti.br/smarty-e-xajax-implementando.html#comments</comments>
		<pubDate>Thu, 15 May 2008 10:35:15 +0000</pubDate>
		<dc:creator>cristianmedeiros</dc:creator>
				<category><![CDATA[AJAX/XAJAX]]></category>
		<category><![CDATA[Smarty/Templates]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[XAJAX]]></category>

		<guid isPermaLink="false">http://crisdev.eti.br/?p=9&#038;language=pt</guid>
		<description><![CDATA[O Xajax se encaixa perfeitamente com a utiliza&#231;&#227;o do Smarty, pois escrevemos fun&#231;&#245;es php para que ele realize as requisi&#231;&#245;es Ajax e isso pode ser feito no php no qual designamos as vari&#225;veis para o template. Exemplo1.php: &#60;?PHP include &#8216;_lib/xajax/xajax_core/xajax.inc.php&#8217;; include &#8216;_lib/smarty.php&#8217;; $xajax = new xajax(); function Soma($a, $b) { &#160;&#160;&#160; $response = new xajaxResponse(); [...]]]></description>
			<content:encoded><![CDATA[<p>O Xajax se encaixa perfeitamente com a utiliza&ccedil;&atilde;o do Smarty, pois escrevemos fun&ccedil;&otilde;es php para que ele realize as requisi&ccedil;&otilde;es Ajax e isso pode ser feito no php no qual designamos as vari&aacute;veis para o template.</p>
<p>Exemplo1.php:</p>
<p>&lt;?PHP</p>
<p>include &#8216;_lib/xajax/xajax_core/xajax.inc.php&#8217;;</p>
<p></p>
<p>include &#8216;_lib/smarty.php&#8217;;</p>
<p></p>
<p>$xajax = new xajax();</p>
<p>function Soma($a, $b)</p>
<p></p>
<p>{</p>
<p></p>
<p>&nbsp;&nbsp;&nbsp; $response = new xajaxResponse();</p>
<p></p>
<p>&nbsp;&nbsp;&nbsp; $response-&gt;assign(&#8216;resultado&#8217;, &#8216;innerHTML&#8217;, $a + $b);</p>
<p></p>
<p>&nbsp;&nbsp;&nbsp; return $response;</p>
<p></p>
<p>}</p>
<p></p>
<p>$xajax-&gt;registerFunction(&#8216;Soma&#8217;);</p>
<p>$xajax-&gt;processRequest();</p>
<p></p>
<p>$smarty = new Smarty();</p>
<p>$smarty-&gt;assign(&#8216;xajax_javascript&#8217;, $xajax-&gt;getJavascript(&#8216;_lib/xajax&#8217;)); //o m&eacute;todo getJavascript permite especificar o path onde deve ser procurado as bibliotecas js</p>
<p>$smarty-&gt;display(&#8216;form.tpl&#8217;);</p>
<p>?&gt;</p>
<p>form.tpl:&nbsp;</p>
<p>&lt;html&gt;<br />
&lt;head&gt;<br />
&nbsp;&nbsp;&nbsp; {$xajax_javascript}<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;form action=&quot;#&quot; method=&quot;post&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;input type=&quot;text&quot; name=&quot;val1&quot; id=&quot;val1&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;input type=&quot;text&quot; name=&quot;val2&quot; id=&quot;val2&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;input type=&quot;button&quot; onclick=&quot;xajax_Soma(document.getElementById(&#8216;val1&#8242;).value,document.getElementById(&#8216;val2&#8242;).value)&quot; id=&quot;btnAdd&quot; value=&quot;Click Me&quot; /&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;p id=&quot;resultado&quot;&gt;&lt;/p&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>Pronto, simplesmente isso, n&atilde;o &eacute; necess&aacute;rio nada mais para que os dois trabalhem juntos. Qualquer d&uacute;vida mande e-mail ou comente.</p>
]]></content:encoded>
			<wfw:commentRss>http://crisdev.eti.br/smarty-e-xajax-implementando.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Smarty</title>
		<link>http://crisdev.eti.br/smarty.html</link>
		<comments>http://crisdev.eti.br/smarty.html#comments</comments>
		<pubDate>Tue, 29 Apr 2008 21:47:59 +0000</pubDate>
		<dc:creator>cristianmedeiros</dc:creator>
				<category><![CDATA[Smarty/Templates]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://crisdev.eti.br/?p=4</guid>
		<description><![CDATA[A utilização das ferramentas de template estão um tanto quanto sendo crucificadas, um tanto por serem uma &#8220;linguagem&#8221; paralela ao PHP para se absorver, outro tanto por ser PHP gerando PHP ou HTML, independente da sua teoria, utilizar o HTML fora do código PHP é fundamental. Eu por escolha, gosto do Smarty e o utilizo [...]]]></description>
			<content:encoded><![CDATA[<p>A utilização das ferramentas de template estão um tanto quanto sendo crucificadas, um tanto por serem uma &#8220;linguagem&#8221; paralela ao PHP para se absorver, outro tanto por ser PHP gerando PHP ou HTML, independente da sua teoria, utilizar o HTML fora do código PHP é fundamental. Eu por escolha, gosto do Smarty e o utilizo já a um bom tempo. Gosto também de trabalhar com PHP puro substituindo as tags, mas acho mais trabalhoso, pois preciso escrever os loops e outros condicionais, coisas que o Smarty já faz por mim.</p>
<p>Vou falar um pouco dos casos que mais utilizo Smarty e dar alguns exemplos. Não vou comentar sobre a instalação, pois a mesma é bem simples e bem descrita no site do Smarty.</p>
<p>Algo que já ouvi muito &#8220;com Smarty não dá para escrever html padrão&#8221;, dá sim, html e smarty são coisas distintas e, apesar do Smarty manipular o html, ele não muda a estrutura já criada, ou seja, se o w3c não valida o html gerado pelo Smarty, é porque o html foi mal escrito.</p>
<p>Para se criar um template, basta pegar um arquivo html e renomeá-lo para .tpl e coloca-lo na pasta template, simples assim? sim, simples assim, a partir desse instante, você tem um template pronto para ser utiizado no seu código.</p>
<h2>Exemplo1.tpl:</h2>
<pre>&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;Teste Smarty&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;h1&gt;TESTE&lt;/h1&gt;

	&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Salve o código acima na pasta template.</p>
<h2>Exemplo1.php:</h2>
<pre>&lt;?PHP

	include("libs/smarty.class.php");

	$smarty = new Smarty();

	/*
	 * esta parte da configuração pode ficar em outra parte do sistem, em um include por exemplo
	 */
	$smarty-&gt;template_dir = 'templates';
	$smarty-&gt;compile_dir = 'templates_c';
	$smarty-&gt;cache_dir = 'cache';
	$smarty-&gt;config_dir = 'configs';

	$smarty-&gt;display('exemplo1.tpl');

?&gt;</pre>
<p>E para adicionar algum conteúdo a este template faremos:</p>
<h2>Exemplo2.tpl:</h2>
<pre>&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;Teste Smarty&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;h1&gt;{$conteudo}&lt;/h1&gt;

	&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Salve o código acima na pasta template.</p>
<h2>Exemplo2.php:</h2>
<pre>&lt;?PHP

	include("libs/smarty.class.php");

	$smarty = new Smarty();

	/*
	 * esta parte da configuração pode ficar em outra parte do sistem, em um include por exemplo
	 */
	$smarty-&gt;template_dir = 'templates';
	$smarty-&gt;compile_dir = 'templates_c';
	$smarty-&gt;cache_dir = 'cache';
	$smarty-&gt;config_dir = 'configs';

	$smarty-&gt;assign('conteudo',"VALOR QUE VAI APARECER NA CHAVE");

	$smarty-&gt;display('exemplo2.tpl');

?&gt;</pre>
<p>Eu costumo &#8220;modularizar&#8221; meus templates, geralmente em menu e conteudo, pode-se quebrar em mais pedaços, pode-se utilizar um único template para tudo, eu faço assim para facilitar minha vida. O designer sempre esquece algum item do menu ou o analista esquece alguma funcionalidade&#8230; e assim vai, separando as peças eu acho mais organizado.</p>
<p>Então com duas partes do layout eu faço assim:</p>
<h2>Exemplo3.tpl:</h2>
<pre>&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;Teste Smarty&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;ul&gt;

			&lt;li&gt;Home&lt;/li&gt;
			&lt;li&gt;Cadastro&lt;/li&gt;
			&lt;li&gt;Consulta&lt;/li&gt;
		&lt;/ul&gt;

		&lt;div&gt;{$conteudo}&lt;/div&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre>
<h2>Exemplo3a.tpl:</h2>
<pre>&lt;form&gt;
	&lt;input type="hidden" name="email_contato" value="{$email_contato}" /&gt;
	&lt;input type="text" name="nome" id="nome" /&gt;

	&lt;input type="text" name="email" id="email" /&gt;
	&lt;input type="text" name="mensagem" id="mensagem" /&gt;

	&lt;input type="submit" value="Enviar" /&gt;
&lt;/form&gt;
{$email_contato}</pre>
<h2>Exemplo3.php:</h2>
<pre>&lt;?PHP

	include("libs/smarty.class.php");

	$smarty = new Smarty();

	/*
	 * esta parte da configuração pode ficar em outra parte do sistem, em um include por exemplo
	 */
	$smarty-&gt;template_dir = 'templates';
	$smarty-&gt;compile_dir = 'templates_c';
	$smarty-&gt;cache_dir = 'cache';
	$smarty-&gt;config_dir = 'configs';

	$smarty-&gt;assign('conteudo',"VALOR QUE VAI APARECER NA CHAVE");

	$smarty-&gt;assign('email_contato','emailcontato@contato.com.br');

	$conteudo = $smarty-&gt;fetch('exemplo3a.tpl'); //arquivo que vai montar o "miolo"

	$smarty-&gt;assign('conteudo',$conteudo);//processo normal para atribuir um conteudo a uma variável

	$smarty-&gt;display('exemplo3.tpl');

?&gt;</pre>
<p>Dessa forma podemos separar os conteúdos de cada página em um template sem que isso afete nosso menu. Existem diversas formas de se separar o site com smarty, essa é uma delas <img src='http://crisdev.eti.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Podemos em nosso template utilizar condicionais para controlar os dados. O comportamento é o mesmo que em qualquer outra linguagem.</p>
<h2>Exemplo4.tpl:</h2>
<pre>&lt;form&gt;
	&lt;input type="hidden" name="email_contato" value="{$email_contato}" /&gt;
	&lt;input type="text" name="nome" id="nome" /&gt;

	&lt;input type="text" name="email" id="email" /&gt;
	&lt;input type="text" name="mensagem" id="mensagem" /&gt;

	&lt;input type="submit" value="Enviar" /&gt;
&lt;/form&gt;
{if $email_contato != NULL}
	{$email_contato}
{/if}</pre>
<p>Quando utilizamos template sempre vem aquela pergunta: &#8220;mas e se eu tiver uma tabela? com varias linhas? eu gero o html no php e substituo a chave?&#8221; bom esta seria uma opção, mas fugiria bastante da idéia de manter o html longe do seu php. Com Smarty podemos realizar um loop em um array de duas formas com foreach e com section:</p>
<ul>
<li>foreach: usado em arrays associativos ex: $array['nome']</li>
<li>section: usado em arrays indexados ex: $array[1]</li>
</ul>
<h2>Exemplo5.php:</h2>
<pre>&lt;?PHP

	include("libs/smarty.class.php");

	$smarty = new Smarty();

	/*
	 * esta parte da configuração pode ficar em outra parte do sistem, em um include por exemplo
	 */
	$smarty-&gt;template_dir = 'templates';
	$smarty-&gt;compile_dir = 'templates_c';
	$smarty-&gt;cache_dir = 'cache';
	$smarty-&gt;config_dir = 'configs';

	$dados = array();
	$dados['nome'] = "Zé da Silva";
	$dados['email'] = "ze@dasilva.com.br";

	$infos = array();
	$infos['alerta'] = "Preencha todos os campos.";
	$infos['notificacao'] = "Sua mensagem será respondida em breve.";
	$infos['agradecimento'] = "Obrigado pelo contao.";

	$smarty = new Smarty();

	$smarty-&gt;assign('dados',$dados);
	$smarty-&gt;assign('infos',$infos);

	$smarty-&gt;display('Exemplo5.tpl');

?&gt;</pre>
<h2>Exemplo5.tpl:</h2>
<pre>{foreach from=$infos item=informacao}
	{$informacao}&lt;br&gt;
{/foreach}

&lt;form&gt;
	&lt;input type="text" name="nome" id="nome" value="{$dados.nome}" /&gt; &lt;!-- no smarty o vetor do array é acessado por um . e não por []
	&lt;input type="text" name="email" id="email" value="{$dados.email}" /&gt;

	&lt;input type="text" name="mensagem" id="mensagem" /&gt;
	&lt;input type="submit" value="Enviar" /&gt;

&lt;/form&gt;</pre>
<p>e com Section ficaria assim:</p>
<h2>Exemplo6.php:</h2>
<pre>&lt;?PHP
	include("libs/smarty.class.php");

	$smarty = new Smarty();

	/*
	 * esmartya parte da configuração pode ficar em outra parte do sismartyem, em um include por exemplo
	 */
	$smarty-&gt;template_dir = 'templates';
	$smarty-&gt;compile_dir = 'templates_c';
	$smarty-&gt;cache_dir = 'cache';
	$smarty-&gt;config_dir = 'configs';

	$dados = array();
	$dados['nome'] = "Zé da Silva";
	$dados['email'] = "ze@dasilva.com.br";

	$infos = array();
	$infos[0] = "Preencha todos os campos.";
	$infos[1] = "Sua mensagem será respondida em breve.";
	$infos[2] = "Obrigado pelo contao.";

	$smarty = new Smarty();

	$smarty-&gt;assign('dados',$dados);
	$smarty-&gt;assign('infos',$infos);

	$smarty-&gt;display('Exemplo6.tpl');
?&gt;</pre>
<h2>Exemplo6.tpl:</h2>
<pre>{section name=informacoes loop=$infos}
	{$infos[informacoes]}&lt;br&gt;
{/section}

&lt;form&gt;
	&lt;input type="text" name="nome" id="nome" value="{$dados.nome}" /&gt; &lt;!-- no smarty o vetor do array é acessado por um . e não por []
	&lt;input type="text" name="email" id="email" value="{$dados.email}" /&gt;

	&lt;input type="text" name="mensagem" id="mensagem" /&gt;
	&lt;input type="submit" value="Enviar" /&gt;

&lt;/form&gt;</pre>
<p>Não costumo utilizar o section, acho ele muito limitado.</p>
<p>Bom, isso é mais um resumo do que um tutorial, você pode encontrar mais informações no manual do smarty que é bem completo e bem simples de entender. Queria falar sobre isso para poder abordar um outro tópico: Smarty com Xajax que é bem interessante.</p>
<p>Como sempre se tiverem dúvidas comentem, ou me mandem e=mail.</p>
<p>Referencia:</p>
<ul>
<li><a title="Smarty Website" href="http://www.smarty.net" target="_blank" onclick="urchinTracker('/outgoing/www.smarty.net?referer=');">Smarty website</a></li>
</ul>
<p>Arquivos:</p>
<ul>
<li><a href="arqs/exemplossmarty.zip">Exemplos</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://crisdev.eti.br/smarty.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

