<?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>Flávio Silveira &#187; Layouts</title>
	<atom:link href="http://flaviosilveira.com/tag/layouts/feed/" rel="self" type="application/rss+xml" />
	<link>http://flaviosilveira.com</link>
	<description>Programação &#38; Desenvolvimento</description>
	<lastBuildDate>Thu, 02 Sep 2010 21:29:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2</title>
		<link>http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-2/</link>
		<comments>http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-2/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 08:15:37 +0000</pubDate>
		<dc:creator>Flávio Silveira</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[facilidade]]></category>
		<category><![CDATA[framework php]]></category>
		<category><![CDATA[Layouts]]></category>
		<category><![CDATA[mozart petter]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[Template engine]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=153</guid>
		<description><![CDATA[Continuando a parte 1 deste post. Se você perdeu a primeira parte clique aqui para ler a primeira parte. 5 &#8211; Construindo sua View Sua View deve ser feita normalmente, como voce já está acostumado a fazer, com o nome que você colocaria normalmente. Apenas com o conteúdo que muda de uma página para outra. [...]

<div id="RelatedPosts">
Posts Relacionados<ul><li><a href='http://flaviosilveira.com/2008/alterando-configuracao-do-codeigniter/' rel='bookmark' title='Permanent Link: Múltiplos sites com CodeIgniter'>Múltiplos sites com CodeIgniter</a></li>
<li><a href='http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/' rel='bookmark' title='Permanent Link: CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.'>CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.</a></li>
<li><a href='http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-1/' rel='bookmark' title='Permanent Link: Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 1'>Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 1</a></li>
</ul></div>]]></description>
			<content:encoded><![CDATA[<p>Continuando a parte 1 deste post.<br />
Se você perdeu a primeira parte <a href="http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-1">clique aqui para ler a primeira parte</a>.</p>
<p><strong>5 &#8211; Construindo sua View</strong></p>
<p>Sua View deve ser feita normalmente, como voce já está acostumado a fazer, com o nome que você colocaria normalmente.<br />
Apenas com o conteúdo que muda de uma página para outra.</p>
<p>O HTML que você colocar aqui na View irá substituir a variável <em>{content_for_layout}</em> que definimos no layout acima.<br />
Vou colocar nessa nossa view de exemplo apenas um título e um parágrafo para demonstrar.<br />
Ficando assim:</p>
<pre class="brush: xml;">

&lt;h1&gt;Titulo VIEW&lt;/h1&gt;

&lt;p&gt;Paragrafo teste teste teste teste.&lt;/p&gt;
</pre>
<p>Chamei essa view de <em>home.php</em>.</p>
<p><strong>6 &#8211; Desenvolvendo a Classe</strong></p>
<p>Quando definimos nosso Hook no passo 2, setamos que a pasta onde ficaria nossa classe seria a pasta hooks que vem por padrão no projeto do CodeIgniter.</p>
<p>Vamos criar nossa classe dentro dessa pasta, e, com o nome que também especificamos na definição do Hook que foi Layout.php<br />
Se você não seguiu o exemplo, faça suas devidas adaptações.</p>
<p>A classe é um pouco extensa, leia com atenção.<br />
Para ajudar ela está com os comentários do próprio <a href="http://www.mozartpetter.com/pt/">Mozart Petter</a>.<br />
<span id="more-153"></span></p>
<pre class="brush: php;">
// Padrao do CI para não acessar a Classe direto pelo Browser
&lt;?php if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * Layout Class
 *
 * @package hooks
 * @description Implementa as views do tipo layout no framework.
 */

class Layout
{

public $base_url;

/**
* Metodo que executa as implementacoes.
* Este metodo e chamado atraves do arquivo hooks.php
* na pasta config.
*
* @return
*/
public function init()
{
// Instancia do CI.
$CI =&amp; get_instance();

// Definindo o base_url.
$this-&gt;base_url = $CI-&gt;config-&gt;slash_item('base_url');

// Pegando a saida que o CI gera normalmente.
$output = $CI-&gt;output-&gt;get_output();

// Pegando o valor de title, se definido no controller.
$title = (isset($CI-&gt;title)) ? $CI-&gt;title : '';

// Links CSS definidos no controlador.
$css = (isset($CI-&gt;css)) ? $this-&gt;createCSSLinks($CI-&gt;css) : '';

// Links JS definidos no controlador.
$js = (isset($CI-&gt;js)) ? $this-&gt;createJSLinks($CI-&gt;js) : '';

// Se layout estiver definido e a regexp nao bater.
if (isset($CI-&gt;layout) &amp;&amp; !preg_match('/(.+).php$/', $CI-&gt;layout))
{
$CI-&gt;layout .= '.php';
}
else
{
$CI-&gt;layout = 'default.php';
}

// Definindo caminho completo do layout.
$layout = LAYOUTPATH . $CI-&gt;layout;

// Se o layout for diferente do default, e o arquivo nao existir.
if ($CI-&gt;layout !== 'default.php' &amp;&amp; !file_exists($layout))
{
// Exibe a mensagem, se o layout for diferente de '.php'.
if ($CI-&gt;layout != '.php') show_error(&quot;You have specified a invalid layout: &quot; . $CI-&gt;layout);
}

// Se o arquivo layout existir.
if (file_exists($layout))
{
// Carrega o conteudo do  arquivo.
$layout = $CI-&gt;load-&gt;file($layout, true);

// Substitui o texto {content_for_layout} pelo valor de output em layout.
$view = str_replace('{content_for_layout}', $output, $layout);

// Substitui o texto {title_for_layout} pelo valor de title em view.
$view = str_replace('{title_for_layout}', $title, $view);

// Links CSS.
$view = str_replace('{css_for_layout}', $css, $view);

// Links JS.
$view = str_replace('{js_for_layout}', $js, $view);
}
else
{
$view = $output;
}

echo $view;
}

/**
* Gera os links CSS utilizados no layout.
*
* @return void
*/
private function createCSSLinks($links)
{
$html = &quot;&quot;;

for ($i = 0; $i &lt; count($links); $i++)
{
$html .= &quot;&lt;link rel='stylesheet' type='text/css' href='&quot; . $this-&gt;base_url . CSSPATH . $links[$i] . &quot;.css' media='screen' /&gt;\n&quot;;
}

return $html;

}

/**
* Gera os links JS utilizados no layout.
*
* @return void
*/
private function createJSLinks($links)
{
$html = &quot;&quot;;

for ($i = 0; $i &lt; count($links); $i++)
{
$html .= &quot;&lt;script type='text/javascript' src='&quot; . $this-&gt;base_url . JSPATH . $links[$i] . &quot;.js'&gt;&lt;/script&gt; \n&quot;;
}

return $html;
}

}
</pre>
<p><strong>7 &#8211; Fazendo as chamadas no Controller</strong></p>
<p>Chegou o momento final!<br />
É hora de juntar tudo isso que fizemos até agora.</p>
<p>A construção do seu controller é normal, como você está acostumado, mas temos que inserir algumas variáveis globais nele.</p>
<ul>
<li>Uma para o Layout default do controller, para que você não precise fazer a mesma definição várias vezes.</li>
<li>Uma para o título, onde você pode definir um default para todos as páginas que vão surgir desse controller mas, o interessante é estar um título por página.</li>
<li>Outra para guardar um Array dos CSS&#8217;s que você vai usar na página.</li>
<li>E por último, outro Array para guardar os JavaScripts que você vai usar na página.</li>
</ul>
<p>Vejamos como fica.<br />
Acompanhe pelos comentários.</p>
<pre class="brush: php;">

&lt;?php

/**
 *
 */
class Principal extends Controller
{

/**
* Layout default utilizado pelo controlador.
*/
public $layout = 'default';

/**
* Titulo default.
*/
public $title = '::: Titulo default :::';

/**
* Definindo os css default.
*/
public $css = array('default');

/**
* Carregando os js default.
*/
public $js = array('home');

/**
* Construtora.
* @return
*/
function Principal()
{

parent::Controller();

}

// Metodoo index
function index()
{
// Carregando a view.
$this-&gt;load-&gt;view('home');
}

// Metodo teste
function teste()
{
//Title
$this-&gt;title = '::: TESTE Título :::';

//CSS
$this-&gt;css = array('test');

//JS
$this-&gt;js = array('jquery');

// Carregando a View
$this-&gt;load-&gt;view('teste');
}

}

?&gt;
</pre>
<p>Vamos reparar no seguinte.<br />
Há dois métodos nesse controller que vão chamar páginas diferentes, o index e o teste.</p>
<p>Para o index não definimos nada de Layout, Titulo, CSS ou JS.<br />
Ou seja, vai vir tudo do valor default que usamos quando definimos as variáveis globais.</p>
<p>Já no método teste, por algum motivo precisamos de um CSS, um JS e um Título diferente.<br />
Então redefinimos esses valores no nosso método com o que precisamos.</p>
<p>A gente poderia ter definido um outro Layout caso tivesse a necessidade, da mesma forma com que fiz com esses valores.<br />
Aí, claro, teria que criar um outro Layout na pasta layouts.</p>
<p>Pessoal é isso!<br />
Fazia tempo que queria escrever sobre isso, espero que ajude a galera por aí.<br />
Dúvidas podem mandar sem problemas, vou responder no que estiver a meu alcance.</p>
<p>Se você teve dificuldades, <a title="Baixar projeto Exemplo" href="http://flaviosilveira.com/wp-content/uploads/2010/02/projetoExemplo.zip">baixe o projeto pronto aqui</a> e dê uma olhada mais de perto.</p>
<p>Agradeço novamente ao <a title="Mozart Petter Developer" href="http://www.mozartpetter.com/pt/">Mozart Petter</a>, grande Brother, que implementou essa solução que uso até hoje em meus projetos. E, como sempre, também ao pessoal que garante minhas 30 visitas diárias, Valeu!</p>
<p>É isso pessoal.<br />
Até a próxima!!!</p>


<div id="RelatedPosts"><p>Posts Relacionados<ul><li><a href='http://flaviosilveira.com/2008/alterando-configuracao-do-codeigniter/' rel='bookmark' title='Permanent Link: Múltiplos sites com CodeIgniter'>Múltiplos sites com CodeIgniter</a></li>
<li><a href='http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/' rel='bookmark' title='Permanent Link: CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.'>CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.</a></li>
<li><a href='http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-1/' rel='bookmark' title='Permanent Link: Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 1'>Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 1</a></li>
</ul></p></div>]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-2/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 1</title>
		<link>http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-1/</link>
		<comments>http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-1/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 08:00:45 +0000</pubDate>
		<dc:creator>Flávio Silveira</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[facilidade]]></category>
		<category><![CDATA[framework php]]></category>
		<category><![CDATA[Layouts]]></category>
		<category><![CDATA[mozart petter]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[Template engine]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=145</guid>
		<description><![CDATA[Vejo muitos desenvolvedores criticarem o CodeIgniter por ele não utilizar o conceito de Layout ou ter um Template Engine dentro dele. Template engine ou o conceito Layouts , falando em um exemplo rápido e prático seria mais ou menos o seguinte: Pense que você tem um topo e um rodapé que nunca mudam no seu [...]

<div id="RelatedPosts">
Posts Relacionados<ul><li><a href='http://flaviosilveira.com/2008/alterando-configuracao-do-codeigniter/' rel='bookmark' title='Permanent Link: Múltiplos sites com CodeIgniter'>Múltiplos sites com CodeIgniter</a></li>
<li><a href='http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/' rel='bookmark' title='Permanent Link: CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.'>CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.</a></li>
<li><a href='http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-2/' rel='bookmark' title='Permanent Link: Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2'>Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2</a></li>
</ul></div>]]></description>
			<content:encoded><![CDATA[<p>Vejo muitos desenvolvedores criticarem o CodeIgniter por ele não utilizar o conceito de Layout ou ter um Template Engine dentro dele.</p>
<p>Template engine ou o conceito Layouts , falando em um exemplo rápido e prático seria mais ou menos o seguinte:<br />
Pense que você tem um topo e um rodapé que nunca mudam no seu portal.<br />
Ou seja, muda apenas o meio das páginas. Veja a figura abaixo.</p>
<p><img class="aligncenter size-full wp-image-146" title="Exemplo Template Engine" src="http://flaviosilveira.com/wp-content/uploads/2010/02/Screen-shot-2010-02-18-at-6.54.49-PM.png" alt="Exemplo" width="228" height="259" /><br />
<br style="clear: both;" /><br />
E aí? Você vai ter que colocar esse topo e esse rodapé em todas as páginas que você chamar?<br />
Ou você é malandro e vai fazer um include dentro das telas?<br />
<span id="more-145"></span><br />
O Include seria uma solução interessante mais uma Template Engine faria isso sozinho para você.</p>
<p>Pra quem não conhece nenhuma solução para isso, o <a href="http://www.smarty.net/">Smarty</a> é uma template Engine das mais conhecidas no mundo do PHP.<br />
Você tem uma lista com outras sugestões de Templates Engine nesse link da <a href="http://www.webresourcesdepot.com/19-promising-php-template-engines/">web Resources</a><br />
Outros frameworks como o CakePHP tem uma solução dentro dele que faz esse trabalho.</p>
<p>Nesses tempos que desenvolvo em CodeIgniter já vi bizarrices do tipo colocar o Smarty dentro do CodeIgniter ou trazer bibliotecas de outras frameworks para o Core do CodeIgniter.</p>
<p>Mas podemos estender o Core do Framework e fazer ele trabalhar junto com a gente sem precisar de muitas manobras e malabarismos. Na documentação do CodeIgniter achamos essa prática com o nome de Hooks ou se preferir o português ganchos.</p>
<p>Há alguns anos um cara que considero um dos Gurus do desenvolvimento, <a href="http://www.mozartpetter.com/pt/">Mozart Petter</a>, o qual tive a honra de trabalhar junto, pesquisou uma solução nesse sentido para que não precisássemos abandonar o CodeIgniter.</p>
<p>Você encontra vários links pesquisando no google por Layouts in CodeIgniter, onde destaco o seguinte Blog <a href="http://hasin.wordpress.com/2007/03/05/adding-yield-codeigniter/">http://hasin.wordpress.com/2007/03/05/adding-yield-codeigniter/</a></p>
<p>Abaixo vou colocar uma solução em 7 passos para você implementar isso em seu projeto de CI.<br />
É importante que você procure entender em cada passo como o CodeIgniter vai visualizar isso tudo.<br />
<em>*Não se deixe confundir. É fácil. Se ficar difícil há algo errado, volte e reveja os passos.</em></p>
<p>Como os códigos são muito extensos, vou dividir em dois posts.<br />
Parte 1 &#8211; Esse (passo 1 ao 4) e Parte 2 (passo 5 ao 7) que você <a href="http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-2">acessa aqui</a>.</p>
<p>Para quem não estiver com muita paciência, estou disponibilizando também um exemplo pronto de tudo funcionando que você pode <a href="http://flaviosilveira.com/wp-content/uploads/2010/02/projetoExemplo.zip">baixar aqui</a>.<br />
Apenas confira se o .htaccess serve para o seu servidor ou máquina.</p>
<p><strong>1 &#8211; Habilitando o Codeigniter para estender o Core</strong></p>
<p>A primeira coisa a fazer é habilitar o codeIgniter para estender o Core, permitir os hooks.<br />
Isso é feito no arquivo config.php dentro da pasta config.<br />
Procure a variável $config['enable_hooks'] e troque seu valor para TRUE, ficando como abaixo.</p>
<pre class="brush: php;">
/*
|--------------------------------------------------------------------------
| Enable/Disable System Hooks
|--------------------------------------------------------------------------
|
| If you would like to use the &quot;hooks&quot; feature you must enable it by
| setting this variable to TRUE (boolean).  See the user guide for details.
|
*/
$config['enable_hooks'] = TRUE;
</pre>
<p>Pronto! Próximo passo.</p>
<p><strong>2 &#8211; Definindo um Hook</strong></p>
<p>Dentro da pasta config temos um arquivo onde deve ser feitas as definições dos hooks que você quer utilizar.<br />
Para cada hook é preciso definir um array com alguns parâmetros para que o CodeIgniter saiba o que fazer.</p>
<p><em>Importante:</em> O índice do array vai funcionar como nome do seu hook.</p>
<p>Para o nosso Hook vamos definir.</p>
<ul>
<li> O nome da Classe que você precisa.</li>
<li> O nome do método da classe que você deseja chamar.</li>
<li> O nome do arquivo onde está desenvolvida a classe.</li>
<li> O directório onde ela se encontra.</li>
</ul>
<p>Fica da seguinte forma:</p>
<pre class="brush: php;">
$hook['display_override'][] = array('class' =&gt; 'Layout',
'function' =&gt; 'init',
'filename' =&gt; 'Layout.php',
'filepath' =&gt; 'hooks');
</pre>
<p>Esses itens podem variar de acordo com o que você quiser ou precisar fazer.<br />
O manual é uma grande referência para te ajudar com isto e traz alguns detalhes que não abordo aqui.</p>
<p>Certo! Você habilitou e definiu um Hook, ou gancho. Vamos para o próximo passo.</p>
<p><strong>3 &#8211; Adicionando algumas constantes necessárias</strong></p>
<p>No arquivo index da aplicação são definidas algumas constantes que ajudam no desenvolvimento da nossa aplicação, como por exemplo,<br />
a extensão dos arquivos que serão usados, constante EXT, e o BASEPATH que traz o caminho da pasta do sistema.</p>
<p>Vamos adicionar aqui mais 3 constantes que vai nos facilitar lá na frente quando formos fazer nossa classe.</p>
<ul>
<li> LAYOUTPATH &#8211; Caminho onde ficará os layouts que construirmos.</li>
<li> JSPATH &#8211; Caminho onde ficará os arquivos com javascript.</li>
<li> CSSPATH &#8211; Caminho onde ficará os arquivos de estilo. CSS.</li>
</ul>
<p>Ficando da seguinte forma:</p>
<pre class="brush: php;">
/*
|---------------------------------------------------------------
| DEFINE APPLICATION CONSTANTS
|---------------------------------------------------------------
|
| EXT		- The file extension.  Typically &quot;.php&quot;
| SELF		- The name of THIS file (typically &quot;index.php&quot;)
| FCPATH	- The full server path to THIS file
| BASEPATH	- The full server path to the &quot;system&quot; folder
| APPPATH	- The full server path to the &quot;application&quot; folder
|
*/
define('EXT', '.php');
define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));
define('FCPATH', str_replace(SELF, '', __FILE__));
define('BASEPATH', $system_folder.'/');
define('LAYOUTPATH', $application_folder.'/layouts/');
define('JSPATH', $application_folder . '/js/');
define('CSSPATH', $application_folder . '/css/');
</pre>
<p>Reparem que usei a variável <em>$application_folder</em>, que é definida no mesmo arquivo, para completar o caminho das minhas constantes.<br />
Você pode e deve mudar isso de acordo com seu projeto.</p>
<p>Essas constantes vão facilitar também para caso você precise mudar o caminho dos arquivos CSS por exemplo. Basta alterar aqui.</p>
<p><strong>4 &#8211; Construindo seu Layout</strong></p>
<p>Vamos agora construir o seu Layout.<br />
Seria aquele topo e aquele rodapé que você não quer mexer. Ou um menu lateral.<br />
Você pode construir o que quiser.</p>
<p>O local onde vamos criar nossos layouts foi definido na constante LAYOUTPATH.</p>
<p>Você pode ter quantos layouts quiser e nomeá-los como quiser.<br />
Mas quando formos construir a classe você verá que definimos um Layout default para quando nenhum for chamado.<br />
É esse que vamos criar agora. default.php</p>
<p>No exemplo abaixo eu criei um topo que tem um menu e um rodapé simples.</p>
<pre class="brush: xml;">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.1//EN&quot;
&quot;http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;

&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot;&gt;
&lt;title&gt;{title_for_layout}&lt;/title&gt;

{css_for_layout}
        	{js_for_layout}

&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;geral&quot;&gt;

&lt;div id=&quot;topo&quot;&gt;
&lt;ul id=&quot;menu&quot;&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;div id=&quot;meio&quot;&gt;

{content_for_layout}

&lt;/div&gt;

&lt;br style=&quot;clear: both;&quot; /&gt;

&lt;div id=&quot;rodape&quot;&gt;
&lt;p class=&quot;rodape&quot;&gt;
Todos os direitos reservados - Bla Bla Bla
&lt;/p&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>É necessário prestar atenção em 4 variáveis que deixamos soltas no meio desse HTML do Layout.</p>
<ul>
<li> Primeira &#8211; {title_for_layout}</li>
<li> Segunda &#8211; {css_for_layout}</li>
<li> Terceira &#8211; {js_for_layout}</li>
<li> Quarta &#8211; {content_for_layout}</li>
</ul>
<p>Explicando rapidamente:<br />
Essas Strings vão ser substituídas de acordo com o que definirmos no Controller em um próximo passo.</p>
<p>No lugar de {title_for_layout} irá o título da página. É legal podermos definir um título pelo controlador para deixá-lo dinâmico e assim ajudar no SEO.</p>
<p>No lugar de {css_for_layout} e {js_for_layout} entrarão os arquivos de CSS e JavaScript que definirmos para nossa página.<br />
Você não precisa chamar todos os CSS ou JavaScripts se não for usá-los. Essa é uma grande sacada dessa solução.<br />
Lembro de pegar projetos em Smarty onde estavão definidos inúmeros JavaScripts e CSS em um top.php onde em várias páginas eles nem era usados.</p>
<p>Por último, no lugar de {content_for_layout} irá o conteúdo da nossa View.<br />
É o meio, o que muda.<br />
É o que vamos fazer no próximo passo que está no <a href="http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-2">próximo post</a>.</p>


<div id="RelatedPosts"><p>Posts Relacionados<ul><li><a href='http://flaviosilveira.com/2008/alterando-configuracao-do-codeigniter/' rel='bookmark' title='Permanent Link: Múltiplos sites com CodeIgniter'>Múltiplos sites com CodeIgniter</a></li>
<li><a href='http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/' rel='bookmark' title='Permanent Link: CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.'>CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.</a></li>
<li><a href='http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-2/' rel='bookmark' title='Permanent Link: Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2'>Habilitando Layouts no CodeIgniter (Template Engine) &#8211; Parte 2</a></li>
</ul></p></div>]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2010/habilitando-layouts-no-codeigniter-template-engine-1/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
