Múltiplos sites com CodeIgniter
December 19th, 2008 | Published in CodeIgniter, Php | 10 Comments
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 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.
Porém pediram para mim e meu amigo Ronie, 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 (Google)!
Um Wiki 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).

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).

Outro passo que a documentação pede, para as duas formas, é replicar o arquivo “index.php” (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.
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: http://www.seudominio.com/site1 ou http://www.seudominio.com/site2
Porém, precisavamos de outra coisa.
Foi pedido que separacemos a pasta dos arquivos css’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.
Depois de algumas idéias, rodando o tal arquivo “index.php” veio toda a solução. Simples !
Nesse arquivo é setado o endereço da pasta System, e, como já vimos antes, da pasta Application. Putz.. Ai fica tudo muito fácil.
Jogamos uma pasta system na raiz do servidor, e renomeamos para CI.
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 “app”, Uma pasta “www”, para os CSS’s e Imagens de Layout, e por último uma pasta “includes”, para Uploads do usuário como fotos de notícias, PDF’s e etc. Ficou como tento demonstrar abaixo:

Não queriamos deixar as cópias dos “index.php” 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 “index” não é mesmo ? Então para acessar cada site, é só entrar na pasta principal. Ele pega o index.php, e faz todo o Trabalho Hard Mode.
Nossa URL então, ficou apenas com o dominio do site, que é apontado para pasta do site. Como cada pasta tem o index, fechou.
Na edição dos arquivos “index.php”, setamos a variável $system_folder da seguinte maneira:
$system_folder = "../CI";
Dois pontos para quem não sabe, volta um diretório. e CI, foi o nome que demos para nossa pasta system. Resumindo: Volta um e entra na pasta CI
Apontamos a variável $application_folder para nossa réplica da pasta Application, que é a pasta app no exemplo acima.
$application_folder = "app";
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 “index.php”, da maneira correta.
Confira um exemplo passo a passo, clicando aqui.
Em breve mais posts sobre CodeIgniter. Valeu !!!
December 19th, 2008 at 16:40 (#)
Começou bem cara!
Vou estar sempre lendo por aqui.
Eu gosto muito do Symfony, mas o CodeIgniter é muito bom também.
Abraços!
December 19th, 2008 at 17:41 (#)
Valeu cara…
January 7th, 2009 at 07:20 (#)
Só uma dúvida…
CI fica no seguinte caminho:
raiz/CI
Logo o ‘index.php’ fica no caminho:
raiz/nome do site/index.php ou
raiz/nome do site/App/index.php
‘Brigadão’!
January 7th, 2009 at 17:57 (#)
CI fica na raiz do servidor….
Também na raiz do servidor estão as pastas principais dos sites…
Dentro dessa pasta principal eu tenho a app e as outras funcionalidades para o site…
O index.php está dentro da pasta App, ou seja..
raiz/nome do site/App/index.php
Qualquer dúvida manda ai…
Valeu!!! grande Abraço !!
January 8th, 2009 at 08:43 (#)
MUITO FERA!
Resolveu vários problemas…
Estou pensando em criar um TÓPICO no forum do http://www.codeigniter.com.br para repassar sua dica para outros desenvolvedores – com os devidos créditos e link.
O que você acha? Me autoriza?
Um forte abraço.
January 8th, 2009 at 16:12 (#)
Claro cara….
Mande ver lá….Aí nos mande o Link…
Grande Abraço !!!
January 22nd, 2009 at 10:33 (#)
xo ve s entendi..
a pasta CI ta um nivel antes de ‘htdocs’ no caso? quando vc fala em raiz do servidor.. certo?
e pra cada aplicacao vc cria http://www.aplicacao.com e configura a variavel $application_folder = “app”; ?
mas como ficaria a url no caso ?
January 22nd, 2009 at 17:17 (#)
htdocs ??? caso você instale um xampp ou um similar você coloca os seus sites na pasta htdocs…será isso que você está falando ??
Se for…htdocs é a sua raiz.
Ali estará o seu core do CodeIgniter (Pasta CI)….
e para cada site que você quiser você criará uma pasta dele…
Dentro dessa pasta, vai ter a pasta da aplicação..
Também dentro desta pasta você terá um index.php, que ai você vai configurar os caminhos e etc…
Acho que são os pseudo-desenhos que estão confundindo a galera….
Vou rever o texto, dar uma melhorada nele..e colocar umas imagens…quem sabe soltar um exemplo…
Valeu Cara….
January 26th, 2009 at 06:05 (#)
Isso, deve ser isso mesmo, a minha duvida é em relacao ao index.php Principal de todo o CI, o que chama tanto o application_folder como o core..
como seria esse redirecionamento..
tenta por uns desenhos, que so assim burro entende (EU)
se nao quiser, tudo bem, ta tranquilo e valeu pela resposta..
abraços
January 27th, 2009 at 16:15 (#)
Fiz um post montando um exemplo passo a passo para a galera entender melhor…
http://flaviosilveira.com/2009/multiplos-sites-com-codeigniter-exemplo-pratico/
Valeu !!