最近学习一下typo,看typo的theme是怎样实现的,顺便把theme模块抽出来,以后编写rails应用(比如Blog),直接把代码COPY进去就可以.
1)修改routes.rb, add以下code:
map.with_options(:conditions => {:method => :get}) do |get|
get.with_options(:controller => 'themes', :filename => /.*/, :conditions => {:method => :get}) do |theme|
theme.connect 'stylesheets/theme/:filename', :action => 'stylesheets'
theme.connect 'javascripts/theme/:filename', :action => 'javascript'
theme.connect 'images/theme/:filename', :action => 'images'
end
end
主要是由themes控制器来处理(读取)css、javascripts、image这些文件.
2)定义一个全局的静态实例,用来存储Theme
在environment.rb里添加:
@@stored_theme = nil
3)themes文件的位置:
在你的rails应用目录里mkdir一个themes文件,如图1:
其中dirtylicious,scribbish,standard_issue是三个不同的主题(Theme).
每个主题文件的布局像图1一样(以standard_issue):
由images(放图片),layouts(放模板),stylesheets(css文件),views(视图文件html)等文件组成.
4)定义一个Theme model(不与DB关联)
class Theme
def initialize(name, path)
@name, @path = name, path
end
def layout #模板文件,在layouts文件里,叫default.html.erb
"../../themes/#{name}/layouts/default"
end
def self.find(name) #查找指定(name)的Theme
self.new(name,theme_path(name))
end
def self.themes_root #所有theme的root
RAILS_ROOT + "/themes"
end
def self.theme_path(name) #指定(name)theme的path
themes_root + "/" + name
end
def self.theme_from_path(path) #查找指定(path)的Theme
name = path.scan(/[-\w]+$/i).flatten.first
self.new(name, path)
end
def self.find_all #查找所有Theme
installed_themes.inject([]) do |array, path|
array << theme_from_path(path)
end
end
def self.installed_themes #载入theme
search_theme_directory
end
def self.search_theme_directory #读入
glob = "#{themes_root}/[a-zA-Z0-9]*"
Dir.glob(glob).select do |file|
File.readable?("#{file}/about.markdown")
end.compact
end
5)create themes controller由themes控制器来处理(读取)css、javascripts、image这些文件的位置:
class ThemesController < ApplicationController
session :off
def stylesheets
render_theme_item(:stylesheets, params[:filename], 'text/css; charset=utf-8')
end
def javascript
render_theme_item(:javascript, params[:filename], 'text/javascript; charset=utf-8')
end
def images
render_theme_item(:images, params[:filename])
end
def error
render :nothing => true, :status => 404
end
private
def render_theme_item(type, file, mime = nil)
mime ||= mime_for(file)
if file.split(%r{[\\/]}).include?("..")
return (render :text => "Not Found", :status => 404)
end
src = @@stored_theme.path + "/#{type}/#{file}"
return (render :text => "Not Found", :status => 404) unless File.exists? src
if perform_caching
dst = "/#{page_cache_directory}/#{type}/theme/#{file}"
FileUtils.makedirs(File.dirname(dst))
FileUtils.cp(src, "#{dst}.#{$$}")
FileUtils.ln("#{dst}.#{$$}", dst) rescue nil
FileUtils.rm("#{dst}.#{$$}", :force => true)
end
send_file(src, :type => mime, :disposition => 'inline', :stream => true)
end
def mime_for(filename)
case filename.downcase
when /\.js$/
'text/javascript'
when /\.css$/
'text/css'
when /\.gif$/
'image/gif'
when /(\.jpg|\.jpeg)$/
'image/jpeg'
when /\.png$/
'image/png'
when /\.swf$/
'application/x-shockwave-flash'
else
'application/binary'
end
end
end
6)在Application.rb里定义current_theme helper方法:
helper_method :current_theme
def current_theme
@@stored_theme ||= Theme.find(get_configuration('theme').value)
end
#get_configuration('theme').value 是获取存储在DataBase里面的当前Theme的名字(图2)
7)在Application.rb里定义theme_layout, setup_themer
def theme_layout #用于layout :theme_layout
current_theme.layout
end
def setup_themer #设置视图文件(View) 读取路径
self.view_paths=::ActionController::Base.view_paths.dup.unshift("#{RAILS_ROOT}/themes/#{current_theme.name}/views")
end
8)编辑控制器:
class ArticlesController < ApplicationController
before_filter :setup_themer
layout :theme_layout
def index
....
end
....
end
9)总结
如果有新的theme文件,比如A,那么就mkdir一个A文件,并在A文件里面有图1结构,
然后放在Themes目录里,所有views文件就像平常一样编写,然后放到A文件的views里面,OK
如果要加载某个Theme的css或javascript文件,那么要在该Theme的模板文件(layouts/default.html.erb)定义:
<%= stylesheet_link_tag '/stylesheets/theme/application.css', :media => 'all' %>
<%= javascript_link_tag '/javascripts/theme/application.js'%>
OK
- 描述: 图1
- 大小: 119.7 KB
- 描述: 图2
- 大小: 226.9 KB
分享到:
相关推荐
本参考手册是学习Rails 2.2.2的重要资源,特别适合初学者和有一定经验的开发者。它提供了详尽的API文档,帮助开发者深入理解Rails框架中的各个组件和方法。以下是一些关键的知识点: 1. **MVC架构**:Rails的核心...
《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...
Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...
作者们通过分享自己的经验和见解,为Rails程序员提供了一本既有实际操作指导又有理论深入分析的参考书。 Ruby on Rails是一种流行的开源Web应用框架,用Ruby语言编写,遵循MVC架构模式。Rails的目的是让开发过程尽...
Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...
从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...
Rails API文档通常包含关于框架的所有核心组件、方法和类的详细信息,是开发者进行Rails开发的重要参考资料。 描述中的“方便查阅”意味着这个CHM文件可能是一个组织良好的Rails API参考手册,便于开发者快速查找和...
### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...
在本文中,我们将深入探讨如何使用Rails敏捷开发技术构建一个购物车系统,特别是在参考《rails敏捷开发第四版》中的示例。Rails 3.2.6是本文的基础框架,它是一个强大的Ruby Web应用程序框架,以其MVC(模型-视图-...
Rails指南中文版是针对Ruby on Rails框架的一份详尽教程,旨在帮助开发者深入理解并熟练掌握这个强大的Web应用开发工具。Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-...
标题 "Rails" 指的是 Ruby on Rails,一个开源的Web应用程序框架,它基于Ruby编程语言,遵循MVC(模型-视图-控制器)架构模式。Rails由David Heinemeier Hansson在2004年创建,其设计理念是强调代码的简洁性、DRY...
Rails是Ruby语言的一个著名Web开发框架,全称为Ruby on Rails,它遵循MVC(Model-View-Controller)架构模式,旨在提高开发效率和代码可读性。...在实际操作中,参考Rails的官方文档和社区资源将是提升技能的好方法。
在开发Web应用时,Ruby on Rails(简称Rails)框架因其高效、简洁的代码风格和强大的社区支持而备受青睐。Aptana是一款强大的集成开发环境(IDE),尤其适用于Rails项目的开发,它提供了丰富的特性来提升开发效率。...
学习Rails的过程中,除了阅读文档,还可以参考在线教程、视频课程、社区论坛和开源项目,以加深理解和实践。Rails社区活跃,有许多优秀的资源可以帮助初学者快速上手。 总的来说,Ruby on Rails是一个强大的开发...
在开发过程中,了解和参考Rails API文档将极大地帮助你理解和利用这个强大的框架,以构建健壮、高效的API服务。同时,熟悉相关的Gem和工具,如 grape、rabl 或 jbuilder,可以帮助你进一步定制和扩展你的API功能。
rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails ...
[Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...
《Rails 3 in Action》不仅覆盖了Rails 3.1的核心概念和技术,还涵盖了从开发到部署的全过程,是Rails开发者不可或缺的参考书籍。通过阅读这本书,开发者可以深入理解Rails的工作原理,提升开发技能,并学会构建高效...
随着互联网的快速发展,Ruby on Rails作为一种流行的Web开发框架,在开发领域得到了广泛的应用。它的简易性与高效性让许多开发者为之青睐。而想要在本地环境搭建Ruby on Rails的开发环境,掌握正确的安装步骤是基础...
标题 "rails2.3.2" 指的是 Ruby on Rails 框架的一个特定版本,即 2.3.2。Ruby on Rails(通常简称为 Rails)是一个基于 Ruby 语言的开源 Web 应用程序框架,它遵循 Model-View-Controller (MVC) 设计模式,用于构建...