Разные макеты для разных представлений в одном приложении symfony

#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
  

Для получения дополнительной информации, пожалуйста, проверьте «Конфигурацию макета» по этой ссылке