Zend framework рендеринг пользовательских заполнителей в макете

#zend-framework #layout #render #placeholder

#zend-framework #макет #рендеринг #плейсхолдер

Вопрос:

У меня есть несколько пользовательских заполнителей в файле макета, например [Region_Contents], теперь я хочу заменить эти заполнители своим пользовательским html, поскольку макет отображается так, как будто вместо отображения [Region_Contents] он может отображать

Привет, это тестовый блок

есть ли какой-нибудь способ сделать это?

Ответ №1:

Для этого вы можете использовать фильтры просмотра. Сначала мы должны реализовать Zend_Filter_Interface следующим образом:

 class My_View_Filter_PlaceholderReplacer implements Zend_Filter_Interface
{
    public function filter($value) 
    {
        return str_replace('[Region_Contents]', 'Hello this is test block', $value);
    }
}
  

В приведенном выше коде $value содержит строковое представление представления непосредственно перед его отображением. Все, что возвращается описанной выше функцией, будет использоваться ZF при рендеринге представления. Обратите внимание, что мы используем str_replace вместо preg_replace по соображениям производительности.

Далее нам нужно указать ZF использовать фильтр, который мы только что создали. Вы можете сделать это в начальной загрузке.

 class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
  protected function _initViewSettings()
  {
    $this->bootstrap('view');
    $view = $this->getResource('view');
    $view->addFilterPath('My/View/Filter', 'My_View_Filter');
    $view->setFilter('PlaceholderReplacer');
    ...
  }
  ...
}
  

Для получения дополнительной информации, пожалуйста, обратитесь к следующим ссылкам:

Руководство по Zend

Zend Framework и перевод

Комментарии:

1. Я хочу фильтровать только макет, я не хочу фильтровать представление. в приведенном выше случае он фильтрует как представление, так и макет, но мне нужно фильтровать только макет

Ответ №2:

Если нет необходимости сохранять тот же синтаксис, который вы описали выше, вы можете просто использовать стандартные Zend_View помощники представления заполнителей: http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.initial.placeholder

Надеюсь, это поможет,