`
xf986321
  • 浏览: 163957 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

theme_support: 为Rails应用添加theme支持

阅读更多

theme_support: 为Rails应用添加theme支持

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

    ### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助...随着对Rails的深入了解,你将会发现更多高级特性和应用场景,为实际项目开发提供更多可能性。

    is_rateable:降低 Rails 应用的评分

    安装将此行添加到应用程序的 Gemfile 中: gem 'is_rateable' 然后执行: $ bundle或者自己安装: $ gem install is_rateable入门添加评级表和初始化程序。 $ rails generate is_rateable:install$ rake db:migrate...

    simple_postmark:在 Rails 应用程序中使用 Postmark:trade_mark: 的简单方法

    那是在 2011 年,邮戳宝石从那时起为支持 Rails API。 我最近决定弃用这个 gem 以支持官方 gem。 但是,这个 gem 将继续支持所有 Rails 版本,直到5.0 。 针对 Ruby 版本&gt;= 1.9.3到=&lt; 2&gt; 3.0.0到~&gt; 4.1.0 。安装在...

    rails_multisite:Rails应用的多租户

    Rails多站点这个gem为Rails应用程序提供了多数据库支持。 使用其中间件,您可以对应用程序进行分区,以便每个主机名都有自己的数据库。 它提供了一系列用于处理多个数据库的帮助程序,以及一些用于处理这些数据库的...

    vite_rails:Rails中的:high_voltage:Vite.js,为您JavaScript体验带来欢乐

    允许您使用为Rails应用程序的前端供电。 是将前端工具像Ruby一样进行编程,纯属喜悦! :smiling_face_with_heart-eyes: 或在运行的检查。 产品特点 :high_voltage: :light_bulb: 即时服务器启动 :high_voltage: ...

    factory_bot_rails:工厂机器人:heart_suit:Rails

    factory_bot_rails ...添加factory_bot_rails到您的Gemfile的测试和开发组都: group :development , :test do gem 'factory_bot_rails' end 您可能希望将测试套件配置为包括factory_bot方法。 见。 自动工厂

    rails_email_preview:在Rails中预览和编辑应用程序邮件模板

    previews用法上面的最后一个生成器将为您的每封电子邮件添加一个存根,然后用模拟数据填充存根: # app/mailer_previews/user_mailer_preview.rb:class UserMailerPreview # preview methods should return Mail ...

    invisible_captcha:对Rails应用程序的干扰和灵活的垃圾邮件保护

    针对Rails应用的简单灵活的垃圾邮件防护解决方案。 Invisible Captcha提供了多种技术来保护您的应用程序免受垃圾邮件攻击。 主要保护是基于honeypot原理的解决方案,该解决方案提供了更好的用户体验,因为对于...

    mixitup_rails:在 Rails 应用中添加 Mixitup。 MixItUp - 过滤器和排序插件 https

    在 Rails 应用中添加 Mixitup。 MixItUp - 过滤器和排序插件 安装 将此行添加到应用程序的 Gemfile 中: gem 'mixitup_rails' 然后执行: $ bundle 或者自己安装: $ gem install mixitup_rails 用法 在 ...

    rails_apps_testing:为Rails应用程序设置测试框架

    gem修改Rails应用程序并配置: –安装支持Rails的RSpec gem –测试网页–的干净选择 –创建测试数据 –在Web浏览器中查看错误 –适用于需要JavaScript的测试该套件的宝石很流行用于测试Rails应用程序。 通常,开发...

    inline_translation:在Rails应用程序中提供内联翻译的简单方法

    InlineTranslation是一颗宝石,它为您的应用程序提供了一种简单易用的方式来将内容内联翻译成多种语言。 它提供了自动缓存(和消除缓存!)机制,以确保您不必两次请求翻译或提供陈旧的翻译。 它被编写为优质的...

    jquery_kwicks_rails:用于 Rails 应用程序的 JQuery 性感滑动面板

    安装您可以通过以下方式安装此gem $ gem install jquery_kwicks_rails或者通过在您的Gemfile 中添加这一行将其捆绑到您的应用程序中 gem "jquery_kwicks_rails"开始将此添加到您的app/assets/javascripts/...

    map_helper:在Rails应用或其他应用中实现Google Maps的简便方法

    在您的Rails应用程序或其他应用程序中实现Google Maps的简便方法。 ### 依赖关系:jQuery ## Load将map_helper放置在供应商文件夹中。 小贩 JavaScripts map_helper maphelper.coffee /app/assets/javascripts/...

    rails_admin_glyph_theme:Flat Rails 管理主题

    然后添加到您的应用程序 Gemfile(在 RailsAdmin 之前): gem 'rails_admin_glyph_theme', git: 'git://github.com/vala/rails_admin_glyph_theme.git' 在 rails_admin 应用程序 config/application.rb 中,就在...

    kickbox_rails:Kickbox.io Rails验证器

    将此行添加到您的应用程序的Gemfile中: gem 'kickbox_rails' 然后执行: $ bundle 执行下一个命令以生成初始化程序kickbox_rails.rb,您可以在其中配置kickbox.io帐户api_key: $ rails g kickbox_rails:install...

    redmine 2.6插件包

    redmine_banner:顾名思义,添加banner支持(个人感觉很土鳖,没什么用) redmine_bootstrap_kit:让redmine支持bootstrap redmine_checklists:新建任务的时候,可以建立复选框任务列表 redmine_ckeditor:富文本...

    field_test:AB测试Rails

    安装将此行添加到您的应用程序的Gemfile中: gem "field_test" 跑步:rails generate field_test:installrails db:migrate 并将仪表板安装在config/routes.rb : mount FieldTest :: Engine , at : "field_test" ...

    smart_titles:在Rails应用程序中设置页面标题的真正便捷方法

    Rails的智能标题提供了在Rails应用程序中设置页面标题的便捷方法。 要指定页面标题,只需将以下行添加到视图中: &lt;&#37;= title "Smart Title" %&gt;这将设置浏览器窗口的页面标题,并在标记中返回该标题。 如果您不...

    activerecord-session_store:从Rails中提取的Active Record的会话存储

    由Active Record类支持的会话存储。 提供了一个默认类,但是任何使用文本session_id和data属性将对象鸭式键入Active Record Session类就足够了。 安装 将此宝石包括到您的Gemfile中: gem 'activerecord-session_...

    rails_app:示例 Rails 应用程序

    Rails_app 是一个基于 Ruby on Rails 框架的示例应用程序。Ruby on Rails,简称 Rails,是一个使用 Ruby 语言编写的...这个示例应用程序是学习 Rails 框架基础知识的一个很好的起点,同时也为进阶开发提供了实践基础。

Global site tag (gtag.js) - Google Analytics