Documente Academic
Documente Profesional
Documente Cultură
Quero mostrar pra vocs uma dica rpida pra debugar o cdigo usando o CodeIgniter.
Talvez muitos j saibam e seja meio bvio, mas tudo bem.
Algumas vezes precisamos imprimir na tela o contedo de algum array para analisar seus
ndices e ver o que tem dentro dele.
Voc j sabe que no pode simplesmente dar um echo num array porque no vai funcionar
devido aos tipos diferentes.
Ento, voc pode usar o var_dump, porm, ele traz muitas informaes que s vezes no so
necessrias.
Ento, voc pode usar o print_r, que traz exatamente as informaes resumidas como
precisamos.
Porm, para que o cdigo fique legvel no browser, precisamos dar uma formatada antes,
assim:
$matriz = array('a', 'b',
1 'c', 'd');
2
3
4
5
echo "<pre>";
print_r($matriz);
echo "</pre>";
<?php
function pd($valor){
echo "<pre>";
print_r($valor);
echo "</pre>";
die();
}
Dentro do arquivo criei uma simples funo chamada pd() que significa print and die.
Se voc quiser usar o var_dump, pode criar tambm uma funo chamada dd(), dump and die.
Mas aqui sua imaginao livre, basta criar o jeito que achar melhor.
Depois, abra este arquivo: application/config/autoload.php
Ache a linha onde os helpers so carregados e acrescente dentro do array o
ndice funcoes ficando assim:
$autoload['helper'] =
1
array('funcoes');
Agora, toda vez que a aplicao for carregada as funes dentro do helper estaro
disponveis para serem usadas.
Feito isso, agora de qualquer lugar de sua aplicao voc poder chamar a funo para
analisar o contedo de um array, assim:
$array =
1
array('banana','tijolo','monitor','unha','vula');
2
3
pd($array);
Habilitando Layouts No
CodeIgniter (Template Engine)
Parte 1
Vejo muitos desenvolvedores criticarem o CodeIgniter por ele no utilizar o conceito
de Layout ou ter um Template Engine dentro dele.
E a? Voc vai ter que colocar esse topo e esse rodap em todas as pginas que voc
chamar?
Ou voc malandro e vai fazer um include dentro das telas?
O Include seria uma soluo interessante mais uma Template Engine faria isso sozinho
para voc.
Pra quem no conhece nenhuma soluo para isso, o Smarty uma template Engine
Mas podemos estender o Core do Framework e fazer ele trabalhar junto com a gente
sem precisar de muitas manobras e malabarismos. Na documentao do CodeIgniter
achamos essa prtica com o nome de Hooks ou se preferir o portugus ganchos.
/*
|-------------------------------------------------------------------------| Enable/Disable System Hooks
|-------------------------------------------------------------------------|
| If you would like to use the "hooks" feature you must enable it by
| setting this variable to TRUE (boolean). See the user guide for details.
|
*/
$config['enable_hooks'] = TRUE;
2 Definindo um Hook
Dentro da pasta config temos um arquivo onde deve ser feitas as definies dos hooks
que voc quer utilizar.
o arquivo hooks.php. Para cada hook preciso definir um array com alguns
parmetros para que o CodeIgniter saiba o que fazer.
Importante: O ndice do array vai funcionar apenas como nome do seu hook. Voc no
vai us-lo em nenhum lugar a princpio.
Esses itens podem variar de acordo com o que voc quiser ou precisar fazer.
O manual uma grande referncia para te ajudar com isto e traz alguns detalhes que
no abordo aqui.
Certo! Voc habilitou e definiu um Hook, ou gancho. Vamos para o prximo passo.
Vamos adicionar aqui mais 3 constantes que vai nos facilitar l na frente quando
formos fazer nossa classe.
/*
|--------------------------------------------------------------| DEFINE APPLICATION CONSTANTS
|--------------------------------------------------------------|
| EXT
| SELF
| FCPATH
Essas constantes vo facilitar tambm para caso voc precise mudar o caminho dos
arquivos CSS por exemplo. Basta alterar aqui.
O local onde vamos criar nossos layouts foi definido na constante LAYOUTPATH.
{css_for_layout}
{js_for_layout}
</head>
<body>
<div id="geral">
<div id="topo">
<ul id="menu">
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
</ul>
</div>
<div id="meio">
{content_for_layout}
</div>
<div id="rodape">
<p class="rodape">
Todos os direitos reservados - Bla Bla Bla
</p>
</div>
</div>
</body>
</html>
necessrio prestar ateno em 4 variveis que deixamos soltas no meio desse HTML
do Layout.
Primeira {title_for_layout}
Segunda {css_for_layout}
Terceira {js_for_layout}
Quarta {content_for_layout}
Explicando rapidamente:
Essas Strings vo ser substitudas de acordo com o que definirmos no Controller em
um prximo passo.
Vamos criar nossa classe dentro dessa pasta, e, com o nome que tambm
especificamos na definio do Hook que foi Layout.php
Se voc no seguiu o exemplo, faa suas devidas adaptaes.
A classe um pouco extensa, leia com ateno.
Para ajudar ela est com os comentrios do prprio Mozart Petter.
/**
* 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 =& get_instance();
// Definindo o base_url.
$this->base_url = $CI->config->slash_item('base_url');
// Links CSS.
$view = str_replace('{css_for_layout}', $css, $view);
// Links JS.
echo $view;
}
/**
* Gera os links CSS utilizados no layout.
*
* @return void
*/
private function createCSSLinks($links)
{
$html = "";
return $html;
/**
* Gera os links JS utilizados no layout.
*
* @return void
*/
private function createJSLinks($links)
{
$html = "";
return $html;
}
}
7 Fazendo as chamadas no Controller
Chegou o momento final!
hora de juntar tudo isso que fizemos at agora.
<?php
/**
*
*/
class Principal extends Controller
{
/**
* Layout default utilizado pelo controlador.
*/
public $layout = 'default';
/**
* 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->load->view('home');
}
// Metodo teste
function teste()
{
//Title
$this->title = '::: TESTE Ttulo :::';
//CSS
$this->css = array('test');
//JS
$this->js = array('jquery');
// Carregando a View
$this->load->view('teste');
}
?>
o teste.
Eu tenho como costume em meus projetos com CI, retirar a pasta system no
qual ele vem por padro.
Fao ento a alterao da varivel $system_folder no arquivo de configurao
e tudo segue sem problemas.
Exceto esse tutorial, que no leva em considerao essa pasta system.
Voc tem duas opes para consertar isso:
Primeiro:
No local onde so definidas as variveis contantes, adicionar sua pasta system
antes de $application_folder.
Exemplo: define(LAYOUTPATH, system/ . $application_folder./layouts/);
Particularmente acho essa soluo acima atrasada, por deixar o projeto
esttico.
Se ocorrer de voc alterar a pasta system, ter que alterar nesse local
tambm. Chato.
Segundo:
Seguindo essa linha de raciocnio, de no deixar o projeto esttico, prefiro fazer
o seguinte:
No local onde so definidas as variveis constantes, adicionar a
varivel$system_folder.
Exemplo: define(LAYOUTPATH, $system_folder . / .
$application_folder./layouts/);
Mas h um detalhe.
No arquivo index.php, em torno da linha 53, adicionado a
varivel $system_foldero seu caminho completo do servidor. Isso, claro, vai
gerar problemas para o projeto.
O que eu fao ento pegar as variveis constantes que usam a pasta system,
e jogar antes desse bloco.
Se voc seguir pelo projeto exemplo, ver que as coloquei logo depois do
comentrio END OF USER CONFIGURABLE SETTINGS.
Feito isso, caso voc altera sua pasta system, basta alterar no local de sempre
para o projeto continuar funcionando.
Pessoal isso!
Fazia tempo que queria escrever sobre isso, espero que ajude a galera por a.
Dvidas podem mandar sem problemas, vou responder no que estiver a meu
alcance.
Se voc teve dificuldades, baixe o projeto pronto aqui e d uma olhada mais de
perto.
Agradeo novamente ao Mozart Petter, grande Brother, que implementou essa
soluo que uso at hoje em meus projetos. E, como sempre, tambm ao
pessoal que garante minhas 30 visitas dirias, Valeu!
Fala pessoal!
O que mais gera acessos aqui no Blog so os artigos sobre
Codeigniter, e principalmente a parte de layouts. o
artigo Habilitando Layouts no CodeIgniter (Template
Engine) que est dividido em parte 1 e parte 2.
Como esse artigo tem mais de um ano, resolvi dar um upgrade
nele com algumas observaes.
Outros:
No tutorial anterior h uma correo porque eu tratava minha pasta system diferente do
convencional. Com a ajuda e os comentrios de vocs, foi feita uma correo que est no
final do post. Agora na verso 2 est tudo ok. A pasta system vem separada da pasta
application.
Na verso 2 temos agora arquivos .htaccess, arquivos de configurao, dentro das pastas
application e da pasta system. Dentro deles h uma regra para recusar qualquer coisa que
tentar acessar a pasta. Certifique-se que, em caso de colocar seus arquivos de estilo, ou
seus arquivos javascript dentro de application por exemplo, alterar essa regra no
.htaccess.