#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');
...
}
...
}
Для получения дополнительной информации, пожалуйста, обратитесь к следующим ссылкам:
Комментарии:
1. Я хочу фильтровать только макет, я не хочу фильтровать представление. в приведенном выше случае он фильтрует как представление, так и макет, но мне нужно фильтровать только макет
Ответ №2:
Если нет необходимости сохранять тот же синтаксис, который вы описали выше, вы можете просто использовать стандартные Zend_View
помощники представления заполнителей: http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.initial.placeholder
Надеюсь, это поможет,