<?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; template</title>
	<atom:link href="http://crisdev.eti.br/tag/template/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>Jquery &#8211; Template</title>
		<link>http://crisdev.eti.br/jquery-template.html</link>
		<comments>http://crisdev.eti.br/jquery-template.html#comments</comments>
		<pubDate>Sun, 03 Apr 2011 15:28:32 +0000</pubDate>
		<dc:creator>cristianmedeiros</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Smarty/Templates]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://crisdev.eti.br/?p=150</guid>
		<description><![CDATA[Não é de hoje que existem ferramentas para template em JavaScript. O objetivo destas é facilitar a exibição de dados na interface, para evitar que você precise escrever o html dentro de um loop do JavaScript ou pior que isso, que você faça a resposta do lado do servidor e traga todo o html montado [...]]]></description>
			<content:encoded><![CDATA[<p>Não é de hoje que existem ferramentas para template em JavaScript. O objetivo destas é facilitar a exibição de dados na interface, para evitar que você precise escrever o html dentro de um loop do JavaScript ou pior que isso, que você faça a resposta do lado do servidor e traga todo o html montado de lá.</p>
<p>Assim surgiram diversas ferramentas para ajudar nessa tarefa, hoje já existe diversas alternativas. Eu conhecia apenas o <a title="Pure" href="http://beebole.com/pure/" target="_blank" onclick="urchinTracker('/outgoing/beebole.com/pure/?referer=');">PURE</a>, e hoje pesquisando sobre template em JavaScript para Jquery, achei isso no site do Jquery: <a href="http://api.jquery.com/jQuery.template/" onclick="urchinTracker('/outgoing/api.jquery.com/jQuery.template/?referer=');">http://api.jquery.com/jQuery.template/</a></p>
<p>Achei o plugin muito bacana, e muito simples de usar. Já faz um bom tempo que uso apenas JSON para transações ajax e este plugin faz exatamente o que eu preciso. Esta em beta ainda, mas já funciona muito bem. Vou tentar usar em algum site para valer, para verificar a estabilidade do danado.</p>
<p>Na página tem alguns exemplos de como usar, mas vou colocar aqui o teste que eu fiz:</p>
<p>&nbsp;</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?" onclick="urchinTracker('/outgoing/www.ericbess.com/ericblog/2008/03/03/wp-codebox/_examples?referer=');"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p150code3'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1503"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code" id="p150code3"><pre class="javascript" style="font-family:monospace;">&nbsp;
$.getJSON('customerDetails.php',{responseType:'
    function(response){
        $.template(
            &quot;customerList&quot;, 
            &quot;&lt;option value=&quot;${id_customer}&quot;&gt;${name_first} ${name_last}&lt;/option&gt;
        &quot; );
        $.tmpl( &quot;customerList&quot;, response ).appendTo( &quot;#id_customer&quot; );
    }
);</pre></td></tr></table></div>

<p>A resposta desta chamada JSON é um objeto neste formato:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?" onclick="urchinTracker('/outgoing/www.ericbess.com/ericblog/2008/03/03/wp-codebox/_examples?referer=');"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p150code4'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1504"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code" id="p150code4"><pre class="javascript" style="font-family:monospace;">&nbsp;
[
  {
    &quot;id_customer&quot;:&quot;1&quot;,
    &quot;name_first&quot;:&quot;Fulano&quot;,
    &quot;name_last&quot;:&quot;Siclano&quot;,
    &quot;email&quot;:&quot;fulano@gmail.com&quot;,
    &quot;ddd_fone&quot;:&quot;11&quot;,
    &quot;fone&quot;:&quot;5555-6666&quot;,
    &quot;zip&quot;:&quot;04444-444&quot;,
    &quot;address&quot;:&quot;Rua Que vai e volta&quot;,
    &quot;number&quot;:&quot;123&quot;,
    &quot;neighborhood&quot;:&quot;Jardim dos Bairros&quot;,
    &quot;city&quot;:&quot;Sao Paulo&quot;,
    &quot;estate&quot;:&quot;Sao Paulo&quot;,
    &quot;cpf&quot;:&quot;000.000.000-99&quot;,
    &quot;status&quot;:&quot;1&quot;,
    &quot;data_record&quot;:&quot;AAAA-MM-DD&quot;,
    &quot;password&quot;:&quot;123&quot;,
    &quot;born_date&quot;:&quot;AAAA-MM-DD&quot;
  }
]</pre></td></tr></table></div>

<p>Como vêem é uma resposta JSON, com muito mais informação do que eu estou utilizando no template, porém ele faz o assign por chaves, e o processo fica bem simples.</p>
<p>Espero que isso entre logo na distribuição oficial do Jquery <img src='http://crisdev.eti.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://crisdev.eti.br/jquery-template.html/feed</wfw:commentRss>
		<slash:comments>0</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>

