在Zend Framework中创建更灵活的视图

时间:2010-01-31 08:51:37

标签: php model-view-controller zend-framework

给出一个html / javascript'小部件',它需要在使用之前定制某些字段。例如,css类ID必须是唯一的,因为窗口小部件可能在同一页面上出现多次。

假设我想将小部件的标记(js / html)保存为模板,以便我可以填写重新使用时需要自定义的值。

我知道Zend Framework的视图至少为您提供了部分功能,但每个视图通常都与特定的控制器相关联。鉴于可以从任何控制器创建此窗口小部件,是的仍然需要能够访问存储在控制器(或模型)中的某些属性。我应该在哪里放置小部件标记以及如何填写自定义值?

我可以创建一个可以在同一页面(多次出现)以及其他页面上重复使用的自定义视图吗?如果是这样,我该如何设置呢?

2 个答案:

答案 0 :(得分:3)

听起来你需要ViewHelper http://framework.zend.com/manual/en/zend.view.helpers.html。创建一个自定义帮助程序,它将从模型中获取数据并只是输出它。这种方式它不依赖于任何控制器,可以在布局或任何视图脚本中调用。例如:

// views/helpers/Widget.php
class Zend_View_Helper_Widget extends Zend_View_Helper_Abstract
{
protected $_model = null;

protected $_view = null;

public function widget()
{
    $data = $this->_getDataFromModel();

    return $this->_view->partial('widget.phtml', array('data' => $data));
}

public function setView(Zend_View_Interface $view)
{
    if($this->_view === null) {
        $this->_view = $view;
    }

    return $this->_view;
}

protected function _getDataFromModel()
{
     $this->_model = $this->_getModel();
     return $this->_model->getDataForWidget();
}

protected function _getModel()
{
     if($this->_model === null) {
         $this->_model = new Model_Widget(); // or whatever it's called
     }
     return $this->_model;
}

部分脚本:

// views/scripts/widget.phtml
<div class="widget-class"><?php echo $this->data; ?></div>

如果您在观看中需要它,请将其称为<?php echo $this->widget(); ?>

请注意,我在单独的部分视图脚本中渲染窗口小部件,只是为了避免在帮助器本身中使用html / css。

希望这有助于您入门:)

答案 1 :(得分:1)

Zend_View_Helper_Partial

示例:

<?php echo $this->partial('partial.phtml', array(
   'css_id' => 'foobar')); ?>

从任何其他模块运行:

<?php echo $this->partial('partial.phtml', 'partials_module', array(
   'css_id' => 'foobar')); ?>

在部分视图脚本(partial.html)中,您可以访问$this->css_id