Zend Framework - “包含”的布局最佳实践

时间:2009-11-19 12:57:22

标签: php zend-framework

我对Zend很新。我只是想知道如何建模我的网站的布局/结构。我的网站将有一个用户个人资料部分,管理部分,以及该网站的默认视图。

对于admin和profile,我将在页眉和页脚中包含自定义元素,否则我想默认为通用页眉/页脚。

我希望能够将完全自定义的皮肤与默认视图分开,我应该如何构建东西?

到目前为止,我已经在名为application/的{​​{1}}中创建了一个目录。我修改了application.ini文件,因此它解释了:

layouts

所以我的默认布局视图现在存在于resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts" 中,我在此layout.phtml文件中嵌入了页眉和页脚,但我想将它们删除并将它们放在单独的文件中。

有人可以协助我提出这个结构吗?所以要重新迭代我想要一个自定义默认布局,自定义管理布局,自定义用户配置文件布局,并且对于所有3个布局我想要可自定义的标题/页脚“包括”但我不知道这是如何在Zend中正确完成的,因为我习惯于包含文件。

4 个答案:

答案 0 :(得分:9)

目录结构:

/application
  /layouts
    /scripts
      /layout.phtml
      /profile.phtml
      /admin.phtml
      /_header.phtml
      /_footer.phtml

layout.phtml:

<?php echo $this->doctype('HTML4_STRICT') ?>
<html> 
<head>  
  <title>Bah</title>
</head> 
<body>
  <?php echo $this->render('_header.phtml') ?>
  <?php echo $this->layout()->content ?>
  <?php echo $this->render('_footer.phtml') ?>
</body>
</html>

profile.phtml:

<?php echo $this->doctype('HTML4_STRICT') ?>
<html> 
<head>  
  <title>Profile</title>
</head> 
<body>
  <!-- profile header -->
  <?php echo $this->layout()->content ?>
  <!-- profile footer-->
</body>
</html>

FooController.php:

profileAction()
{
    // do stuff
    $this->_helper->layout->setLayout('profile');
}

此方法允许您更改不同布局的整个页面结构(管理员突然需要侧边栏!)。您需要权衡一些代码重复,以提高灵活性和可维护性。

如果这对您来说不重要,那么视图助手也可以工作(查询前端控制器以查明请求是来自管理员还是配置文件操作,切换)。但是,根据我的喜好,这种类型的逻辑太过涉及不属于视图。

答案 1 :(得分:1)

要为站点的各个部分设置不同的布局/配置,我使用具有以下模块设置的模块。 Module Config

[编辑]

目录结构:

/application
    /forms
    /models
    /modules
        /admin
            /config
            /contollers
            /layout
            /views
        /default
            /config
            /contollers
            /layout
            /views

答案 2 :(得分:1)

如果视图助手是复杂的,请使用具体视图助手。如果它们像<h1>my title</h1>一样简单,则使用局部视图助手来渲染模板。

答案 3 :(得分:-1)

我使用的实现如下:

在每个布局phtml文件中(默认,管理员等)

我用:

<?= $this->action('header', 'page', 'default') ?>
<?= $this->layout()->content ?>
<?= $this->action('footer', 'page', 'default') ?>

所以在我的页面控制器中我可能有一个名为“headerAction”或“adminHeaderAction”的动作,它什么都不做(或者实际上可以执行特定任务)但返回一个header.phtml(我可以自定义该布局的标题信息) 。然后,我可以自定义与内容分开的页眉和页脚。

在我的控制器中,我只需要设置合适的布局:

$this->_helper->layout->setLayout('adminLayout');