<?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; Php</title>
	<atom:link href="http://flaviosilveira.com/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://flaviosilveira.com</link>
	<description>Programação &#38; Desenvolvimento</description>
	<lastBuildDate>Sun, 23 May 2010 01:33:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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.
O HTML que você colocar [...]

<div id="RelatedPosts">
Posts Relacionados<ul><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>
<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/2008/alterando-configuracao-do-codeigniter/' rel='bookmark' title='Permanent Link: Múltiplos sites com CodeIgniter'>Múltiplos sites com CodeIgniter</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/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>
<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/2008/alterando-configuracao-do-codeigniter/' rel='bookmark' title='Permanent Link: Múltiplos sites com CodeIgniter'>Múltiplos sites com CodeIgniter</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 portal.
Ou seja, [...]

<div id="RelatedPosts">
Posts Relacionados<ul><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>
<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/2008/alterando-configuracao-do-codeigniter/' rel='bookmark' title='Permanent Link: Múltiplos sites com CodeIgniter'>Múltiplos sites com CodeIgniter</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/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>
<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/2008/alterando-configuracao-do-codeigniter/' rel='bookmark' title='Permanent Link: Múltiplos sites com CodeIgniter'>Múltiplos sites com CodeIgniter</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>5</slash:comments>
		</item>
		<item>
		<title>Comparando Arrays e Trazendo os valores diferentes</title>
		<link>http://flaviosilveira.com/2009/comparando-arrays-e-trazendo-os-valores-diferentes/</link>
		<comments>http://flaviosilveira.com/2009/comparando-arrays-e-trazendo-os-valores-diferentes/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 16:03:23 +0000</pubDate>
		<dc:creator>Flávio Silveira</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Programação em geral]]></category>
		<category><![CDATA[arrays]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=120</guid>
		<description><![CDATA[Salve pessoal.
Ontem precisei comparar os resultados de dois arrays e deles trazer os valores que estavam em apenas um dos arrays.
A princípio procurei uma função que fizesse isso pra mim, achei que o array_diff fizesse isso para a gente. Mas me enganei! Não achei uma função com esse resultado.
A função array_diff na verdade traz apenas [...]

<div id="RelatedPosts">
Posts Relacionados<ul><li><a href='http://flaviosilveira.com/2009/codeigniter-internet-explorer-e-o-tempo-de-expiracao-da-sessao/' rel='bookmark' title='Permanent Link: CodeIgniter, Internet Explorer e o tempo de expiração da sessão'>CodeIgniter, Internet Explorer e o tempo de expiração da sessão</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>Salve pessoal.</p>
<p>Ontem precisei comparar os resultados de dois arrays e deles trazer os valores que estavam em apenas um dos arrays.</p>
<p>A princípio procurei uma função que fizesse isso pra mim, achei que o <em>array_diff</em> fizesse isso para a gente. Mas me enganei! Não achei uma função com esse resultado.</p>
<p>A função <em>array_diff</em> na verdade traz apenas os valores que constam no primeiro array, mas não constam no segundo.<br />
Exemplo:</p>
<pre class="brush: php;">
&lt;?php

$array1 = array(&quot;bola&quot;, &quot;quadrado&quot;, &quot;triangulo&quot;);
$array2 = array(&quot;esfera&quot;, &quot;quadrado&quot;, &quot;triangulo&quot;);

$result = array_diff($array1, $array2);
print_r($result);

?&gt;
</pre>
<p>O resultado do código acima nos retorna um array com o valor &#8220;bola&#8221;.<br />
Pois é o único valor que consta no primeiro array e não no segundo.<br />
<span id="more-120"></span></p>
<p>O que eu precisava é que ele me retornasse também os valores que tinham no segundo array e que não constavam no primeiro.</p>
<p>Resolvi da seguinte forma:</p>
<pre class="brush: php;">
&lt;?php

$array1 = array(&quot;bola&quot;, &quot;quadrado&quot;, &quot;triangulo&quot;);
$array2 = array(&quot;esfera&quot;, &quot;quadrado&quot;, &quot;triangulo&quot;);

$result1 = array_diff($array1, $array2);
$result2 = array_diff($array2, $array1);

$full = array_merge($result1, $result2);

print_r($full);

?&gt;
</pre>
<p>Primeiro fazemos retornar os valores que estão no primeiro array e não no segundo ($result1).<br />
Em seguida os que estão no segundo array e não no primeiro ($result2).<br />
Após isso unimos os dois arrays através da função <em>array_merge</em>.</p>
<p>E o resultado retornado é [0] => bola  [1] => esfera, como esperado.<br />
Bola que está apenas no primeiro array, e esfera que está apenas no segundo.<br />
Os demais valores aparecem em ambos os arrays, logo, ficam de fora.</p>
<p>Adicionem outros elementos aos arrays para testar e confiram os resultados.</p>
<p>Grande Abraço.</p>


<div id="RelatedPosts"><p>Posts Relacionados<ul><li><a href='http://flaviosilveira.com/2009/codeigniter-internet-explorer-e-o-tempo-de-expiracao-da-sessao/' rel='bookmark' title='Permanent Link: CodeIgniter, Internet Explorer e o tempo de expiração da sessão'>CodeIgniter, Internet Explorer e o tempo de expiração da sessão</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/2009/comparando-arrays-e-trazendo-os-valores-diferentes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CodeIgniter: Use a Global $_SERVER no config para ganhar dinamismo com subdomínios.</title>
		<link>http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/</link>
		<comments>http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 03:03:23 +0000</pubDate>
		<dc:creator>Flávio Silveira</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Programação em geral]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=113</guid>
		<description><![CDATA[Cenário: 
Você compra o domínio principal, www.site.com.br. E você vai ter duas versões desse site, uma para cada cliente, que vai usar todas as regras de negócio iguais. A única diferença será o layout. Os clientes pediram os subdomínios branco.site.com.br e preto.site.com.br.
Você pode fazer duas cópias do site em pastas diferentes, mas levando em consideração [...]

<div id="RelatedPosts">
Posts Relacionados<ul><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>
<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>
<li><a href='http://flaviosilveira.com/2009/codeigniter-internet-explorer-e-o-tempo-de-expiracao-da-sessao/' rel='bookmark' title='Permanent Link: CodeIgniter, Internet Explorer e o tempo de expiração da sessão'>CodeIgniter, Internet Explorer e o tempo de expiração da sessão</a></li>
</ul></div>]]></description>
			<content:encoded><![CDATA[<p>Cenário: </p>
<p>Você compra o domínio principal, <em>www.site.com.br</em>. E você vai ter duas versões desse site, uma para cada cliente, que vai usar todas as regras de negócio iguais. A única diferença será o layout. Os clientes pediram os subdomínios <em>branco.site.com.br</em> e <em>preto.site.com.br</em>.</p>
<p>Você pode fazer duas cópias do site em pastas diferentes, mas levando em consideração que eles tem o mesmo CORE, isso não é muito inteligente. Pense se você tiver que fazer uma atualização, você vai ter de mexer em ambos os projetos.</p>
<p>Porque não fazer os subdomínios como links simbólicos para uma mesma pasta? De lá você pode fazer uma verificação. Se for um site, pega o layout branco, se for o outro pega o layout preto.</p>
<p>Problema:</p>
<p>No Codeigniter você define a URL principal do seu projeto nos arquivos de configuração, na variável <em>$config['base_url']</em>. Você não vai ter como colocar os subdomínios lá. O que fazer?</p>
<p>Solução:<br />
Usar a Global <em>$_SERVER</em>.</p>
<p>Essa Global traz informações como o host que você está acessando, o email do administrador da máquina, o software usado, a configuração do TimeOut entre outras.</p>
<p>Para que você mesmo visualize tudo isso faça o seguinte. Abra o seu config.php do CodeIgniter e logo acima de onde está setado a variável <em>$config['base_url']</em> de um print_r, como abaixo:</p>
<pre class="brush: php;">

|--------------------------------------------------------------------------
| Base Site URL
|--------------------------------------------------------------------------
|
| URL to your CodeIgniter root. Typically this will be your base URL,
| WITH a trailing slash:
|
|       http://example.com/
|
*
print_r($_SERVER);
die;
$config['base_url']     = &quot;http://www.site.com.br/&quot;;
</pre>
<p><span id="more-113"></span><br />
Veja em seu browser todas as opções que você tem nessa global.</p>
<p>Dê uma atenção na primeira opção que vêm no array, o <em>HTTP_HOST</em>. Ele traz o endereço primário que você está acessando. É o que você precisa para setar seu config de acordo com a url que seu visitante acessar.</p>
<p>Dando um print apenas nesse cara,</p>
<pre class="brush: php;">

|--------------------------------------------------------------------------
| Base Site URL
|--------------------------------------------------------------------------
|
| URL to your CodeIgniter root. Typically this will be your base URL,
| WITH a trailing slash:
|
|       http://example.com/
|
*
print_r($_SERVER['HTTP_HOST']);
die;
$config['base_url']     = &quot;http://www.site.com.br/&quot;;
</pre>
<p>ele retorna o seu subdomínio.</p>
<p>Agora é só fazer uma adaptação.</p>
<pre class="brush: php;">

|--------------------------------------------------------------------------
| Base Site URL
|--------------------------------------------------------------------------
|
| URL to your CodeIgniter root. Typically this will be your base URL,
| WITH a trailing slash:
|
|       http://example.com/
|
*

$config['base_url']     = &quot;http://&quot; . $_SERVER['HTTP_HOST'];
</pre>
<p>Seja lá qual subdomínio você acessar, ele vai setar como <em>base_url</em> para você.</p>
<p>Caso você não use subdomínios, esse artifício pode ser usado para você deixar o base_url automatizado para seus projetos. </p>
<p>Espero que tenham curtido a idéia.<br />
Qualquer dúvida só mandar.<br />
Abraços!!</p>


<div id="RelatedPosts"><p>Posts Relacionados<ul><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>
<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>
<li><a href='http://flaviosilveira.com/2009/codeigniter-internet-explorer-e-o-tempo-de-expiracao-da-sessao/' rel='bookmark' title='Permanent Link: CodeIgniter, Internet Explorer e o tempo de expiração da sessão'>CodeIgniter, Internet Explorer e o tempo de expiração da sessão</a></li>
</ul></p></div>]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2009/codeigniter-use-a-global-_server-no-config-para-ganhar-dinamismo-com-subdominios/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CodeIgniter &#8216;metido&#8217; a Ruby on Rails. (ciforms.sh)</title>
		<link>http://flaviosilveira.com/2009/codeigniter-metido-a-ruby/</link>
		<comments>http://flaviosilveira.com/2009/codeigniter-metido-a-ruby/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 03:14:35 +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[Shell Script]]></category>
		<category><![CDATA[Forms]]></category>
		<category><![CDATA[geração de cadastros]]></category>
		<category><![CDATA[Geração de formulários]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=81</guid>
		<description><![CDATA[Salve Galera&#8230;
Vocês sabem, muitos projetos em sistemas são similares, sempre aquela mesma coisa&#8230;Listar, Inserir, Editar e Remover.
Isso me levou a querer criar algo para facilitar tudo isso.
Vendo meu Amigo Fábio Tomio mandando ver no Ruby On Rails, ele me mostrou que criava um cadastro (Listar, Inserir, Editar e Remover) muito facilmente, com apenas um comando [...]

<div id="RelatedPosts">
Posts Relacionados<ul><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>
<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>Salve Galera&#8230;</p>
<p>Vocês sabem, muitos projetos em sistemas são similares, sempre aquela mesma coisa&#8230;Listar, Inserir, Editar e Remover.<br />
Isso me levou a querer criar algo para facilitar tudo isso.</p>
<p>Vendo meu Amigo <a title="Fábio's Blogs" href="http://www.fabiotomio.com">Fábio Tomio</a> mandando ver no <a href="http://www.rubyonrails.pro.br/">Ruby On Rails</a>, ele me mostrou que criava um cadastro (Listar, Inserir, Editar e Remover) muito facilmente, com apenas um comando no terminal, usando a funcão Scaffold se não me engano.</p>
<p>Inspirado nisso, resolvi fazer um Shell Script que geraria todas as views, controller e model prontas com essas opções.</p>
<p><strong>Introdução</strong></p>
<ul>
<li>Chamei de CiForms.</li>
<li>Essa é uma versão de teste. É a versão Zero.</li>
<li>Fiz esse script como estudo. Não tenho pretensões de lucros, suporte, nem nada com ele.</li>
</ul>
<p><strong>Porque não usar o Scaffolding do CodeIgniter</strong></p>
<ul>
<li>O Scaffolding do CodeIgniter não é aproveitável para o desenvolvimento de um projeto, ele não segue o padrão MVC do Framework. Como consta no manual, ele é apenas uma maneira de popular rapidamente uma tabela.</li>
</ul>
<p><span id="more-81"></span><br />
<strong>Limitações dessa versão</strong></p>
<ul>
<li>É um shell Script. Vai rodar apenas em base Unix. Fiz testes no Linux distribuição Ubuntu 8.10  e no Leopard MAC OSX 10.5.6. Não vai rodar no Windows.</li>
<li>Por enquanto está rodando apenas em DataBase MySQL, Tive problemas com a função listFields com outros bancos.</li>
<li>Você deve estar com o módulo Rewrite do apache instalado, e usando o .htaccess como indicado no manual do CodeIgniter para fazer suas URL amigáveis, senão a navegação vai ficar super esquisita.</li>
<li>Você deverá chamar o script de dentro da sua pasta Application e as pastas Controllers, Models e Views não podem ter sido renomeadas.</li>
</ul>
<p><strong>Como Usar</strong></p>
<ul>
<li>É bem simples. Basta chamar o script, passando o nome da tabela e em seguida o de sua PK.</li>
<li>O script tem uma opção para ajuda (-h ou &#8211;help) e para verificar a versão (-V ou &#8211;version)</li>
</ul>
<p><strong>Exemplo prático</strong></p>
<p>Baixe o Sheel Script <a title="Baixe o arquivo" href="http://flaviosilveira.com/wp-content/uploads/ciforms.sh">clicando aqui</a>.</p>
<p>É necessário colocar o sheel dentro da pasta applications.<br />
<img class="alignnone size-full wp-image-83" title="picture-1" src="http://flaviosilveira.com/wp-content/uploads/2009/04/picture-1.png" alt="picture-1" width="541" height="316" /><br style='clear: both;' /></p>
<p>Em seguida Vamos executá-lo no terminal.<br />
Para chamar o script, apontamos o caminho atual (./) e depois seu nome (ciforms.sh).<br />
Repare que se não passar os parâmetros corretos ele não irá executar e irá lhe oferecer o help.<br />
<img class="alignnone size-full wp-image-91" title="picture-8" src="http://flaviosilveira.com/wp-content/uploads/2009/04/picture-8.png" alt="picture-8" width="596" height="83" /><br style='clear: both;' /></p>
<p>Colocando corretamente os parâmetros (Nome da tabela e em seguida a Primary Key da tabela)<br />
<img class="alignnone size-full wp-image-85" title="picture-3" src="http://flaviosilveira.com/wp-content/uploads/2009/04/picture-3.png" alt="picture-3" width="598" height="76" /><br style='clear: both;' /></p>
<p>O Script é executado e você já pode conferir nas pastas que foram criados os arquivos .php.<br />
Um controller, um model, e três views.<br />
<img class="alignnone size-full wp-image-86" title="picture-4" src="http://flaviosilveira.com/wp-content/uploads/2009/04/picture-4.png" alt="picture-4" width="618" height="420" /><br style='clear: both;' /></p>
<p>Basta agora chamar no browser o seu site, em seguida o nome da tabela.<br />
Aqui está a listagem, onde você tem o Id do registro e os opções para Editar ou Remover.<br />
<img class="alignnone size-full wp-image-87" title="picture-5" src="http://flaviosilveira.com/wp-content/uploads/2009/04/picture-5.png" alt="picture-5" width="546" height="234" /><br style='clear: both;' /></p>
<p>Após Editar você volta para a listagem.<br />
<img class="alignnone size-full wp-image-88" title="picture-6" src="http://flaviosilveira.com/wp-content/uploads/2009/04/picture-6.png" alt="picture-6" width="450" height="294" /><br style='clear: both;' /></p>
<p>Após clicar em remover, você repara na listagem com um registro a menos.<br />
<img class="alignnone size-full wp-image-89" title="picture-7" src="http://flaviosilveira.com/wp-content/uploads/2009/04/picture-7.png" alt="picture-7" width="511" height="195" /><br style='clear: both;' /></p>
<p>Fique a vontade para abrir o código e conferir como são feitas as chamadas e tudo mais. O Shell vai gerar tudo em uma linha só. Se você usa o Eclipse ou o Aptana como editor basta dar um Ctrl+Shift+F para identar tudo automaticamente.</p>
<p>Os Arquivos php não contam com praticamente nenhum comentário, pois tive problemas do Shell em relação a eles.</p>
<p>Devo mexer em breve nele para funcionar com Postgres. Até lá, um abraço a todos.</p>


<div id="RelatedPosts"><p>Posts Relacionados<ul><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>
<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/2009/codeigniter-metido-a-ruby/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Múltiplos sites com CodeIgniter &#8211; Exemplo prático</title>
		<link>http://flaviosilveira.com/2009/multiplos-sites-com-codeigniter-exemplo-pratico/</link>
		<comments>http://flaviosilveira.com/2009/multiplos-sites-com-codeigniter-exemplo-pratico/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 00:05:52 +0000</pubDate>
		<dc:creator>Flávio Silveira</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[múltiplos sites com codeIgniter]]></category>
		<category><![CDATA[reestruturando CodeIgniter]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=60</guid>
		<description><![CDATA[Devido a muita procura do post sobre a restruturação do CodeIgniter para trabalhar com múltiplos sites (Múltiplos sites com CodeIgniter), fiz um passo a passo aqui da estrutura para o pessoal entender melhor.
Estava recebendo muitas dúvidas, vamos ver se com este exemplo consigo deixar as coisas mais claras para todos.
Começando do zero.
Baixei a última versão [...]

<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/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>
<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>
</ul></div>]]></description>
			<content:encoded><![CDATA[<p>Devido a muita procura do post sobre a restruturação do CodeIgniter para trabalhar com múltiplos sites (<a href="http://flaviosilveira.com/2008/alterando-configuracao-do-codeigniter/">Múltiplos sites com CodeIgniter</a>), fiz um passo a passo aqui da estrutura para o pessoal entender melhor.</p>
<p>Estava recebendo muitas dúvidas, vamos ver se com este exemplo consigo deixar as coisas mais claras para todos.</p>
<p><strong>Começando do zero.</strong></p>
<p>Baixei a <a href="http://codeigniter.com/downloads/">última versão do CodeIgniter</a>.<br />
Descompacto ela no meu <em>desktop</em>.</p>
<p>Dentro dessa pasta veio o <em>system</em>, o <em>user_guide</em>, o <em>index.php</em> e o <em>license.txt</em>.<br />
Costumo deletar o User_guide, pois uso a documentação online.</p>
<p><strong>Atenção agora ! </strong><br />
Dentro da pasta system temos a pasta <em>application</em>. É esta pasta que faz o seu site funcionar. Com esta informação em mente vamos em frente.</p>
<p>Para começar a trabalhar com o servidor. Começe criando uma pasta para cada site. Como exemplo <em>site1</em> e <em>site2</em>.<br />
<img class="alignnone size-full wp-image-61" title="ex1" src="http://flaviosilveira.com/wp-content/uploads/2009/01/ex1.jpg" alt="ex1" width="99" height="77" /><br />
<br style="clear: both;" /><br />
<span id="more-60"></span><br />
O que o site vai precisar para funcionar ? Sim, como vimos acima é a pasta <em>application</em>. Dentro da pasta de cada site vamos precisar de uma application.<br />
<img class="alignnone size-full wp-image-62" title="ex2" src="http://flaviosilveira.com/wp-content/uploads/2009/01/ex2.jpg" alt="ex2" width="160" height="486" /><br />
<br style="clear: both;" /><br />
A pasta <em>application</em>, claro, deve ir com a estrutura que vem por padrão nela, como você deve ter reparado na imagem acima.</p>
<p>Agora que já temos o local dos sites prontos, precisamos do que faz o Codeigniter funcionar, que é todo o restante da pasta <em>system</em>. Essa pasta deve estar no mesmo nível dos seus sites.<br />
<img class="alignnone size-full wp-image-63" title="ex3" src="http://flaviosilveira.com/wp-content/uploads/2009/01/ex3.jpg" alt="ex3" width="99" height="86" /><br />
<br style="clear: both;" /><br />
Ok. Quase lá.<br />
Agora, sabe aquele <em>index.php</em> que veio quando descompactamos o codeIgniter ? Como digo no <a href="http://flaviosilveira.com/2008/alterando-configuracao-do-codeigniter">outro post</a>, é ele quem indica o caminho da pasta <em>application</em> do seu site, e também do core do codeIgniter. Logo, vamos precisar de um deles para cada site.<br />
<img class="alignnone size-full wp-image-64" title="ex4" src="http://flaviosilveira.com/wp-content/uploads/2009/01/ex4.jpg" alt="ex4" width="139" height="150" /><br />
<br style="clear:both;" /><br />
Agora precisamos editar esse arquivo index.php. Vamos começar pelo do site1.<br />
Procure pela linha</p>
<pre class="brush: php;">
$system_folder = &quot;system&quot;
</pre>
<p>Esta variável indica aonde está o core do seu sistema, a pasta <em>system</em>.<br />
No nosso caso ela está um nível acima, então basta mudar para</p>
<pre class="brush: php;">
$system_folder = &quot;../system&quot;
</pre>
<p>Logo na sequência você deve ver a linha</p>
<pre class="brush: php;">
$application_folder = &quot;application&quot;
</pre>
<p>Essa é a variável que indica onde está a pasta application desse site (lembrando&#8230;estamos alterando o site1). O caminho está correto, então, mantemos assim.</p>
<p>Faça o mesmo para o site2, indicando onde está o core do codeIgniter(pasta <em>system</em>) e a pasta <em>application</em>.</p>
<p>Está feito!</p>
<p>Agora, apenas para ficar mais explícito, vamos alterar a view de cada site.<br />
Dentro de <em>Application</em> &gt; <em>views</em>, temos o arquivo <em>welcome_message.php</em>.<br />
<img class="alignnone size-full wp-image-65" title="ex5" src="http://flaviosilveira.com/wp-content/uploads/2009/01/ex5.jpg" alt="ex5" width="203" height="213" /><br />
<br style="clear:both;" /><br />
Dentro desse arquivo, vem a mensagem padrão de boas vindas do codeIgniter. Na do site1 tirei tudo que havia (ctrl + a  &#8211; del) e coloquei apenas o título</p>
<pre class="brush: xml;">
&lt;h1&gt;::: SITE 1 :::&lt;/h1&gt;
</pre>
<p>e na do site2 apenas o título</p>
<pre class="brush: xml;">
&lt;h1&gt;::: SITE 2 :::&lt;/h1&gt;
</pre>
<p>Agora basta acessar as pastas para conferir o resultado.</p>
<p>Para detalhes mais técnicos desse step by step, confira o <a href="http://flaviosilveira.com/2008/alterando-configuracao-do-codeigniter">antigo post</a>.</p>
<p>Ainda com dúvida ? <a href="http://www.flaviosilveira.com/wp-content/uploads/multiplosSitesCI.rar">Faça aqui o download dos arquivos</a>.</p>
<p>Caso ainda tenha sobrado dúvidas&#8230;entre em contato.<br />
Abraços !!!</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/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>
<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>
</ul></p></div>]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2009/multiplos-sites-com-codeigniter-exemplo-pratico/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>CodeIgniter, Internet Explorer e o tempo de expiração da sessão</title>
		<link>http://flaviosilveira.com/2009/codeigniter-internet-explorer-e-o-tempo-de-expiracao-da-sessao/</link>
		<comments>http://flaviosilveira.com/2009/codeigniter-internet-explorer-e-o-tempo-de-expiracao-da-sessao/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 16:11:49 +0000</pubDate>
		<dc:creator>Flávio Silveira</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Internet Explorer não salva session]]></category>
		<category><![CDATA[Tempo de sessão codeIgniter]]></category>

		<guid isPermaLink="false">http://flaviosilveira.com/?p=40</guid>
		<description><![CDATA[Nesta Quinta-feira antes de sair do trabalho me deparo com uma surpresa no novo sistema que estou trabalhando.  O login de acesso havia parado de funcionar no Internet Explorer. No Firefox tudo normal. Chata mania de ficar testando só no Firefox por conta das facilidades como Firebug e WebDeveloper, ai quando vamos testar no browser [...]

<div id="RelatedPosts">
Posts Relacionados<ul><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/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/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>Nesta Quinta-feira antes de sair do trabalho me deparo com uma surpresa no novo sistema que estou trabalhando.  O login de acesso havia parado de funcionar no Internet Explorer. No Firefox tudo normal. Chata mania de ficar testando só no Firefox por conta das facilidades como Firebug e WebDeveloper, ai quando vamos testar no browser do usuário acontece essas coisas.</p>
<p>Sexta pela manhã, foi minha primeira tarefa do dia. Achei que seria algo bobo. Realmente era, mas levei 4 horas para descobrir.</p>
<p>Comecei pelos arquivos de JavaScript vendo se estava tudo ok.<br />
Os retornos via ajax do banco estavam ok.<br />
Parti para os controllers que gravam a sessão no browser.<br />
Comentei a biblioteca que faz verificação da sessão para deixar eu acessar livremente a aplicação. Dei um print no valor da sessão, que pelo codeIgniter se verifica assim:</p>
<pre class="brush: php;">
//Não esqueça de chamar o helper session
// Login é o valor que eu estava gravando na sessão
print($this-&gt;session-&gt;userdata('login'));

// A tradicional global session não funcionará no codeIgniter
print($_SESSION['login']);
</pre>
<p>No Firefox tudo ok. No Internet Explorer em branco. Que beleza, o Internet Explorer não está deixando escrever na sessão&#8230;<br />
<span id="more-40"></span><br />
Navegando pelo <a href="http://www.google.com">segundo cérebro</a> não tive nenhuma resposta conclusiva. As soluções propostas não se encaixavam para mim. Atualizar versão do apache, tirar Underlines da url, tirar números do nome do servidor, nada disso fez sentido pra mim.</p>
<p>Sem idéias, me juntei ao meu amigo <a href="http://www.ronieneubauer.com">Ronie</a> e ao Rafael que também faz parte da minha equipe nesse projeto para caçar uma solução.</p>
<p>Tiramos o redirecionamento do Login, para manter na mesma página. E demos ali também um print, dessa vez em todos os valores da sessão</p>
<pre class="brush: php;">
//Print_r por se tratar de array
print_r($this-&gt;session-&gt;userdata);
</pre>
<p>Os valores estavam ali, o problema estava no redirecionamento então.</p>
<p>Quebramos a cabeça demais, e como antes estava funcionando no IE, resolvemos rever tudo de brusco que mudamos no sistema.<br />
Verificamos rotas, Jquery e seus plugins, Verificações de nível de acesso, nada.<br />
Até que me lembrei que havia mudado a configuração da sessão, para expirar em meia hora (1800 segundos) tirando do padrão de duas horas (7200 segundos) que vem no CodeIgniter. Esses valores são alterados no config.php, ali você dá de encontro com outras configurações para sua sessão, como nome dela e etc.</p>
<p>E, Sim, era isso. Voltamos ao default do codeIgniter e tudo voltou a funcionar. Me lembro de ter tido uns problemas similares trabalhando com PHP sem frameworks, mas nem suspeitava. Fomos testando para ver o mínimo que o IE iria aceitar de tempo de expiração. Chegamos no valor de 3835 segundos. Mesmo assim continuou muita instável, e setamos em 4000 segundos.</p>
<p>Problema resolvido após 4 horas de Prints, Alerts, Pesquisa, Palpites e Indignação&#8230;</p>
<p>Valeu..<br />
Abraços !!!</p>


<div id="RelatedPosts"><p>Posts Relacionados<ul><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/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/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/2009/codeigniter-internet-explorer-e-o-tempo-de-expiracao-da-sessao/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Erro 500, Timeout Apache, max_execution_time PHP</title>
		<link>http://flaviosilveira.com/2008/erro-500-timeout-apache-max_execution_time-php/</link>
		<comments>http://flaviosilveira.com/2008/erro-500-timeout-apache-max_execution_time-php/#comments</comments>
		<pubDate>Sat, 27 Dec 2008 01:09:42 +0000</pubDate>
		<dc:creator>Flávio Silveira</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Servidor]]></category>
		<category><![CDATA[Configuração PHP]]></category>
		<category><![CDATA[erro 500]]></category>
		<category><![CDATA[erros de servidor]]></category>

		<guid isPermaLink="false">http://www.flaviosilveira.com/?p=17</guid>
		<description><![CDATA[Cenário: Site que funciona como um painel do cliente, onde ele adiciona produtos que necessita para seu negócio. Há uma área onde de um lado é listado os produtos já adicionados, e do outro os que ele ainda pode adicionar.
Ocorrência: &#8220;Sempre demorou para carregar. Funcionava normal. Mas agora quando um cliente tem muitos produtos, não [...]

<div id="RelatedPosts">
Posts Relacionados<ul><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>
</ul></div>]]></description>
			<content:encoded><![CDATA[<p><strong>Cenário:</strong> Site que funciona como um painel do cliente, onde ele adiciona produtos que necessita para seu negócio. Há uma área onde de um lado é listado os produtos já adicionados, e do outro os que ele ainda pode adicionar.</p>
<p><strong>Ocorrência:</strong> &#8220;Sempre demorou para carregar. Funcionava normal. Mas agora quando um cliente tem muitos produtos, não abre. Dá erro 500.&#8221;<br />
&#8220;No servidor de testes está funcionando, no do ar não. &#8221;</p>
<p><strong>Pesquisa:</strong> Fui atrás do tal erro 500. Claro já havia o visto antes, mas não sou daqueles que sabe de cor o significado dos erros de servidor e do apache, e nem dos bips de erro da placa mãe. No <a href="http://www.google.com">segundo cérebro</a> há muitas inconstantes sobre o erro 500. Uns dizem ser erro de permissão, outros de configuração. Felizmente meu <a href="http://delicious.com/flaviosilveira">Delicious</a> me salvou. Eu tinha salvo <a href="http://suporte.bs2.com.br/questions/83/P%E1ginas+de+erro+de+servidores+Web.">esse link</a> com uma lista sobre os erros de servidor há algum tempo.</p>
<p>Agora sim. Erro 500: Algo não foi compreendido pelo servidor.<br />
Certo. Muito bom. Não ajudou muito. Em nada melhor dizendo.<br />
<strong>E agora?</strong><br />
<span id="more-17"></span></p>
<p>Eu e a programadora responsável pelo job, dando uma andada pelo sistema, nos deparamos com uma Consulta SQL cavalar, com várias linhas, Joins e com funções recursivas.</p>
<p><strong>Primeiro chute:</strong> Inspirado pelo nosso supervisor de desenvolvimento, vamos ver o <em>Timeout do apache</em>. Vamos comparar o timeout dos dois servidores. Como fazer isso ?<br />
No arquivo de configuração do apache (http.conf no Apache ou apache2.conf no Apache2) você deve encontrar uma linha com o seguinte comentário e em seguida a declaração da variável como abaixo.</p>
<pre class="PROGRAMLISTING">#
# Timeout: The number of seconds before receives and sends time out.
#
    Timeout 300</pre>
<p>300 é o default da configuração. E é assim que estava setado nas duas máquinas. Não foi dessa vez.</p>
<p><strong>Segundos passos:</strong> Eu e a Analista de sistemas já estavamos nos preparando para fazer backups dos arquivos do ar e subir os do servidor de teste. Afinal, estava funcionando local, não adiantava ficar rodando o código e dando print() e print_r() pra tudo quanto é lado. O que você faria ?</p>
<p>Mas foi quando um dos técnicos da TI ganhou a tarde. Mudou o <em>max_execution_time</em> no arquivo de configuração do PHP, o php.ini. <strong><br />
O que é isso ?</strong> O nome diz tudo não ? É o máximo de tempo que o PHP vai tentar ficar executando um script.<br />
<strong>Onde arrumo isso ?</strong> No php.ini, você vai encontrar as variáveis de Limites de recurso, como abaixo.<br />
;;;;;;;;;;;;;;;;;;;<br />
; Resource Limits ;<br />
;;;;;;;;;;;;;;;;;;;</p>
<p>max_execution_time = 30     ; Maximum execution time of each script, in seconds<br />
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data<br />
;max_input_nesting_level = 64 ; Maximum input variable nesting level<br />
memory_limit = 16M      ; Maximum amount of memory a script may consume (16MB)</p>
<p>Repare, aqui na minha configuração está com 30. Esse é o padrão. O Parceiro da TI setou para 60.</p>
<p><strong>Testando: </strong>Olha só, o Cliente que tem mais de 100 produtos agora consegue entrar na sua lista. Apesar da demora. Xiiii&#8230;. mas o cliente com 500 produtos não. <img src='http://flaviosilveira.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p><strong>Solução:</strong> Sim, é isso mesmo. Vamos aumentar mais ainda o <em>max_execution_time</em>.<br />
<strong>Qual o máximo que podemos setar ? </strong>Segundo dizem, os monges shaolins já ficaram esperando por 8 horas a execução de um script PHP, para exercitar a paciência. Talvez não tenha limite, você pode testar e me dizer.<br />
<strong>Resolveu ? </strong>Resolveu! Setamos para 300. Apesar da absurda demora (O loading do IE7 se manteve firme por aproximadamente uns 3 a 4 minutos), apareceu a lista de itens do cliente. O cliente não reclama mais que não aparece, apenas da demora.</p>
<p><strong>Próximos passos:</strong> Estudar uma melhor performace para essa SQL. Ela parece ser a grande vilã de tudo. Conseguimos uma solução imediata. Nunca e jamais ideal.<br />
<strong>Como conseguir essa melhor performance ?</strong> Particularmente não sei. Refazer a consulta sem tantos JOINS ou quebrar em partes podem ser algumas alternativas.</p>
<p>Fica aqui o meu relato de algumas horas de trabalho. Quem sabe surge esse problema por ai né?<br />
Abraços.</p>


<div id="RelatedPosts"><p>Posts Relacionados<ul><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>
</ul></p></div>]]></content:encoded>
			<wfw:commentRss>http://flaviosilveira.com/2008/erro-500-timeout-apache-max_execution_time-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Múltiplos sites com CodeIgniter</title>
		<link>http://flaviosilveira.com/2008/alterando-configuracao-do-codeigniter/</link>
		<comments>http://flaviosilveira.com/2008/alterando-configuracao-do-codeigniter/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 00:08:35 +0000</pubDate>
		<dc:creator>Flávio Silveira</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[framework php]]></category>
		<category><![CDATA[multiple site]]></category>

		<guid isPermaLink="false">http://www.flaviosilveira.com/?p=6</guid>
		<description><![CDATA[Entrei em uma empresa recentemente, e acredito que conquistei a vaga por já ter trabalhado com CodeIgniter antes. Pra quem não sabe o CodeIgniter é um framework PHP com estrutura em MVC, o que deixa tudo mais organizado. E foi a ferramenta escolhida pela empresa para organizar os seus bagunçados projetos.
Apesar de já ter trabalhado [...]

<div id="RelatedPosts">
Posts Relacionados<ul><li><a href='http://flaviosilveira.com/2009/multiplos-sites-com-codeigniter-exemplo-pratico/' rel='bookmark' title='Permanent Link: Múltiplos sites com CodeIgniter &#8211; Exemplo prático'>Múltiplos sites com CodeIgniter &#8211; Exemplo prático</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>Entrei em uma empresa recentemente, e acredito que conquistei a vaga por já ter trabalhado com CodeIgniter antes. Pra quem não sabe o <a href="http://codeigniter.com/">CodeIgniter</a> é um framework PHP com estrutura em <a href="http://pt.wikipedia.org/wiki/MVC">MVC</a>, o que deixa tudo mais organizado. E foi a ferramenta escolhida pela empresa para organizar os seus bagunçados projetos.</p>
<p>Apesar de já ter trabalhado com CodeIgniter antes, nunca havia me envolvido tanto, entrado em suas configurações principais e etc. Me limitava ao superficial para fazer funcionar. Controler, consulta no banco pelo Model, chama a view para mostrar o conteúdo e fechou. No máximo chamar uma library.</p>
<p>Porém pediram para mim e meu amigo <a href="http://twitter.com/RonieNeubauer">Ronie</a>, que já tinhamos experiência com a ferramenta, para deixar ela configurada para múltiplos sites. Já tinhamos visto isso antes. Vamos lá! Pesquisar no segundo cérebro (<a href="http://www.google.com">Google</a>)!</p>
<p>Um <a href="http://codeigniter.com/wiki/Multiple_Applications/">Wiki </a>no site oficial propõe duas maneiras para se trabalhar com múltiplos sites em CodeIgniter. A primeira seria criando as pastas principais dos sites dentro de Application (Application é onde fica a estrutura do site). Funciona como se cada pasta dessa, fosse um application. Logo, você deve replicar o conteúdo da pasta application que vem por padrão no CodeIgniter para cada site que for ter, renomeando para um nome de acordo (No exemplo abaixo a pasta site1 e a pasta site2).<br />
<img class="alignnone size-full wp-image-54" title="ci1" src="http://flaviosilveira.com/wp-content/uploads/2008/12/ci1.jpg" alt="ci1" width="148" height="139" /><br />
<br style='clear: both' /></p>
<p><span id="more-6"></span><br />
A segunda forma é bem similar. Você tiraria as pastas principais de dentro do Application, trazendo para a mesma raiz do system(system é onde fica o core do codeigniter).<br />
<img class="alignnone size-full wp-image-55" title="ci2" src="http://flaviosilveira.com/wp-content/uploads/2008/12/ci2.jpg" alt="ci2" width="126" height="119" /><br />
<br style='clear: both' /></p>
<p>Outro passo que a documentação pede, para as duas formas, é replicar o arquivo &#8220;index.php&#8221; (Nos exemplos acima representados por site1.php e site2.php), que vem por padrão na raiz do codeigniter, junto com a pasta system e a pasta application.<br />
Deve se fazer essa réplica, para cada site/pasta principal, e editar a variável $application_folder, que devem conter o caminho para sua respectiva pasta principal. Nos exemplos do Wiki ele renomeia cada index para sua pasta do site, para ter como acessar cada site. que ficaria: <strong><em>http://www.seudominio.com/site1</em></strong> ou <strong><em>http://www.seudominio.com/site2</em></strong></p>
<p>Porém, precisavamos de outra coisa.<br />
Foi pedido que separacemos a pasta dos arquivos css&#8217;s para fora da aplicação do CodeIgniter. Para que apenas o pessoal da programação tivesse acesso a isso. O pessoal do Layout (do CSS) não interferiria na Aplicação.</p>
<p>Depois de algumas idéias, rodando o tal arquivo &#8220;index.php&#8221; veio toda a solução. Simples !</p>
<p>Nesse arquivo é setado o endereço da pasta System, e, como já vimos antes, da pasta Application. Putz.. Ai fica tudo muito fácil.</p>
<p>Jogamos uma pasta system na raiz do servidor, e renomeamos para CI.</p>
<p>Para cada site, fizemos uma pasta principal (para onde o domínio é apontado). Dentro dessa pasta principal colocamos a Réplica do Application, com o nome de &#8220;app&#8221;, Uma pasta &#8220;www&#8221;, para os CSS&#8217;s e Imagens de Layout, e por último uma pasta &#8220;includes&#8221;, para Uploads do usuário como fotos de notícias, PDF&#8217;s e etc. Ficou como tento demonstrar abaixo:</p>
<p><img class="alignnone size-full wp-image-56" title="ci3" src="http://flaviosilveira.com/wp-content/uploads/2008/12/ci3.jpg" alt="ci3" width="169" height="210" /><br />
<br style="clear: both" /></p>
<p>Não queriamos deixar as cópias dos &#8220;index.php&#8221; soltas para fora de tudo, como o Wiki deixa a entender. Colocamos dentro de cada Pasta Principal. O que facilitou no sentido da URL, pois geralmente quando você entra em uma pasta pelo browser, ele procura por um &#8220;index&#8221; não é mesmo ? Então para acessar cada site, é só entrar na pasta principal. Ele pega o index.php, e faz todo o Trabalho <em>Hard Mode.</em><em></em></p>
<p><em></em>Nossa URL então, ficou apenas com o dominio do site<em>, </em>que é apontado para pasta do site. Como cada pasta tem o index, fechou.<em><br />
</em></p>
<p>Na edição dos arquivos &#8220;index.php&#8221;, setamos a variável $system_folder da seguinte maneira:</p>
<pre class="brush: php;">

$system_folder = &quot;../CI&quot;;
</pre>
<p>Dois pontos para quem não sabe, volta um diretório. e CI, foi o nome que demos para nossa pasta system. Resumindo: <em>Volta um e entra na pasta CI</em></p>
<p>Apontamos a variável $application_folder para nossa réplica da pasta Application, que é a pasta app no exemplo acima.</p>
<pre class="brush: php;">

$application_folder = &quot;app&quot;;
</pre>
<p>E isso resolve tudo. Ou seja, Podemos fazer a organização do nosso projeto para múltiplos sites como achar melhor. É só editar o cara que manda em tudo, que é o arquivo &#8220;index.php&#8221;, da maneira correta.</p>
<p>Confira um exemplo passo a passo, <a href="http://flaviosilveira.com/2009/multiplos-sites-com-codeigniter-exemplo-pratico/">clicando aqui.</a></p>
<p>Em breve mais posts sobre CodeIgniter. Valeu !!!</p>


<div id="RelatedPosts"><p>Posts Relacionados<ul><li><a href='http://flaviosilveira.com/2009/multiplos-sites-com-codeigniter-exemplo-pratico/' rel='bookmark' title='Permanent Link: Múltiplos sites com CodeIgniter &#8211; Exemplo prático'>Múltiplos sites com CodeIgniter &#8211; Exemplo prático</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/2008/alterando-configuracao-do-codeigniter/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
