我正在使用CakePHP开发一个应用程序,我有两个布局:一个用于主页,另一个用于应用程序的其余部分.除了标题上的一些编码,它们几乎完全相同.我可以做些什么来保持DRY,而if ()不是在整个布局中使用语句?
我建议使用大量元素.这样,您仍然可以将所有代码保存在一个位置.例如,如果这是您的主页布局(不包括样板文件):
<body>
<?php echo $this->renderElement('pageHeader'); ?>
<?php echo $this->renderElement('frontPageNotification'); ?>
<?php echo $this->renderElement('navAndOtherStuff'); ?>
...
</body>
Run Code Online (Sandbox Code Playgroud)
这是你的内部布局(你想要显示除frontPageNotification东西之外的所有东西:
<body>
<?php echo $this->renderElement('pageHeader'); ?>
<?php echo $this->renderElement('navAndOtherStuff'); ?>
...
</body>
Run Code Online (Sandbox Code Playgroud)
现在,如果它们几乎完全相同,我可能只使用一个布局并在布局本身中有一些if语句来确定要显示的内容.此外,您可以通过查看$ this-> params数组来选择显示哪些元素,以确定正在加载的页面背后的控制器和操作.喜欢:
<body>
<?php echo $this->renderElement('pageHeader'); ?>
<?php if($this->params['controller'] == 'pages' && $this->params['action'] == 'index') { echo $this->renderElement('frontPageNotification'); } ?>
<?php echo $this->renderElement('navAndOtherStuff'); ?>
...
</body>
Run Code Online (Sandbox Code Playgroud)
诚然,这是相当丑陋的.试着提出我能想到的所有选项:)
祝好运