Zend组织问题

时间:2009-06-17 19:13:48

标签: php zend-framework layout organization

所以我对Zend框架关于布局的代码的一般组织提出了一个问题。

我的布局基本上是这样的:

(LAYOUT.PHTML)

<div id='header'>
<?= $this->Layout()->header ?>
</div>

<div id='main'>
<?= $this->Layout()->main ?>
</div>

<div id='footer'>
<?= $this->Layout()->footer ?>
</div>

依此类推。现在,为了保持我的标题中的代码与我的主代码和我的页脚代码分开,我为我的视图创建了一个文件夹,其中包含header.phtml,main.phtml,footer.phtml。然后我使用此代码将header.phtml的内容分配到$ this-&gt; layout() - &gt; header:

(INDEX.PHTML)

$this->Layout()->header = file_get_contents('index/header.phtml');
$this->Layout()->main = file_get_contents('index/main.phtml');
$this->Layout()->footer = file_get_contents('index/footer.phtml');

这很有效,但我已经达到了一个我不希望main成为静态HTML的地步。我希望能够用PHP插入一些值。所以在我的Controller in indexAction中,我希望能够从我的数据库加载并将值放入index / main.phtml。有没有办法在不重组我的网站的情况下做到这一点?

如果没有办法,我可以这样做:

  1. 将代码放入布局的不同部分的功能,例如Layout() - &gt; header,Layout-&gt; footer。

  2. 将这些部分分成不同的文件,以便它们易于查找和整理,例如我的index / footer.phtml,index / main.phtml等。

  3. 不必将该代码放入引号中,将其转换为字符串以将其传递给Layout() - &gt;标题等。

  4. 非常感谢你们的帮助。

    -Ethan

5 个答案:

答案 0 :(得分:1)

这是一个想法:

  • 指定layout() - &gt;标头文件名而不是内容。
  • 将您的代码放入此文件中
  • 在布局文件中,include()或require()layout-&gt; header()。

由于您的布局页眉/页脚现在已经过解析,因此您可以像使用视图一样使用它们。

答案 1 :(得分:1)

->header中的$this->layout()->header响应段。您可以在操作中使用$this->_helper->viewRenderer->setResponseSegment('header');呈现部分响应。

答案 2 :(得分:1)

如果您使用

$this->layout()->header = $this->render('index/header.phtml');

它甚至会使用视图,因此在渲染标题时会保留所有变量。

我建议使用像

这样的东西
<?php echo ($header = $this->layout()->header)? 
      $header : $this->render('headerDefault.phtml'); ?>
布局文件中的

- 如果视图脚本没有覆盖它,它将从布局文件夹中呈现默认标题。

答案 3 :(得分:0)

您是否尝试过查看view helpers。它们是将视图逻辑构建为可重用和模块化代码的一种方式。在这种情况下,您将使用视图助手生成每个所需的段。因此,您的示例视图脚本看起来像

$this->Layout()->header = $this->header();
$this->Layout()->main = $this->main();
$this->Layout()->footer = $this->footer();

在include和require语句上使用视图助手的好处是框架可以处理所有文件处理和名称解析。 manual提供了有关如何设置路径和用法示例等的更多信息。

答案 4 :(得分:0)

帮助者很好。另一种选择是如上所述,将文件名放在页眉/页脚中 - 放置模板名称并使用$this->render($this->layout()->header))等等。这就像上面的include / require一样,但更加一致。