Symfony2中使用Twig的动态主题

时间:2011-07-24 12:45:35

标签: php symfony twig

我正在为Symfony2设计一个多租户应用程序,其中每个租户都可以拥有一个覆盖默认应用程序模板的主题。因此,主题将具有唯一的base.html.twig文件,并且可能包含或不包含覆盖默认模板文件的其他文件。

Symfony2已经检查app/Resources/views是否有覆盖捆绑模板的模板。但Symfony2假设app/Resources/views只有一组模板可以覆盖默认模板。我想动态检查租户的自定义主题文件夹中的各种覆盖模板,例如:

  
      
  1. 主题:   
        
    • app/Resources/views/theme1/base.html.twig
    •   
  2.   
  3. 主题:   
        
    • app/Resources/views/theme2/base.html.twig
    •   
    • app/Resources/views/theme2/SomeBundle/Resources/views/page.html.twig
    •   
  4.   

我不确定在Symfony2中构建它的最佳方法并在Twig中配置它。我应该将所有不同的主题堆放到app / Resources / views中的文件夹中吗?或者我应该创建一些处理一切的ThemeBundle?谢谢!

3 个答案:

答案 0 :(得分:3)

我有时间尝试做这样的事情......我看了liipthemebundle的代码,它需要配置很多......我看了很多网...然后我开始思考。 ..而我所看到的是:

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

在该页面中有很多有用的信息......但是我采用了一个简单的解决方案是这样的事实:symfony在app / Resources / [MyBundle]中查找模板和事物......我发现了 负责的服务就是file_locator服务......

所以,如果你定义一个参数,让我们在parameters.yml

中说皮肤

并将此行添加到您的app / config / config.yml

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

你有你的皮肤......

答案 1 :(得分:2)

我有同样的问题,我使用LiipThemeBundle来解决它。我花了几分钟来配置:

  • 使用composer安装捆绑包,然后将其激活。
  • 配置捆绑包(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"

中的文件 那很容易!! (和清洁)

答案 2 :(得分:1)

了解捆绑包:Symfony2 Bundle Structure, a use case - 捆绑包支持主题。

了解主题解析&级联:LiipThemeBundle - 带有要读取的代码,应该包含您要查找的所有内容。