Need help with themes_on_rails?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

chamnap
209 Stars 78 Forks MIT License 94 Commits 11 Opened issues

Description

Adds multi themes support to your Rails 3/4/5 application

Services available

!
?

Need anything else?

Contributors list

# 275,574
schedul...
Rails
HTML
CSS
79 commits
# 260,646
HTML
CSS
restful...
Koa
2 commits
# 437,615
python3
pythoni...
SQL
boleto
2 commits
# 48,616
Ruby
lita
reddit
Homebre...
1 commit
# 69,091
Zsh
Rails
zeal
sed
1 commit
# 120,464
Ruby
wechat-...
wechat-...
s3
1 commit

ThemesOnRails Build Status Dependency Status Code Climate Coverage Status Gem Version

Installation

The simplest way to install is to use Bundler.

Add this gem to your Gemfile:

gem 'themes_on_rails'

If you want to use

themes_on_rails
with
liquid
template, add one more gem to your Gemfile:
gem 'liquid-rails'

Then, use Bundler to install the gem and its dependencies:

$ bundle install

Usage

A theme is composed of three things:

  1. Assets: images, javascripts, stylesheets
  2. Views: templates and layouts (erb, haml, or other template engines)
  3. Locales: locales files if any

Generator

To generate theme inside your app:

$ rails g themes_on_rails:theme theme_name
app/
  themes/
    [theme_name]/
      assets/
        images/
          [theme_name]/
        stylesheets/
          [theme_name]/
            all.css
        javascripts/
          [theme_name]/
            all.js
      views/
        layouts/
          [theme_name].html.erb
      locales/

After you invoke the above command, make sure you restart your rails process.

It's best advisable to namespace your assets directory so that it won't conflict with assets in other themes.

image_tag              'theme_a/logo.png' # => app/themes/theme_a/assets/images/theme_a/logo.png
javascript_include_tag 'theme_a/all'      # => app/themes/theme_a/assets/javascripts/theme_a/all.js
stylesheet_link_tag    'theme_a/all'      # => app/themes/theme_a/assets/stylesheets/theme_a/all.css

There is an example app at https://github.com/chamnap/themesonrails_example.

Controller

You can set theme in your controllers by using the

theme
declaration. For example:
class HomeController < ApplicationController
  theme 'basic'

def index ... end end

With this declaration, all of the views rendered by the home controller will use

app/themes/basic/views/home/index.html.erb
as its templates and use
app/themes/basic/views/layouts/basic.html.erb
.

You can use a symbol to defer the choice of theme until a request is processed:

class HomeController < ApplicationController
  theme :theme_resolver

def index ... end

private

def theme_resolver
  params[:theme].presence || 'professional'
end

end

Now, if there is a

params[:theme]
, it will use that theme. Otherwise, it will use professional theme.

You can even use an inline method, such as a Proc, to determine the theme. For example, if you pass a Proc object, the block you give the Proc will be given the controller instance, so the theme can be determined based on the current request:

class HomeController < ApplicationController
  theme Proc.new { |controller| controller.params[:theme].presence || 'professional' }
end

Theme specified at the controller level support the

:only
and
:except
options. These options take either a method name, or an array of method names, corresponding to method names within the controller:
class HomeController < ApplicationController
  theme 'basic', except: [:rss]
end

With this declaration, the basic theme would be used for everything but the

rss
index methods.

Authors

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.