2011-07-24 7 views
5

Estoy diseñando una aplicación multi-inquilino por Symfony2, donde cada inquilino puede tener un tema que anula las plantillas de aplicaciones por defecto. Por lo tanto, un tema tendrá un único archivo base.html.twig, y puede incluir o no otros archivos que sobrescriban los archivos de plantilla predeterminados.temas dinámicos en Symfony2 utilizando la ramita

Symfony2 ya comprueba app/Resources/views para las plantillas que anulan las plantillas del paquete. Pero Symfony2 asume que app/Resources/views tiene solo un conjunto de plantillas que pueden anular las plantillas predeterminadas. Quiero comprobar dinámicamente carpeta de tema personalizado de un inquilino por varias plantillas de primer orden, por ejemplo:

  1. Tema:
    • app/Resources/views/theme1/base.html.twig
  2. Tema:
    • app/Resources/views/theme2/base.html.twig
    • app/Resources/views/theme2/SomeBundle/Resources/views/page.html.twig

no estoy seguro de la mejor manera de estructurar esta en Symfony2 y configurarlo en la ramita. ¿Debería apilar todos los diferentes temas en carpetas en la aplicación/Recursos/Vistas? ¿O debería crear algún tipo de paquete de temas que maneje todo? ¡Gracias!

+0

¿Qué revelaron tus pruebas hasta ahora? – hakre

+0

Me inclino por poner los temas en el directorio de la aplicación/Recursos/vistas, pero no estoy seguro de cómo verificar dinámicamente el tema correcto. Además, en el futuro, podemos permitir que los usuarios editen los archivos twig de tema ... así que eso me hace pensar que deberían ser un paquete. – Acyra

Respuesta

1

Aprender acerca de los lotes: Symfony2 Bundle Structure, a use case - manojos temas de apoyo.

Obtenga más información sobre la resolución de tema & cascada: LiipThemeBundle - viene con el código para leer y debe tener todo lo que está buscando.

+0

Gracias por los enlaces. Eché un segundo vistazo a LiipThemeBundle, desafortunadamente requiere que liste todos los temas posibles en la configuración, que no es dinámica, y necesito apoyar cientos o miles de temas. – Acyra

+0

Código @DC: la configuración está cargada en alguna parte. Verifique lo que hace, haga lo mismo pero basado en su entrada dinámica. – hakre

3

tengo un mal momento tratando de hacer algo como esto ... miré el código de liipthemebundle y necesito mucha configuración ... busqué mucho en Internet ... y entonces comencé a pensar ... y lo que vi fue la siguiente:

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

hay un montón de información útil en esa página ... pero lo que me llevó a una solución simple fue este hecho: mirada Symfony en app/Resources/[mipaquete] para las plantillas y cosas ... y entonces descubrí que el servicio responsable de que este servicio es el file_locator ...

así, si se define un parámetro, digamos en la piel parameters.yml

y añadir líneas a su app/config/config.yml

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

tienes pieles tuya ...

1

tuve el mismo problema, y ​​utilicé LiipThemeBundle para resolverlo. me llevó algunos minutos configurar:

  • instalar el paquete con el compositor y activarlo.
  • config the bundle (app/config/config.yml)


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

  • copiar tres líneas a app/config/routing.yml


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

  • mover los archivos de recursos \ views \ a recursos \ themes \ \ Theme1

y listo !!

después de eso, cuando me hacen una plantilla en el controlador:



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

que utiliza el archivo que se encuentra en "Recursos \ themes \ Theme1 \ demo \ index.html.twig". cuando necesito cambiar a otro tema, en mi caso, debido a que algunas entidades de mi modelo tienen temas personalizados, puedo hacerlo con una sola línea de código:



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

y ahora utiliza el archivo que se encuentra en "recursos \ temas \ theme2 \ Demo \ index.html.twig "

that easy !! (y limpio)

Cuestiones relacionadas