theme_support是Matt McCray
写的一个为Rails应用增加类似Typo的theme管理的插件,功能类似于Typo,支持liquid
和erb模板。
安装
$ script/plugin install http://mattmccray.com/svn/rails/plugins/theme_support
使用
1. 生成主题
$ script/generate theme [theme_name]
这将在你的Rails应用的跟目录下创建一个themes文件夹:
app_root
themes/
[theme_name]
layouts/ <- layout .rhtml or .liquid templates
images/
stylesheets/
javascripts/
views/ <- you can override application views
about.markdown
preview.png
2. 然后你需要将原本在app/views目录下的模板文件移到themes/[theme_name]/views下,同时将layouts下的文件也移到模板中去,当然还有相关的CSS,JS以及图片等等。
3. 同时你需要将主题中的JS,CSS以及Images引用改为如下路径:
Image: /theme/:theme_name/images/:image_file
JS: /theme/:theme_name/javascripts/:image_file
CSS: /theme/:theme_name/stylesheets/:image_file
如果使用erb,你可以使用下面的helper:
- theme_image_tag(filename)
- theme_image_path(filename)
- theme_javascript_include_tag(filename)
- theme_javascript_path(filename)
- theme_stylesheet_link_tag(filename)
- theme_stylesheet_path(filename)
liquid也有一个helper:themeitem
<link rel=”StyleSheet” href=”{% themeitem %} default.css {% endthemeitem %}” />
它被转换为:
<link rel=”StyleSheet” href=”/themes/[current_theme]/stylesheets/default.css” />
4. 指定要使用的主题:
class ApplicationController
layout 'fire'
theme 'demo'
end
你也可以在filter中根据当前用户的设置来动态决定使用那个theme:
class ApplicationController
before_filter :set_theme
def set_theme
theme current_user.theme
end
end
Rails 2.1
如果你使用Rails 2.1,那么你还得多做一点工作:
1. 首先修改routeset_ex.rb,将draw和create_theme_routes改为如下定义:
def draw
old_routes = @routes
@routes = []
begin
create_theme_routes
yield Mapper.new(self)
install_helpers
rescue
@routes = old_routes
raise
end
end
def create_theme_routes
# Added patch from D.J. Vogel that changes :filename
to *filename
… allowing sub-folders
add_named_route ‘theme_images’, “/themes/:theme/images/*filename”, :controller=>’theme’, :action=>’images’
add_named_route ‘theme_stylesheets’,
“/themes/:theme/stylesheets/*filename”, :controller=>’theme’,
:action=>’stylesheets’
add_named_route ‘theme_javascript’, “/themes/:theme/javascript/*filename”, :controller=>’theme’, :action=>’javascript’
add_route “/themes/*whatever”, :controller=>’theme’, :action=>’error’
end
2. 然后修改actionview_ex.rb,将render_file改为如下定义:
def render_file(template_path, use_full_path = true, local_assigns = {})
["#{RAILS_ROOT}/themes/#{controller.current_theme}/views", # for normal views
"#{RAILS_ROOT}/themes/#{controller.current_theme}" # for layouts
].each do |prefix|
@finder.prepend_view_path(prefix)
end
__render_file(template_path, use_full_path, local_assigns)
end
3. 如果还有问题,欢迎留言,可能我漏掉了什么。
相关推荐
### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助...随着对Rails的深入了解,你将会发现更多高级特性和应用场景,为实际项目开发提供更多可能性。
安装将此行添加到应用程序的 Gemfile 中: gem 'is_rateable' 然后执行: $ bundle或者自己安装: $ gem install is_rateable入门添加评级表和初始化程序。 $ rails generate is_rateable:install$ rake db:migrate...
那是在 2011 年,邮戳宝石从那时起为支持 Rails API。 我最近决定弃用这个 gem 以支持官方 gem。 但是,这个 gem 将继续支持所有 Rails 版本,直到5.0 。 针对 Ruby 版本>= 1.9.3到=< 2> 3.0.0到~> 4.1.0 。安装在...
Rails多站点这个gem为Rails应用程序提供了多数据库支持。 使用其中间件,您可以对应用程序进行分区,以便每个主机名都有自己的数据库。 它提供了一系列用于处理多个数据库的帮助程序,以及一些用于处理这些数据库的...
允许您使用为Rails应用程序的前端供电。 是将前端工具像Ruby一样进行编程,纯属喜悦! :smiling_face_with_heart-eyes: 或在运行的检查。 产品特点 :high_voltage: :light_bulb: 即时服务器启动 :high_voltage: ...
factory_bot_rails ...添加factory_bot_rails到您的Gemfile的测试和开发组都: group :development , :test do gem 'factory_bot_rails' end 您可能希望将测试套件配置为包括factory_bot方法。 见。 自动工厂
previews用法上面的最后一个生成器将为您的每封电子邮件添加一个存根,然后用模拟数据填充存根: # app/mailer_previews/user_mailer_preview.rb:class UserMailerPreview # preview methods should return Mail ...
针对Rails应用的简单灵活的垃圾邮件防护解决方案。 Invisible Captcha提供了多种技术来保护您的应用程序免受垃圾邮件攻击。 主要保护是基于honeypot原理的解决方案,该解决方案提供了更好的用户体验,因为对于...
在 Rails 应用中添加 Mixitup。 MixItUp - 过滤器和排序插件 安装 将此行添加到应用程序的 Gemfile 中: gem 'mixitup_rails' 然后执行: $ bundle 或者自己安装: $ gem install mixitup_rails 用法 在 ...
gem修改Rails应用程序并配置: –安装支持Rails的RSpec gem –测试网页–的干净选择 –创建测试数据 –在Web浏览器中查看错误 –适用于需要JavaScript的测试该套件的宝石很流行用于测试Rails应用程序。 通常,开发...
InlineTranslation是一颗宝石,它为您的应用程序提供了一种简单易用的方式来将内容内联翻译成多种语言。 它提供了自动缓存(和消除缓存!)机制,以确保您不必两次请求翻译或提供陈旧的翻译。 它被编写为优质的...
安装您可以通过以下方式安装此gem $ gem install jquery_kwicks_rails或者通过在您的Gemfile 中添加这一行将其捆绑到您的应用程序中 gem "jquery_kwicks_rails"开始将此添加到您的app/assets/javascripts/...
在您的Rails应用程序或其他应用程序中实现Google Maps的简便方法。 ### 依赖关系:jQuery ## Load将map_helper放置在供应商文件夹中。 小贩 JavaScripts map_helper maphelper.coffee /app/assets/javascripts/...
然后添加到您的应用程序 Gemfile(在 RailsAdmin 之前): gem 'rails_admin_glyph_theme', git: 'git://github.com/vala/rails_admin_glyph_theme.git' 在 rails_admin 应用程序 config/application.rb 中,就在...
将此行添加到您的应用程序的Gemfile中: gem 'kickbox_rails' 然后执行: $ bundle 执行下一个命令以生成初始化程序kickbox_rails.rb,您可以在其中配置kickbox.io帐户api_key: $ rails g kickbox_rails:install...
redmine_banner:顾名思义,添加banner支持(个人感觉很土鳖,没什么用) redmine_bootstrap_kit:让redmine支持bootstrap redmine_checklists:新建任务的时候,可以建立复选框任务列表 redmine_ckeditor:富文本...
安装将此行添加到您的应用程序的Gemfile中: gem "field_test" 跑步:rails generate field_test:installrails db:migrate 并将仪表板安装在config/routes.rb : mount FieldTest :: Engine , at : "field_test" ...
Rails的智能标题提供了在Rails应用程序中设置页面标题的便捷方法。 要指定页面标题,只需将以下行添加到视图中: <%= title "Smart Title" %>这将设置浏览器窗口的页面标题,并在标记中返回该标题。 如果您不...
由Active Record类支持的会话存储。 提供了一个默认类,但是任何使用文本session_id和data属性将对象鸭式键入Active Record Session类就足够了。 安装 将此宝石包括到您的Gemfile中: gem 'activerecord-session_...
Rails_app 是一个基于 Ruby on Rails 框架的示例应用程序。Ruby on Rails,简称 Rails,是一个使用 Ruby 语言编写的...这个示例应用程序是学习 Rails 框架基础知识的一个很好的起点,同时也为进阶开发提供了实践基础。