Zend Framework: в чем разница между частичными и заполнителями - PullRequest
8 голосов
/ 09 февраля 2012

В Zend Framework Кто-нибудь может объяснить разницу между частичным и заполнителем?

Насколько я понимаю, можно отобразить конкретный шаблон / контейнер, используя как заполнители, так и частичные.

В каких условиях следует использовать частичное и какой сценарий оптимально использовать для заполнителей?

Ответы [ 2 ]

8 голосов
/ 09 февраля 2012

Все довольно просто, плашдолер используется для сохранения данных между представлениями и макетами, а частичные - в определенных представлениях для выполнения конкретных задач.См. Эти выдержки из справочника.

77.4.1.6. Помощник заполнителя: помощник представления заполнителя используется для сохранения содержимого между сценариями представления и экземплярами представления.Он также предлагает некоторые полезные функции, такие как агрегирование содержимого, захват содержимого сценария представления для последующего использования и добавление к содержимому пре- и пост-текста (и пользовательских разделителей для агрегированного содержимого).

77.4.1.5. Помощник по частям: Помощник по частичным представлениям используется для рендеринга указанного шаблона в пределах его собственной переменной области.Основное использование - для повторно используемых фрагментов шаблона, с которыми вам не нужно беспокоиться о конфликтах имен переменных.Кроме того, они позволяют вам указывать частичные сценарии просмотра из определенных модулей.

Вот простой пример заполнителя, который звучит так, как вы хотите.(для сохранения данных)

<?php
//this is placed in my layout above the html and uses an action helper
//so that a specific action is called, you could also use view helpers or partials
$this->layout()->nav = $this->action('render', 'menu', null,
        array('menu' => $this->mainMenuId))
?>


    <div id="nav">
        //Here the placeholder is called in the layout
        <?php echo $this->layout()->nav ?>&nbsp;
    </div>

в этом случае идентификаторы меню устанавливаются в начальной загрузке, но это не просто, просто:

protected function _initMenus() {

        $view = $this->getResource('view');
        $view->mainMenuId = 4;
        $view->adminMenuId = 5;
    }

[EDIT]

Я думаю, что лучший пример заполнителя может быть в порядке.Этот заполнитель представляет собой небольшую форму поиска, которую я использую в нескольких действиях на нескольких контроллерах в разных конфигурациях.

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

Если вы всегда используете одну и ту же настройку или интересуетесь этим больше, чем я, это можно настроить как плагин.

//in the controller 
public function preDispatch() {
        //add form
        $searchForm = new Application_Form_Search();
        $searchForm->setAction('/admin/music/update');
        $searchForm->query->setAttribs(array('placeholder' => 'Search for Artist',
            'size' => 27,
        ));
        $searchForm->search->setLabel('Find an Artist\'s work.');
        $searchForm->setDecorators(array(
            array('ViewScript', array(
                    'viewScript' => '_searchForm.phtml'
            ))
        ));
        //assign form to placeholder
        $this->_helper->layout()->search = $searchForm;
    }

Я использую заполнитель в моем макете (могутакже будет использоваться в любом скрипте представления).Форма поиска отображается, когда заполнитель имеет значение, и не отображается, когда заполнитель не имеет значения.

//in the layout.phtml
<?php echo $this->layout()->search ?>

и просто для завершения, вот частичное, которое форма использует в качестве декоратора видимости.

<article class="search">
    <form action="<?php echo $this->element->getAction() ?>"
          method="<?php echo $this->element->getMethod() ?>">
        <table>
            <tr>
                <th><?php echo $this->element->query->renderLabel() ?></th>
            </tr>
            <tr>
                <td><?php echo $this->element->query->renderViewHelper() ?></td>
            </tr>
            <tr>
                <td><?php echo $this->element->search ?></td>
            </tr>
        </table> 
    </form>
</article>

Этот пример действительно должен показать разницу между частичным и заполнителем.

1 голос
/ 09 февраля 2012

Я думаю, что здесь вам может быть полезнее либо пользовательский помощник вида, возможно, расширяющий существующий класс Zend_View_Helper_FormSelect , либо создание пользовательского элемента Zend Form , который соответствует вашим потребностям,В качестве альтернативы, вспомогательный скрипт, который находится в общем месте, может быть лучшим выбором.

...