禁用ZF2中特定页面的布局

时间:2014-06-12 10:11:25

标签: layout zend-framework2

如何在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>

2 个答案:

答案 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;
}

来源:Where to put custom settings in Zend Framework 2?

答案 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; ?>