如何实现在Zend框架侧边栏(How to implement a sidebar in Zend

2019-07-31 19:38发布

如何实现在Zend框架侧边栏? 我知道,我可以用一个占位符或Zend_Layout的类似的东西,但我怎么自动生成在我的控制器侧边栏的代码,而不必调用每个控制器内的侧边栏类? 我的设置如下

Application
- modules
  - blog
  - other modules

我只是想为我的博客模块的侧栏。

我发现这个http://www.zfforums.com/zend-framework-components-13/model-view-controller-mvc-21/how-layout-sidebar-etc-2677.html ,但我不明白的最后部分“刚注入你的布局,前端控制器注册它......”

Answer 1:

你可能只是在你的控制器,这使得该工具条的一个动作和视图。

从布局的博客模块,您只要致电:

<? echo $this->action('action','controller','module',array('optionalparams'=>1); ?>

你想上哪儿有它的位置。 因此,一个调用一个动作。



Answer 2:

而不是用行动堆栈和action()视图助手,你可以呈现“局部视图脚本”,包括你的侧边栏元素。

# in your layout.phtml
<div id="sidebar">
    <?php echo $this->render('blog/_sidebar.phtml'); /*relative to your view scripts directory*/ ?>
</div>

# in blog/_sidebar.phtml
<div id="blog_categories">
    <?php foreach ($this->categories as $category): ?>
        <?php echo $category->name; ?>
    <?php endforeach; ?>
</div>

render()视图助手用于呈现另一视图脚本的内容。 它具有相同的范围,因为所有其他视图脚本,所以如果有分配给视图的任何变量,他们将提供给您的部分。 因此,在上面的例子中,类别变量的控制器设定。

还有另一种被称为视图助手partial()视图助手。 此功能是一个小更昂贵,因为它会创建自己的变量范围。 换句话说,没有当前视图的变量将可用。 你将有一个干净的石板一起工作,这意味着你必须在你需要的任何变量传递:

# in your layout.phtml
<div id="sidebar">
    <?php echo $this->partial('blog/_sidebar.phtml', array('categories2'=>$this->categories)); ?>
</div>

# in blog/_sidebar.phtml
<div id="blog_categories">
    <?php foreach ($this->categories2 as $category): ?>
        <?php echo $category->name; ?>
    <?php endforeach; ?>
</div>

用我自己,我没有找到partial()很多时候,因为它是比较昂贵的,我很少需要创建一个单独的上下文。

至于在侧栏部分(设置用于变量$this->categories在本例中),我已经采用了一些这取决于特定的问题的不同方法。 如果是具体到一个控制器动作,我会写的代码,并在视图脚本指派方式:

# controller
public function somethingAction()
{
    $this->view->categories = $this->_getCategoriesForThisParticularAction();
    // other controller code
}

如果我的代码是更通用控制器的所有动作,我将利用控制器的preDispatch()的功能。 如果是更通用的多个控制器,我把代码中init()我的基本控制器(控制器最我的控制器扩展)的。

有时候,我甚至不把代码在我的控制器。 如果它足够简单,我只是坚持在部分代码。 如果它是一个有点复杂,我将其移动到一个视图助手。 这可能会破坏MVC模式,但我认为这真的取决于具体情况,以确定最佳位置。



Answer 3:

如果您正在使用Zend_Layout的,只是操作视图助手为Rufinus该增加的侧栏。

在布局脚本:

<div id="sidebar">
<?php echo $this->action('action', 'controller', 'module', array('optionalparams'=>1)); ?>
</div>
<div id="content">
<?php echo $this->layout()->content; ?>
</div>

这应该符合张贴在你的问题的要求。



文章来源: How to implement a sidebar in Zend Framework