Создание более гибкого представления в Zend Framework - PullRequest
1 голос
/ 31 января 2010

Имеется html / javascript 'widget', для которого необходимо настроить определенные поля перед использованием. Например, идентификаторы класса css должны быть уникальными, так как виджет может появляться более одного раза на одной странице.

Допустим, я хочу сохранить разметку (js / html) виджета в качестве шаблона, чтобы я мог заполнить значения, которые необходимо настроить во время повторного использования.

Я знаю, что представления Zend Framework предоставляют вам хотя бы часть этой функциональности, но каждое представление обычно связано с определенным контроллером. Учитывая, что этот виджет может быть создан из любого контроллера, да все же необходимо иметь возможность доступа к некоторым свойствам, хранящимся в контроллере (или модели). Где я должен разместить разметку виджета и как мне затем заполнить пользовательские значения?

Могу ли я создать собственное представление, которое можно повторно использовать на одной и той же странице (появляться более одного раза), а также на других страницах? Если да, то как мне это настроить?

Ответы [ 2 ]

3 голосов
/ 31 января 2010

Похоже, вам нужен 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 голос
/ 31 января 2010

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')); ?>

В вашем скрипте частичного просмотра (part.html) у вас будет доступ к $this->css_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...