Zend Frontpage调用了几个模块

时间:2011-02-07 18:26:03

标签: php zend-framework

我有点不高兴因为无法弄清楚如何做这么简单的事情。

使用Zend的第一步,所以我试图实现像CMS那样的事情,例如:

  • 有一个布局,定义占位符,如左,右,中心。
  • 然后我可以有一个菜单控制器,我会在左边加载它,右边是日期选择器等。

我的方法是定义layout.phtml

<?php 
/* @var $this Zend_View */ 
$this->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8');
$this->headTitle()->setSeparator(' - ');
$this->headTitle('Something');
?>

<?php echo $this->doctype() ?>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <?php echo $this->headMeta() ?>
        <?php echo $this->headTitle() ?>
        <?php echo $this->headScript() ?>
        <?php echo $this->headStyle() ?>
    </head>
    <body>
        <?php echo $this->placeholder('top') ?>
        <div id="main">

            <div id="content">
                <?php echo $this->layout()->content ?>
            </div>
            <?php echo $this->placeholder('footer') ?>
        </div>

    </body>
</html>

现在,当我转到页面时,它调用了IndexController。 Index中的内容将在$this->layout()->content右侧呈现?

如何在其他占位符中调用其他项目进行渲染?

例如:

如果我使用控制器中的init方法连接到数据库并获取所需的东西,以确定要在哪个占位符中呈现哪些内容,我必须在所有其他控制器中重复该内容。

有哪些可用方法?

1 个答案:

答案 0 :(得分:1)

您可以使用Action View Helper Action视图助手使视图脚本能够调度给定的控制器动作;然后返回调度后响应对象的结果。当特定操作可以生成可重复使用的内容或“小部件化”内容时,可以使用这些内容。

 // in your layout
 <?php echo $this->action('action', 'controller', 'module');?>

您也可以尝试ActionStack(行动助手) 在您将在堆栈中添加的控制器中设置新的内容密钥(默认密钥为“content”)。

// MenuController.php
public function init() {
    $this->_helper->layout->setContentKey('menu')
}


// layout.phtml
<?php echo $this->layout()->menu ?> //instead of $this->placeholder('menu')