Layout personalizado para cada controller ou para cada método (action)
Bom pessoal, continuando minhas descobertas no Cake. Descobri uma coisa simples mas bastante útil, que é mudar o layout somente para um determinado controller ou para somente um método deste.
Por padrão o Cake carrega o layout padrão: /views/layouts/default.thtml mas podemos fazer com que ele carregue um outro layout para um determinado controller. Por exemplo, se você quer fazer um controller para gerar uma imagem, ela não poderia sair com mime/type html. Então neste caso deve-se criar um outro layout específico para isso.
No caso se quisermos criar um layout para imagem, ele poderia ser assim:
/views/layouts/imagem.thtml
neste layout estamos definindo que a saída dele será uma imagem png e logo abaixo estamos escrevendo o que vier do controller/view.
Agora no controller, temos que indicar que ele usará o layout imagem:
-
<?
-
-
class ImagensController extends AppController{
-
-
var $layout = "imagem";
-
}
-
-
?>
Com isso qualquer método (action) de ImagensController terá a saída como um imagem png.
No caso de queremos que apenas um método tenha a saída como imagem, bastaria fazer isso:
-
<?
-
-
class ImagensController extends AppController{
-
-
function verImagem(){
-
-
$this->layout = "imagem";
-
}
-
-
function info(){
-
-
}
-
-
}
-
-
?>
Neste caso verImagem seria mostrado como uma imagem e info com o layout default.
Bom é isso, qualquer dúvida, é só comentar. Abraços...
2 Comentários »
RSS feed for comments on this post · URI do TrackBack
Este site é escrito por Tulio Faria, analista de sistemas, apaixonado por web, jogos e por qualquer cacareco tecnológico.
Marcelo said,
Abril 8, 2008 @ 16:14
Tulio, sera que eu consigo monta um menu dinamicamente em um layout? por exemplo, quero listar categorias de noticias no menu esquerdo do meu default.thtml.
Como eu posso fazer isso?
Tulio Faria said,
Abril 9, 2008 @ 23:40
Sim...
Basta fazer um component que retorne os dados... Já vi gente no grupo Cakephp-br no google fazendo com requestAction, mas comigo não funcionou... :S
Feito o componente é só usá-lo no beforeFilter do app_controller para jogar os dados em todas as requisições...
Abraços,