3.9.2 Layouts
Um layout contém código de apresentação que envolve uma view. Qualquer coisa que você quiser ver em todas as suas views deve ser colocada em um layout.
Arquivos de layout devem ser colocados em /app/views/layouts. O layout padrão pode ser sobrescrito criando um novo layout padrão em /app/views/layouts/default.ctp. Uma vez que um novo layout foi criado, código de view renderizado pelo controller é colocado dentro do layout padrão quando a página é renderizada.
Quando você cria um layout, você precisa dizer ao CakePHP onde colocar o código de suas views. Para tanto, garanta que seu layout tem um lugar para o conteúdo do layout através da variável $content_for_layout (e opcionalmente, título para o layout através da variável $title_for_layout). Aqui vai um exemplo do que um layout padrão deve parecer:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo $title_for_layout?></title>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
</head>
<body>
<!-- Se você gostaria que algum tipo de menu seja
mostrado em todas as suas views, insira ele aqui -->
<div id="header">
<div id="menu">...</div>
</div>
<!-- É aqui que eu quero que minhas views apareçam -->
<?php echo $content_for_layout ?>
<!-- Adicione um rodapé para cada página mostrada -->
<div id="footer">...</div>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title><?php echo $title_for_layout?></title><link rel="shortcut icon" href="favicon.ico" type="image/x-icon"></head><body><!-- Se você gostaria que algum tipo de menu sejamostrado em todas as suas views, insira ele aqui --><div id="header"><div id="menu">...</div></div><!-- É aqui que eu quero que minhas views apareçam --><?php echo $content_for_layout ?><!-- Adicione um rodapé para cada página mostrada --><div id="footer">...</div></body></html>
Para configurar um título para o layout, é mais fácil fazê-lo no controller, usando a variável de controller $pageTitle.
<?php
class UsersController extends AppController {
function viewActive() {
$this->pageTitle = 'View Active Users';
}
}
?>
<?phpclass UsersController extends AppController {function viewActive() {$this->pageTitle = 'View Active Users';}}?>
Você pode criar quantos layouts você desejar: apenas coloque-os no diretório /app/views/layouts, e escolha entre eles o ideal para cada action do controller usando a variável $layout ou a função setLayout(). Controllers que não tenham a variável $layout configurada usarão o layout padrão.
Por exemplo, se uma sessão do meu site inluir um pequeno espaço para banner, eu posso criar um novo layout com um pequeno espaço para propaganda e especificá-lo como layout para todas as actions de controller usando algo como:
var $layout = 'default_small_ad';
<?php
class UsersController extends AppController {
function viewActive() {
$this->pageTitle = 'Ver Usuários Ativos';
$this->layout = 'default_small_ad';
}
function viewImage() {
$this->layout = 'image';
// imprimir a imagem para o usuário
}
}
?>
<?phpclass UsersController extends AppController {function viewActive() {$this->pageTitle = 'Ver Usuários Ativos';$this->layout = 'default_small_ad';}function viewImage() {$this->layout = 'image';// imprimir a imagem para o usuário}}?>
CakePHP tem em seu núcleo, dois layouts (além do layout padrão) que você pode usar em suas aplicações: 'ajax' e 'flash'. O layout Ajax é ótimo para criar respostas Ajax - é um layout vazio (a maior parte das chamadas ajax requer pouca marcação em retorno, ao invés uma interface totalmente renderizada). O layout flash é usado para mensagens mostradas pelos métodos flash() dos controllers.
Três outros layouts - xml, js, e rss - existem no núcleo para acelerar e facilitar servir conteúdo diferente de text/html.
