9.2 – Layout
A grande glória da vida não está em nunca cair, mas em se levantar a cada vez que cair.
Nelson Mandela
Layout contém código de apresentação que é incorporado na view. Qualquer coisa que você deseje ver em todas as suas views deve ser colocada em um layout.
No CakePHP 3 o arquivo default de layout fica em
src\Template\Layout\default.ctp
Se você deseja mudar a aparência da sua aplicação (cores, fontes e posições, imagens, etc) então o layout é o lugar para mexer.
Outros arquivos de layout devem ser criados em
src\Template\Layout\
Aqui está o layout default.ctp do CakePKP 3.8.0 com leves modificações:
<!DOCTYPE html>
<html>
<head>
<?= $this->Html->charset() ?>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
<?= $this->fetch('title') ?>
</title>
<?= $this->Html->meta('icon') ?>
<?= $this->Html->css('base.css') ?>
<?= $this->Html->css('style.css') ?>
<?= $this->fetch('meta') ?>
<?= $this->fetch('css') ?>
<?= $this->fetch('script') ?>
</head>
<body>
<nav class="top-bar expanded" data-topbar role="navigation">
<ul class="title-area large-3 medium-4 columns">
<li class="name">
<h1><a href="/portal/"><?= $this->fetch('title') ?></a></h1>
</li>
</ul>
</nav>
<?= $this->Flash->render() ?>
<div class="container clearfix">
<?= $this->fetch('content') ?>
</div>
<footer>
</footer>
</body>
</html>
Podemos criar tantos layouts quantos desejarmos. Apenas os crie em:
src\Template\Layout\
E chame no action respectivo com:
$this->viewBuilder()->layout('admin');
Na view use:
$this->layout = 'loggedin';
Veja no plugin admin-br o uso de dois layouts e sua chamada no AppController.
Carregando num controller
public function initialize()
{
$this-viewBuilder()->setLayout('admin');
}
Ou
if($loguser == 'user' || $loguser == 'manager'){
$this->viewBuilder()->setLayout('CakeAclBr.default');
}else{
$this->viewBuilder()->setLayout('CakeAclBr.admin');
}
Layout - contém código de apresentação da view. Tudo que vemos nas views está incorporado num layout.
Estão em src/Template/Layout
O cake já vem com um layout padrão, que é o default.ctp.
Como setar outro layout no controller. Exemplo admin.ctp:
public function initialize()
{
$this-viewBuilder()-setLayout('admin');
// Para plugin
// $this-viewBuilder()-setLayout('AdminBr.admin');
}
Detalhes
Comments fornecido por CComment