Zend Layout占位符?

时间:2011-08-23 03:07:24

标签: zend-framework

我正在尝试在布局中创建一个具有占位符行为的侧边栏。我希望能够为每个控制器定义一个占位符的内容。因此,每个控制器都可以向侧边栏添加自定义内容,但无需在任何视图中定义它。

我对如何使用Zend_Layout解决这个问题感到困惑。有什么帮助吗?

3 个答案:

答案 0 :(得分:1)

我尝试过类似的东西。这是你可以做的。

将此类代码放在layout.phtml脚本文件中。靠近顶部的某个地方。你不必这样,但你知道'你正在使用什么占位符。在布局中执行此操作也是一个好主意,因为您可以将html div包装在此处,而不必在视图中担心它。观点可以只是担心内容。在此之后,您可以从控制器和视图向占位符添加内容。

$this->placeholder('blah');
$this->placeholder('sidebar');
$this->placeholder('blunk');

如果你不想在你的布局中创建它们,那么你可以在控制器中这样做,

$this->view->placeholder( 'sidebar');

现在,您可以在控制器或视图脚本中将内容放入其中。最好在视图中添加内容。

在布局中,您可以像这样回显占位符

echo $this->placeholder->( 'sidebar' );

在执行布局之前执行所有视图,以便视图创建的任何占位符都可供布局打印输出。

此外,控制器没有占位符。只有视图和扩展布局才有这样的占位符,所以你必须在某处声明它们。即使你在控制器中声明它们,它们仍然“属于”视图对象。

我不知道这有什么帮助,但祝你好运。告诉我你的想法。

答案 1 :(得分:0)

如何为每个控制器添加postDispatch()电话?

public function postDispatch()
{
    // code to populate/activate your placeholder
    $this->view->placeholder('xxx');
}

操作完成后将调用此函数。有关详细信息,请参阅Pre- and Post-Dispatch Hooks

答案 2 :(得分:0)

我刚刚实施了一个适用于大多数用途的解决方案。

我将所有placeholder.phtml文件存储在以下目录中: /视图/脚本/ _placeholder

在占位符中,我为每个具有占位符的Controller / Action创建目录(以及ROOT内容)。然后我为每个占位符创建一个文件。

e.g。占位符=侧边栏。 Controller = user / action = view

对于上面我们会在这里存储一个文件:

视图/脚本/ _placeholder /用户/视图/ sidebar.phtml

注意:在sidebar.phtml中,您需要添加:$ this->占位符(" sidebar") - > captureStart()和captureEnd();

如果插件看到此文件,它将呈现它。如果它找不到,那么它不会。

此外,该插件还会查找以下内容并首先将其拉出来:

视图/脚本/ _placeholder / sidebar.phtml

如果你愿意,我可以发布插件。

我唯一的问题是我现在想知道占位符中是否有任何数据。这样我就可以创建一些聪明的布局,并提供所需的布局。有谁知道怎么做?