Динамические темы в Symfony2 с использованием Twig - PullRequest
5 голосов
/ 24 июля 2011

Я разрабатываю мультитенантное приложение для Symfony2, где у каждого арендатора может быть тема, которая переопределяет шаблоны приложений по умолчанию. Таким образом, тема будет иметь уникальный файл base.html.twig и может включать или не включать другие файлы, которые переопределяют файлы шаблонов по умолчанию.

Symfony2 уже проверяет app/Resources/views на наличие шаблонов, которые переопределяют шаблоны пакета. Но Symfony2 предполагает, что app/Resources/views имеет только один набор шаблонов, которые могут переопределять шаблоны по умолчанию. Я хочу динамически проверять папку пользовательских тем клиента на наличие различных шаблонов переопределения, например ::10000

  1. Тема:
    • app/Resources/views/theme1/base.html.twig
  2. Тема:
    • app/Resources/views/theme2/base.html.twig
    • app/Resources/views/theme2/SomeBundle/Resources/views/page.html.twig

Я не уверен, что лучший способ структурировать это в Symfony2 и настроить его в Twig. Стоит ли мне складывать все разные темы в папки в app / Resources / views? Или я должен создать какой-то ThemeBundle, который обрабатывает все? Спасибо!

Ответы [ 3 ]

3 голосов
/ 12 декабря 2013

у меня плохое время, когда я пытался сделать что-то подобное ... я посмотрел код liipthemebundle и мне нужно было много настроек ... я много смотрел в интернете ... а потом начал думать. .. и то, что я увидел, было:

http://symfony.com/doc/current/book/templating.html#overriding-bundle-templates

там много полезной информации на этой странице ... но что привело меня к простому решению, так это то, что symfony посмотрел в app / Resources / [MyBundle] шаблоны и прочее ... и я узнал что служба, ответственная за это, это служба file_locator ...

итак, если вы определите параметр, скажем, скин в parameters.yml

и добавьте эти строки в ваше приложение / config / config.yml

file_locator:
        class: %file_locator.class%
        arguments: [@kernel,%kernel.root_dir%/Resources/skins/%skin%]

у тебя есть свои скины ...

2 голосов
/ 22 августа 2014

У меня была такая же проблема, и я использовал LiipThemeBundle для ее решения. мне потребовалось несколько минут для настройки:

  • установите пакет с composer и активируйте его.
  • config the bundle (app / config / config.yml)


    liip_theme:
        themes: ['theme1', 'theme2', 'theme3']
        active_theme: 'theme1'

  • скопировать три строки в app / config / routing.yml


    liip_theme:
        resource: "@LiipThemeBundle/Resources/config/routing.xml"
        prefix: /theme

  • переместить файлы из Resources \ views \ в Resources \ themes \ theme1 \

и готово !!

после этого, когда я отрисовываю шаблон в контроллере:



    return $this->render('AcmeDemoBundle:Demo:index.html.twig');

он использует файл, расположенный в "Resources \ themes \ theme1 \ Demo \ index.html.twig". когда мне нужно переключиться на другую тему, в моем случае, потому что некоторые объекты моей модели имеют собственные темы, я могу сделать это с помощью одной строки кода:

 

    $this->get('liip_theme.active_theme')->setName('theme2');
    return $this->render('AcmeDemoBundle:Demo:index.html.twig');

и теперь использует файл, расположенный в "Resources \ themes \ theme2 \ Demo \ index.html.twig"

это просто !! (и чисто)

1 голос
/ 24 июля 2011

Узнайте о пакетах: Symfony2 Bundle Structure, пример использования - Связки поддерживают темы.

Узнайте о разрешении и каскаде тем: LiipThemeBundle - поставляется с кодомпрочитайте и должны иметь все, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...