给出一个html / javascript'小部件',它需要在使用之前定制某些字段。例如,css类ID必须是唯一的,因为窗口小部件可能在同一页面上出现多次。
假设我想将小部件的标记(js / html)保存为模板,以便我可以填写重新使用时需要自定义的值。
我知道Zend Framework的视图至少为您提供了部分功能,但每个视图通常都与特定的控制器相关联。鉴于可以从任何控制器创建此窗口小部件,是的仍然需要能够访问存储在控制器(或模型)中的某些属性。我应该在哪里放置小部件标记以及如何填写自定义值?
我可以创建一个可以在同一页面(多次出现)以及其他页面上重复使用的自定义视图吗?如果是这样,我该如何设置呢?
答案 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)
示例:
<?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
。