Utilizando layouts no CodeIgniter
Na grande maioria dos sites e sistemas web é apenas modificado o miolo da aplicação, enquanto que o cabeçalho, rodapé, menu, etc. permanecem iguais. E utilizando o modelo MVC, normalmente para cada action do controller temos uma view correspondente, sendo que geralmente um controller: Main com uma action: index, terá a view main/index.php.
No Code Igniter teríamos que fazer tudo manualmente, já que não há como definir um layout que será carregado em cada view, nem esse carregamento automático.
Pelo menos não havia… :D
Criei um pequeno hook que faz esse serviço. Crie seu controller como abaixo:
class Main extends Controller {
function Main()
{
parent::Controller();
}
function index()
{
$this->data->foo = $this->db->get('main_table');
}
function show()
{
$this->data->foo = $this->db->get('another_table');
// Você pode definir manualmente a view e o layout da seguinte forma:
$this->view = 'main/index';
$this->layout = 'popup';
}
}
E ao acessar as duas actions a view main/index.php será chamada com os valores definidos na variável $this->data. Também será carregado o layout application/views/layouts/default.php na função index e application/views/layouts/popup.php na função show.
Download
Faça o download da hook ou de uma aplicação de exemplo (CI 1.6.2).
Instalação
Para utilizar este hook, copie o arquivo Layout.php dentro da pasta application/hooks/, defina a opção $config[‘hooks’] com true no config e adicione o seguinte no arquivo application/config/hook.php:
$hook['post_controller'][] = array(
'class' => 'Layout',
'function' => 'view',
'filename' => 'Layout.php',
'filepath' => 'hooks',
'params' => array()
);
Espero que goste tanto de utilizar isto quanto eu. Me salva algumas linhas de código.
Cortando e redimensionando imagens com o CodeIgniter
Eu sei que não tenho aparecido muito por aqui, mas o desenvolvimento da nova versão do SiGA está tomando todo tempo imaginável e tive que priorizar aquilo, pois o prazo já está estourando. Mas não é sobre isso que quero escrever.
Recentemente precisei de imagens quadradas num projeto e esse mesmo procedimento se repetiria várias vezes, então criei esta extensão da Biblioteca Image_lib que já vem com o CodeIgniter. Na verdade o código serve não só para imagens quadradas, já que o tamanho tem que ser definido literalmente.
Cole o código abaixo na pasta application/library com o nome MY_Image_lib.php:
class MY_Image_lib extends CI_Image_lib {
/**
* Crop and resize a image
*
* @return bool
*/
function crop_and_resize() {
$width = $this->width;
$height = $this->height;
$size = getimagesize($this->source_folder . $this->source_image);
if ($size[0] > $size[1]) {
$this->width = $width / $height * $size[1];
$this->height = $size[1];
} else {
$this->width = $size[0];
$this->height = $height / $width * $size[0];
}
$this->x_axis = ($size[0] - $this->width) / 2;
$this->y_axis = ($size[1] - $this->height) / 2;
if ( ! $this->crop() ) {
return false;
}
$this->width = $width;
$this->height = $height;
if ( ! $this->resize()) {
return false;
}
return true;
}
}
Pra usar é muito fácil:
$config = array(
'source_image' => '/path/para/a/imagem.jpg',
'maintain_ratio' => false,
'width' => 48,
'height' => 48);
$this->load->library('image_lib', $config);
$this->image_lib->crop_and_resize();
E temos uma imagem como a mostrada abaixo:
![]()
O Framework CodeIgniter
O que um framework tem que fazer? Sério, copiar o Rails?
Tudo bem que seja um om espelho, mas não pode ser feito com fé cega, acreditando que o que o rails faz é o que há de melhor pra se fazer. Não que RoR seja ruim, muito pelo contrário, mas existem vários frameworks imitando-o sem pensar um pouco.
Eu programo em PHP para viver, poderia mudar já que sou eu quem define isso, mas ainda só estou testando outras linguagens para a web. Recentemente resolvi que iria usar um framework para desenvolver, pleos motivos que todo mundo sabe: utilização de MVC, programação mais rápida, etc.
Cheguei a testar o CakePHP, mas não gostei dele pois ele te faz trabalhar como ele quer, não como o programador quer. Bati cabeça com mais alguns e resolvi que montaria meu próprio framework. Programa, programa, programa… Ainda falta muito pela frente…
Até que parei e conheci o CodeIgniter. Achei muito bom, é um framework legal e que me dava a liberdade que eu não tinha com o Cake.
Este framework, apesar de ter sido baseado no Rails, não o segue cegamente e dá um liberdade muito grande pra trabalhar do jeito que o programador quiser. Claro que ele tem uma padronização, mas a liberdade vem em você usar as ferramentas que são fornecidas muito facilmente.
Se você quer saber mais sobre o CodeIgniter, sugiro que veja os screencasts do Elliot Haughin, que foi o que me fez ver o que o CodeIgniter podia fazer; leia o blog do Derek Allard, que é um dos desenvolvedores do Framework; e LEIA O MANUAL. Em português, a comunidade ainda está se formando, mas já existe o site codeigniter.com.br, lá se encontra o manual traduzido, um fórum (que atualmente está fora do ar) e a lista de discussão.
Aguardem alguns artigos aqui sobre esse tema.
