2012-11-02 99 views
4

我有以下項目結構:主題支持與資產管道

/app 
/config 
/db 
... 
/themes 
    /default 
    /assets 
     /images 
     /stylesheets 
     /... 
    /views 
     /... 
    /theme1 
    /assets 
    /... 
    /views 
    /... 

「默認」的主題應該是默認使用:)。 'theme1' - 應該覆蓋任何,例如logo.png或view(application.erb)。

應該以這種方式工作:儘量從「THEME1」如果沒有獲得資產 - 從「默認」使用。

很簡單,可欣賞:

self.prepend_view_path ::ActionView::FileSystemResolver.new(theme_view_path_for(name)) 
self.prepend_view_path ::ActionView::FileSystemResolver.new(default_theme_path) 

,但我不能用資產解決。

config.assets.paths << "#{Rails.root}/themes/default/assets/stylesheets" 
config.assets.paths << "#{Rails.root}/themes/default/assets/images" 
config.assets.paths << "#{Rails.root}/themes/default/assets/javascript" 

這增加了資產和往常一樣,如資產可以與網址訪問,資產/ logo.png',但我需要一個前綴 - 「資產/ THEME1/logo.png」。 此外,如果「THEME1」犯規的「資產/ THEME1/logo.png」 URL重寫logo.png應該「默認」的主題標誌返回。 (類似於上面的視圖)。

我曾嘗試themes_for_rails - 但它不適合,因爲它們將覆蓋整個資產結構(自己的控制器,服務等)。

另外,如果能夠訪問資產解析, 訪問logo1.png會很棒,例如,應該可以將其與我的控制器一起提供並從數據庫返回。任何意見

謝謝,我會的結果時結束共享。

基里爾Salykin

回答

0

默認情況下,在第一級的文件夾將被鏈輪軌忽略。您可以在默認的應用程序中進行驗證,您可以在其中看到編譯後的文件缺少初始javascripts/images /或樣式表/文件夾。

你一個更好的結構將是:

/themes 
    /stylesheets 
    /default 
    /theme1 
    /images 
    /default 
    /theme1 

然後添加目錄像這樣:

config.assets.paths << "#{Rails.root}/stylesheets" 
config.assets.paths << "#{Rails.root}/images" 

想引用一個主題的文件嗎?

= image_tag("#{theme_name}/background.png") 
= stylesheet_tag("#{theme_name}/application.css") 

這應該工作。