我必须在 zend 中创建一个主题,该主题具有不同的部分,例如侧栏中的登录部分、侧栏中的用户在线不同部分和主要内容区域。
我在想的是为每个部分创建一个不同的view.phtml文件并在zend layout上调用它。但我不明白如何在ZF2中调用layout.phtml中的多个视图。
我必须在 zend 中创建一个主题,该主题具有不同的部分,例如侧栏中的登录部分、侧栏中的用户在线不同部分和主要内容区域。
我在想的是为每个部分创建一个不同的view.phtml文件并在zend layout上调用它。但我不明白如何在ZF2中调用layout.phtml中的多个视图。
如果您不需要为每个小部件运行不同的操作,则可以拆分 HTML 并使用如下所示的包含:
<?php echo $this->doctype(); ?>
<html lang="en">
<head></head>
<body>
<?php include('includes/header.phtml'); ?>
<?php echo $this->content?>
<?php include('includes/footer.phtml'); ?>
</body>
</html>
如果您需要每个小部件在其背后具有不同的逻辑,则必须使用类似于 Michael Gallego 的优秀文章(由 Sam 提到)中解释的设置。
从您的布局调用<?= $this->render ('path/to/viewscript.phtml') ?>
(或$this->partial
参考http://filip.forrez.net/2010/04/16/zend-framework-partial-and-render/)以呈现多个视图脚本。
但是,请注意,您运行的所有视图脚本都将在原始控制器/动作的上下文中执行。如果你需要一个动作来将数据注入到一个重复出现的小部件的视图中,例如侧边栏,我通常会创建一个扩展类Zend_Controller_Action
,让我们调用它Anup_Controller_Action
,然后将我的所有视图控制器基于该类。在 的preDispatch
方法中Anup_Controller_Action
,然后将数据注入到视图中。例如:
public function Anup_Controller_Action extends Zend_Controller_Action
{
public function preDispatch ($options = null)
{
$this->view->loggedIn = true;
}
}
然后,当您<?= $this->render('shared/sidebar.phtml') ?>
从布局或视图脚本中调用时,您将始终可以访问该$this->loggedIn
变量。