Symfony2插件LiipThemeBundle

简介:

LiipThemeBundle

LiipThemeBundle可以让您为您的每个Bundle添加主题。该主题一般位于您的Bundle目录的 Resources/themes/<主题名>或正常的  Resources/views(如果没有找到的话)文件夹中。

安装

步骤1:下载 LiipThemeBundle

进入Symfony2.1.x的根目录,打开  composer.json 文件,在"require":选项中添加:
 
  1. "require": { 
  2.     ... , 
  3.     "liip/theme-bundle""dev-master" 
  4. }, 

然后运行composer脚本,下载 LiipThemeBundle

 
  1. php composer.phar update 

步骤2:启用 LiipThemeBundle

下载完成后,在内核中启用 LiipThemeBundle

 
  1. <?php 
  2. // app/AppKernel.php 
  3.  
  4. public function registerBundles() 
  5.     $bundles = array
  6.         // ... 
  7.         new Liip\ThemeBundle\LiipThemeBundle(), 
  8.     ); 

步骤3:导入 LiipThemeBundle 路由文件

 
  1. # app/config/routing.yml 
  2. liip_theme: 
  3.     resource: "@LiipThemeBundle/Resources/config/routing.xml" 
  4.     prefix: /theme 

配置

在配置文件中需要列出所有的主题列表及当前主题。注意,当前主题必须在主题列表中

 
  1. # app/config/config.yml 
  2. liip_theme: 
  3.     themes: ['web''tablet''phone'
  4.     active_theme: 'web' 

可选配置项

可以基于 Cookie 来选择当前主题:

 
  1. # app/config/config.yml 
  2. liip_theme: 
  3.     cookie: 
  4.         name: NameOfTheCookie 
  5.         lifetime: 31536000 # 1 year in seconds 
  6.         path: / 
  7.         domain: ~ 
  8.         secure: false 
  9.         http_only: false 

也可以基于用户代理自动设置主题 Cookie:

 
  1. # app/config/config.yml 
  2. liip_theme: 
  3.     autodetect_theme: true 

 autodetect_theme 选项也可以设为 DIC 服务 ID,该服务需要实现 Liip\ThemeBundle\Helper\DeviceDetectionInterface 接口。

如果不想让用户自己改变主题,可以停用该 Bundle 的控制器:

 
  1. # app/config/config.yml 
  2. liip_theme: 
  3.     load_controllers: false 

主题的层级顺序

Bundle 在应用模板时是按以下层级顺序进行的(让我们先假设有一个名为 phone 的主题,其模板文件为 BundleName/Resources/template.html.twig @BundleName/Resources/template.html.twig):

  1. 覆写主题目录: app/Resources/themes/phone/BundleName/template.html.twig
  2. 覆写视图目录: app/Resources/BundleName/views/template.html.twig
  3. Bundle的主题目录: src/BundleName/Resources/themes/phone/template.html.twig
  4. Bundle的视图目录: src/BundleName/Resources/views/template.html.twig

举个例子,如果您想将一些自定义的 TwigBundle 错误页面集成到您的主题架构中,那么您将需要使用这个目录结构: app/Resources/themes/phone/TwigBundle/Exception/error404.html.twig

当使用全局范围的模板时,将使用下列顺序(如模板文件为 ::template.html.twig 的名为 phone 的主题):

  1. 覆写主题目录:  app/Resources/themes/phone/template.html.twig
  2. 覆写视图目录:  app/Resources/views/template.html.twig

改变主题的层级顺序

您可以通过一些配置命令来改变层级顺序: path_patterns.app_resource  、  path_patterns.bundle_resource 和 path_patterns.bundle_resource_dir 。 如:

 
  1. # app/config/config.yml 
  2. liip_theme: 
  3.     path_patterns: 
  4.         app_resource: 
  5.             - %%app_path%%/themes/%%current_theme%%/%%template%% 
  6.             - %%app_path%%/themes/fallback_theme/%%template%% 
  7.             - %%app_path%%/views/%%template%% 
  8.         bundle_resource: 
  9.             - %%bundle_path%%/Resources/themes/%%current_theme%%/%%template%% 
  10.             - %%bundle_path%%/Resources/themes/fallback_theme/%%template%% 
  11.         bundle_resource_dir: 
  12.             - %%dir%%/themes/%%current_theme%%/%%bundle_name%%/%%template%% 
  13.             - %%dir%%/themes/fallback_theme/%%bundle_name%%/%%template%% 
  14.             - %%dir%%/%%bundle_name%%/%%override_path%% 
层级顺序通配符

占位符 说明 示例
%app_path% 应用程序Path where application located app
%bundle_path% Bundle所在目录 src/Vendor/CoolBundle/VendorCoolBundle
%bundle_name% Bundle名 VendorCoolBundle
%dir% 首先查找的目录  
%current_theme% 当前激活的主题名  
%template% 模板名 view.html.twig
%override_path% 同上,只是带视图目录 views/list.html.twig

切换当前主题

对于这个问题,可参见 ThemeRequestListener.

如果在请求初期没有模板被渲染,您可以使用主题服务,从而主地改变主题:

 
  1. $activeTheme = $container->get('liip_theme.active_theme'); 
  2. echo $activeTheme->getName(); 
  3. $activeTheme->setName("phone"); 

常见问题

Assetic:dump 不检查 Resources/{theme}/views 目录:

当使用 assetic:dump 命令进行资源转储时, assetic 只检查用以生成资源的 Resources/views 目录,它并不检查 Resources/{theme}/views 目录。

当前最简单的解决办法:既然问题出在 assetic 不扫描主题目录,那么将 assetic 区块放入 Bundle/Ressources/views 目录中的模板,并从主题模板中包含它。



本文转自 firehare 51CTO博客,原文链接:http://blog.51cto.com/firehare/1072438,如需转载请自行联系原作者

相关文章
|
2月前
|
测试技术 PHP 数据库
深入解析PHP框架:Symfony框架详解与应用
📚 Symfony框架深度解析:模块化设计提升开发效率,性能优越,灵活性高,支持MVC模式。探索控制器、路由、模板(如Twig)、服务容器、事件调度器等核心概念。还包括表单处理、数据库集成( Doctrine ORM)、安全组件、国际化支持及调试工具。使用Symfony CLI快速创建应用,内置PHPUnit测试支持。开始你的高质量Web开发之旅吧!
26 2
|
2月前
|
存储 缓存 安全
PHP框架详解 - symfony框架
PHP框架详解 - symfony框架
|
3月前
|
前端开发 PHP 数据库
PHP框架详解之Symfony框架
在现代Web开发中,PHP作为一种灵活且功能强大的编程语言,广泛应用于各种Web应用程序的开发中。为了提高开发效率、代码的可维护性和可扩展性,开发者通常会选择使用框架来构建应用程序。在众多PHP框架中,Symfony以其强大的功能和灵活性脱颖而出,成为开发者们的首选之一。本文将详细介绍Symfony框架,包括其历史、核心功能、组件、安装和使用方法,以及在实际开发中的应用案例。
30 2
|
4月前
|
资源调度 JavaScript 开发者
插件使用:扩展Vue功能与第三方插件
【4月更文挑战第23天】Vue凭借其轻量级和灵活性在Web开发中备受青睐,而插件则进一步增强了其功能。本文探讨了如何在Vue项目中选择、安装、配置和管理插件,以适应不同需求。要点包括:选择可靠且兼容的插件,使用npm或yarn安装,根据文档配置,以及注意性能影响。明智使用插件能提升开发效率,但需避免过度依赖,确保与项目目标和技术栈匹配。不断学习新插件,可保持技术领先并优化项目实践。
41 0
|
开发框架 JavaScript 前端开发
SpringBoot + Ant Design Pro Vue实现动态路由和菜单的前后端分离框架
Ant Design Pro Vue默认路由和菜单配置是采用中心化的方式,在 router.config.js统一配置和管理,同时也提供了动态获取路由和菜单的解决方案,并将在2.0.3版本中提供,因到目前为止,官方发布的版本为2.0.2,所以本文结合官方提供的解决方案结合SpringBoot后台权限管理进行修改,搭建一套完整的SpringBoot +Vue前后端分离框架。
1011 0
|
移动开发 前端开发 JavaScript
Blazor_WASM之3:项目结构
Blazor WebAssembly项目模板可选两种,Blazor WebAssemblyAPP及Blazor WebAssemblyAPP-Empty
|
前端开发
symfony2框架配置页面
symfony2框架配置页面
122 0
symfony2框架配置页面
symfony框架Twig模板语言的使用
symfony框架Twig模板语言的使用
140 0
symfony框架Twig模板语言的使用
|
资源调度 前端开发 JavaScript
wp2vite的妙用,让webpack项目支持vite
TNTWeb - 全称腾讯新闻前端团队,组内小伙伴在Web前端、NodeJS开发、UI设计、移动APP等大前端领域都有所实践和积累。 目前团队主要支持腾讯新闻各业务的前端开发,业务开发之余也积累沉淀了一些前端基础设施,赋能业务提效和产品创新。
957 0
wp2vite的妙用,让webpack项目支持vite
下一篇
DDNS