如何在ZF2中的控制器中禁用特定页面的特定布局(例如:menus.phtml)?在下面的示例中,menu.phtml应该针对特定页面禁用。剩余页面必须包含menus.phtml,如页眉和页脚。
<div>
header.phtml
</div>
<div>
menus.phtml
</div>
<div>
<?php echo $this->content; ?>
</div>
<div>
footer.phtml
</div>
答案 0 :(得分:1)
对此有各种各样的方法。 modules.zendframework还有很多模块 here 可以帮助你。
如果您仍然热衷于自己编写,可以在控制器中添加变量,如下所示:
<?php
//YourController.php
public function someAction()
{
...
$this->layout()->footer = 'default';
...
}
//layout.phtml
<?php if ($this->footer === 'default') : ?>
//show the footer
<?php endif; ?>
这样做效率非常低。想象一下,你需要对所有控制器中的每个动作执行此操作......我当然不希望这样做。
现在zf2有一个服务和事件层,可以在这里帮助我们。 This 是一个非常好的阅读和介绍。您只需编写一个服务并在您的控制器/路由/任何事件上触发事件。现在您可能还想配置显示的内容和隐藏的内容吗?多数民众赞成也很容易。只需编写一个配置文件并将其与global.config合并,如下所示:
<?php
//CustomModule/module.php
public function getConfig() {
$config = array();
$configFiles = array(
include __DIR__ . '/config/module.config.php',
include __DIR__ . '/config/module.customconfig.php',
);
foreach ($configFiles as $file) {
$config = \Zend\Stdlib\ArrayUtils::merge($config, $file);
}
return $config;
}
答案 1 :(得分:-1)
首先,获取控制器或操作名称:
$controllerName =$this->params('controller');
$actionName = $this->params('action');
然后在你的布局/视图脚本中添加一个简单的逻辑。
<?php if ($actionName != 'action that you want to disable the layout/menu'): ?>
echo $this->render('menus.phtml');
<?php endif; ?>