#templates #layout #symfony1
#шаблоны #макет #symfony1
Вопрос:
У меня есть проект symfony 1.4 с единственным приложением frontend
. Это приложение имеет единый модуль book
с одним действием index
.
У меня есть два шаблона для действия с индексом: indexSuccess.mobile.php
и indexSuccess.html.php
. Действие установит формат таким образом, чтобы вызывать один или другой из этих шаблонов.
Я хочу использовать разные макеты для каждого из этих двух шаблонов: layout.mobile.php
и layout.html.php
. apps/frontend/modules/book/config/view.yml
Файл используется для указания того, какой макет использовать, а также какие файлы CSS и JavaScript включены в макет.
Поскольку на модуль может приходиться только один view.yml
файл, как мне настроить view.yml
так, чтобы он indexSuccess.mobile.php
использовал layout.mobile.php
и загружал соответствующие CSS и JS файлы, в то время как indexSuccess.html.php
использует layout.html.php
и загружает свои соответствующие CSS и JS файлы?
Я хочу использовать макеты, поскольку в конечном итоге добавлю в этот модуль еще много действий / шаблонов.
Ответ №1:
Для достижения этого вы можете использовать setLayout()
метод вашего действия. ОБНОВИТЬ для файлов css и js вы также можете использовать действие (вызвать sfWebResponse::addStylesheet()
и sfWebResponse::addJavascript()
). Если вы абсолютно хотите сделать все это из view.yml
, лучшим для вас было бы изменить название шаблона (верните другой суффикс в вашем действии)
Комментарии:
1. Здесь объясняется, как определить макет для определенного действия, но это не отвечает на мой вопрос о том, как вы можете использовать один файл
view.yml
для настройки более чем одного макета. Помните, что в этомview.yml
содержится информация о конфигурации макета, например, какие таблицы стилей включать, какие файлы JavaScript включать и т.д.2. @rlandster: Я думаю, что невозможно настроить макет для каждой
sf_format
основы изview.yml
, отсюда и мое решение
Ответ №2:
Я не тестировал, но, похоже, это делает свое дело:
<?php
// in indexSuccess.mobile.php
decorate_with('layout.mobile');
Ответ №3:
Возможно, я очень опаздываю с ответом на этот вопрос, но подумал, что это может помочь кому-то из-за их невезения, если их попросят поработать над этими устаревшими версиями, такими как symfony 1.4, как я.
Вы можете указать файл макета для каждого действия. Итак, решение состоит в том, чтобы поместить макет и my_layout в apps/frontend/templates
каталог и определить конфигурацию макета внутри apps/frontend/modules/book/config/view.yml
следующим образом:
indexSuccess:
layout: my_layout
mobileSuccess:
layout: layout
Для получения дополнительной информации, пожалуйста, проверьте «Конфигурацию макета» по этой ссылке