我正在使用CakePHP 2.2.4并且具有类似的布局。但是,对于一个页面,<head>
内容是相同的,但基本上整个身体是不同的。我所拥有的是一个带有从twitter的bootstrap中使用的导航栏的网站。在这一页上,导航栏完全不同。我知道快速解决方法是为该页面创建一个布局,但如果我遇到另一个需要使用不同导航栏的页面怎么办?什么是“适当的”MVC方式呢?
答案 0 :(得分:2)
如果每个视图都有某种导航栏,那么您可以使用CakePHP Elements来显示条形图,您可以将元素调用放在一个布局文件中,并从您通过的控制器中设置一个变量要显示特定元素的元素......
echo $this->element('navbar', array(
"which_element" => "thisone"
));
在上面的示例中,您的navbar.ctp必须包含所有导航栏并使用PHP Switch statement或其他内容来计算基于$ which_element显示的内容...
或者更好的是,只需使用控制器中的变量直接调用元素
$this->set('navbar', "thisone"); // this line is in your controller and sets the file name of your nav bar, minus the .ctp extension
echo $this->element($navbar); //this line is in your layout.ctp and renders elements/thisone.ctp, in the above example.
如果某些页面有导航栏但有些页面没有,请使用View Blocks
$this->start('navbar');
echo $this->element($navbar);
$this->end();
答案 1 :(得分:2)
我想这取决于差异有多复杂。
一种方法是拥有一个通用的布局文件
// in app/View/Common/layout.ctp
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Your header content -->
</head>
<body>
<div id="wrap">
<div class="navbar">
<?php echo $this->fetch('menu'); ?>
</div>
<div class="container">
<?php echo $this->fetch('content'); ?>
</div>
</div>
<div id="footer">
<?php echo $this->fetch('footer'); ?>
</div>
</body>
</html>
让你的布局文件扩展它
//app/View/Layouts/default.ctp
<?php
$this->extend('/Common/layout');
$this->assign('menu', $this->element('menu'));
echo $this->fetch('content');
$this->assign('footer', $this->element('footer'));
?>