2013-08-25 55 views
1

如何在Play Framework 2中實現主題支持? 我想創建這樣的目錄結構: 的意見/默認< - 默認模板目錄
的意見/ site1的< - 模板網站1
的意見/站點2 < - 模板網站2
Play Framework 2.0中的主題支持

如果模板不`噸存在(即。views/site1/home)它應該從默認目錄呈現模板。

我試過cls = Class.forName("views.html.home);但是我得到沒有找到類的例外。

SOLUTION: 也許有人會覺得這有用:

protected static String renderTemplate(final String template, final String action,final ViewData templateParams) { 
    Class<?> cls = null; 
    String ret = "Template not found"; 
    try { 
     cls = Class.forName(template); 
    } catch (ClassNotFoundException e) { 
     ret = e.toString(); 
    } 

    if (cls == null) { 
     try { 
      cls = Class.forName("views.html.default."+action); 
     } catch (ClassNotFoundException e) { 
      ret = e.toString(); 
     } 
    } 
    if (cls != null) { 
     Method htmlRender; 
     try { 
      htmlRender = cls.getMethod("render", ViewData.class); 
      ret = htmlRender.invoke("",templateParams).toString(); 

     } catch (NoSuchMethodException e) { 
      ret = "Method not found"+e.toString(); 
     } catch (IllegalAccessException e) { 
      ret = "illegal access exception"; 
     } catch (InvocationTargetException e) { 
      ret = "InvocationTargetException"; 
     } 
    } 
    return ret; 
} 

ViewData vd=new ViewData(); 
renderTemplate("views.html.custom."+viewname, actionname, vd) 

+0

I've試圖
CLS =的Class.forName(「views.html.home);
但我得到類未發現異常 –

回答

1

你必須實現它自己,作爲參考,檢查Play Authenticate usage sample,它允許發送,即。驗證電子郵件是基於Play的模板並且取決於客戶端的語言,所以對於一個實例,如果您的主要語言是波蘭語,則它會渲染verify_email_pl.scala.html,否則如果您的瀏覽器使用不受PA支持的語言,它將默默回退到:verify_email_en.scala.html

檢查該方法的usagedeclaration

對於你的情況,這將是很好的解決方案,當然只是選擇標準會有所不同。

+0

感謝尖I've嘗試過這種方法,但前面我無法獲得實例。通過callig Class.forName(「views.html.home」)的類。 這個例子中的代碼也不適用於我。我是否錯過了什麼? –

+1

我終於得到這個工作,但我不't知道如何:)。Thx。 –

-1

這個過程被稱爲「品牌」。你需要做的是跟隨。 按名稱「BRANDING」在分貝中創建一個表格,並在其中爲每個網站實例添加主題名稱。 現在你會做的文件夾層次正如你所提到和JSP網頁,加載CSS文件,你會是這樣做的<link rel="stylesheet" type="text/css" href="/views/${themeName}.css">

其中themeName將是一個服務器端的變量,你將在你的控制器進行編程,以從數據庫或取你第一次獲取並緩存它。

+0

我的意思是模板不是css主題 –