specific theme per project
Added by Vianney Lecroart over 15 years ago
Hello,
I wanted to have different themes for different project.
In themes.rb, I changed this:
@current_theme ||= Redmine::Themes.theme(th)
with:
th = Setting.ui_theme if not @project.nil? th << "_#{@project.identifier}" end @current_theme ||= Redmine::Themes.theme(th)
Then, I created different themes like:
classic_proj1/ classic_proj2/
The strange thing is that it almost works but when I do a force refresh with the browser, it displays classic theme instead of the proj1 one.
Is it a cache issue or something?
Have you a better idea to do that?
Replies (3)
RE: specific theme per project - Added by François Tertre over 15 years ago
Hello,
I have found where was your issue.
In your code, just change this :
th = Setting.ui_theme
by this
th = String.new(Setting.ui_theme)
The problem was that the _=_ just copy the pointer and not the value.
RE: specific theme per project - Added by Vianney Lecroart over 15 years ago
Thank you François,
It works fine now, I see that I lack some knowledge in ruby :/
RE: specific theme per project - Added by David Bronke over 15 years ago
My company has adapted this patch slightly to be more robust. We've added checking for the existence of the per-project theme so that it will default to the global theme if no per-project one exists. Our version also removes the prefix on the per-project theme, since for our site most of the per-project themes have little to do with the overall theme, and the overall theme for our site seldom changes. As a side note, we find that the easiest way to manage per-project themes is to simply create symlinks to other themes, unless there's actual per-project customization for a given project.
Here is a patch containing our changes:
--- redmine-0.8.3-original/lib/redmine/themes.rb 2009-04-05 12:44:19.000000000 +0000 +++ redmine-0.8.3/lib/redmine/themes.rb 2009-05-12 19:15:03.000000000 +0000 @@ -65,7 +65,20 @@ module ApplicationHelper def stylesheet_path(source) - @current_theme ||= Redmine::Themes.theme(Setting.ui_theme) + + # Horrible hack to support multiple themes! + th = String.new(Setting.ui_theme) + if not @project.nil? + projecttheme = "#{RAILS_ROOT}/public/themes/#{@project.identifier}" + if File.exists?(projecttheme) + th = @project.identifier + end + end + @current_theme ||= Redmine::Themes.theme(th) + + # Comment out everything above this line and uncomment this to go back to the default theme behavior. + #@current_theme ||= Redmine::Themes.theme(Setting.ui_theme) + super((@current_theme && @current_theme.stylesheets.include?(source)) ? "/themes/#{@current_theme.dir}/stylesheets/#{source}" : source) end