【问题标题】:Zend Framework - get layout from viewZend Framework - 从视图中获取布局
【发布时间】:2012-06-06 05:00:07
【问题描述】:

-> 短版: 我想在我的视图中显示一个布局。我怎么称呼它?

-> 长版 我想在我的网站的某些(不是全部)页面中有一个表格框。这就像一个显示用户信息的小部件。 因此,我创建了一个布局 (myLayout.phtml),我在其中调用了一个帮助器 (MyHelper.php),它通过模型获取所有信息。 说到这里,现在我想从一个简单的角度来看使用这个布局来显示表格框。 如何在我的视图中调用该布局?

:)

附:我关注了这个很好的论坛(http://inhoo.net/tools-frameworks/zend/zend-framework-custom-view-helper/),但他们从主布局中调用了“myLayout.phtml”,而不是简单的查看:/

已解决

我没有把“myLayout.phtml”放在“layouts”文件夹中,而是放在“scripts”文件夹中。

./views/helpers/MyHelper.php

class Zend_View_Helper_MyHelper
{
    public function myHelper()
    {
        $mm = new MyModel();
        return $mm->myModel();
    }

}

./views/scripts/myViews/myHelperView.phtml(例如 myLayout.phtml)

<ul>
    <?php foreach($this->myHelper() as $item): ?>
        <li><?php echo $item ?></li>
    <?php endforeach; ?>
</ul>

在一个简单的视图中,我调用 myHelperView

渲染(“myViews/myHelperView.phtml”); ?>

对于我的一种文件顺序,我希望将最后一个脚本保留在布局文件夹中,但我不知道如何将其读取到该位置。 我希望这种方式是一个不错的选择...

【问题讨论】:

    标签: zend-framework layout view helper


    【解决方案1】:

    听起来您创建了一个自定义View Helper。如果是这种情况,那么在视图中显示它所需要做的就是拨打类似于&lt;?php echo $this-&gt;myViewHelperName() ?&gt; 的电话。

    您也可能对Placeholder Helper 感兴趣。使用占位符助手,您可以在布局中无条件地调用占位符,但仅将视图助手的内容从您想要的视图中分配给它。这样,如果您不为占位符分配任何内容,它将不会显示任何内容,但如果您调用视图助手并将内容分配给占位符,它将显示您想要的内容。

    希望对您有所帮助。

    【讨论】:

    • 是的。我所做的是一个自定义的 View Helper。我可以通过这种方式调用视图助手“$this->myHelper();”这给了我帮手的回报。这很好用。但我会在我的视图中显示“myLayout”(谁从 myHelper 获取信息并显示他的 html 代码)......而这个 partial('myLayout.phtml')?> 只返回致命错误……怎么了? :O
    【解决方案2】:

    听起来您的myLayout.phtml 文件是partial 脚本。您可以简单地将其加载到您的视图文件中,如下所示:

    <?php echo $this->partial('myLayout.phtml') ?>
    

    这与从布局中调用它相同。无论您是从布局还是视图中调用脚本都没有关系。布局只是一个特殊的视图脚本。

    【讨论】:

    • 我也是这么想的,但是这个 partial('myLayout.phtml') ?> 只有当我从布局中调用它而不是形成我的视图时才有效......出了什么问题? :O
    • 是的,这个 echo $this->partial("myLayout.phtml");给了我致命的错误。但是,如果我将此文件放在 application/scripts/myViewLayouts/ 文件夹中(而不是在 application/layouts/ 中)并以这种方式调用它,它就可以工作。 echo $this->partial("myViewLayouts/myHelper.phtml");我以这种方式在引导程序中设置布局文件夹: Zend_Layout::startMvc(array('layoutPath' => ROOT_DIR.'/application/views/layouts'));为什么?? :o
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多