Você pode exibir blocos usando o método fetch(). fetch() irá retornar um bloco de maneira segura, retornando ‘’ se o bloco não existir”:
echo $this->fetch('sidebar');
Você também pode usar o fetch para exibir condicionalmente um conteúdo que deve envolver um bloco que deveria existir. Isto é útil em layouts ou views estendidas, nas quais você queira mostrar cabeçalhos e outras marcações condicionalmente:
// em app/View/Layouts/default.ctp
<?php if ($this->fetch('menu')): ?>
<div class="menu">
<h3>Menu options</h3>
<?php echo $this->fetch('menu'); ?>
</div>
<?php endif; ?>
Utilizando blocos para arquivos de script e CSS
Novo na versão 2.1.Blocos substituem a variável obsoleta $scripts_for_layout do layout. Em vez de usá-la, você deve usar blo-cos. A HtmlHelper vincula-se aos blocos da view e a cada um dos seus métodos php:meth:~HtmlHelper::script(), css()e meta() quando o bloco com o mesmo nome utiliza a opção inline = false:
<?php
// no seu arquivo de view
$this->Html->script('carousel', array('inline' => false));
$this->Html->css('carousel', array('inline' => false));
?>
// no seu arquivo de layout <!DOCTYPE html>
<html lang="en"> <head>
<title><?php echo $this->fetch('title'); ?></title>
<?php echo $this->fetch('script'); ?> <?php echo $this->fetch('css'); ?>
</head>
// o resto do layout continua
A HtmlHelper também permite você controlar para que bloco os scripts e CSS vão:
// na sua view
$this->Html->script('carousel', array('block' => 'scriptBottom'));
// no seu layout
echo $this->fetch('scriptBottom');
CakePHP Cookbook Documentation, Release 2.x
Layouts
Um layout contem o código de apresentação que envolve uma view. Qualquer coisa que você queira ver em todas as suas views deve ser colocada em um layout.
Arquivos de layouts devem ser colocados em /app/View/Layouts. O layout padrão do CakePHP pode ser sobres-crito criando um novo layout padrão em /app/View/Layouts/default.ctp. Uma vez que um novo layout padrão tenha sido criado, o código da 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 isso, garanta que o seu layout inclui um lugar para $this->fetch('content'). A seguir, um exemplo de como um layout padrão deve parecer:
<!DOCTYPE html> <html lang="en"> <head>
<title><?php echo $title_for_layout?></title>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<! Incluir arquivos extenos e scripts aqui (Ver o helper HTML para mais detalhes)
--˓→> echo $this->fetch('meta'); echo $this->fetch('css'); echo $this->fetch('script'); ?> </head> <body>
<!-- Se você quiser exibir algum menu em todas as suas views, inclua-o aqui --> <div id="header">
<div id="menu">...</div> </div>
<!-- Aqui é onde eu quero que minhas views sejam exibidas -->
<?php echo $this->fetch('content'); ?>
<!-- Adicionar um rodapé para cada página exibida --> <div id="footer">...</div>
</body> </html>
Nota: Na versão anterior a 2.1, o método fetch() não estava disponível, fetch('content') é uma substitui-ção para $content_for_layout e as linhas fetch('meta'), fetch('css') and fetch('script') estavam contidas na variável $scripts_for_layout na versão 2.0.
Os blocos script, css e meta contém qualquer conteúdo definido nas views usando o helper HTML embutido. Útil na inclusão de arquivos javascript e CSS de views.
Nota: Quando usar HtmlHelper::css() ou HtmlHelper::script() em views, especifique ‘false’ para a opção ‘inline’ para colocar o código html em um bloco de mesmo nome. (Veja a API para mais detalhes de uso)
O bloco content contem o conteúdo da view renderizada.
$title_for_layout contém o título da página, Esta variável é gerada automaticamente, mas você poderá sobrescrevê-la definindo-a em seu controller/view.
Para definir o título para o layout, o modo mais fácil é no controller, setando a variável $title_for_layout: class UsersController extends AppController {
public function view_active() {
$this->set('title_for_layout', 'View Active Users'); }
}
Você também pode setar a variável title_for_layout no arquivo de view:
$this->set('title_for_layout', $titleContent);
Você pode criar quantos layouts você desejar: apenas coloque-os no diretório app/View/Layouts, e defina qual deles usar dentro das ações do seu controller usando a propriedade$layoutdo controller ou view:
// de um controller
public function admin_view() {
// códigos
$this->layout = 'admin'; }
// de um arquivo view
$this->layout = 'loggedin';
Por exemplo, se a seção do meu site incluir 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 as ações de todos os controllers usando algo como: class UsersController extends AppController {
public function view_active() {
$this->set('title_for_layout', 'View Active Users');
$this->layout = 'default_small_ad'; }
public function view_image() {
$this->layout = 'image';
//output user image
} }
O CakePHP tem em seu núcleo, dois layouts (além do layout padrão) que você pode usar em suas próprias aplicações: ‘ajax’ e ‘flash’. O layout Ajax é útil para elaborar respostas Ajax - é um layout vazio (a maior parte das chamadas ajax requer pouca marcação de retorno, preferencialmente a uma interface totalmente renderizada). O layout flash é usado para mensagens mostradas pelo métodoController::flash().
Outros três layouts, XML, JS, e RSS, existem no núcleo como um modo rápido e fácil de servir conteúdo que não seja text/html.
CakePHP Cookbook Documentation, Release 2.x