如何在Play Framework 2中实现主题支持?
我想创建目录结构,如:
views / default< - 默认模板目录
views / site1< - 网站1的模板
views / site2< - 网站2的模板
如果模板不存在(即views / site1 / home),它应该从默认目录渲染模板。
我已尝试cls = Class.forName("views.html.home);
但我得到未找到课程例外。
解: 也许有人会觉得这很有用:
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)
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 :(得分:1)
你必须自己实现它,作为参考,检查Play Authenticate usage sample,它允许发送ie。验证电子邮件基于Play的模板并取决于客户端的语言,因此对于一个实例,如果您的主要语言是波兰语,它将呈现verify_email_pl.scala.html
,否则如果您的浏览器使用PA不支持的语言,它将默默回退到: verify_email_en.scala.html
。
检查方法的usage和declaration。
对于您的情况,这将是一个很好的解决方案,当然只是选择的标准会有所不同。
答案 1 :(得分:-1)
此过程称为“品牌”。你要做的就是跟随。
在db中按名称“BRANDING”创建一个表,并在其中为每个网站实例添加主题名称。
现在你将按照你提到的那样创建文件夹层次结构,并在jsp页面中加载css文件,你将这样做<link rel="stylesheet" type="text/css" href="/views/${themeName}.css">
其中themeName
将是一个服务器端变量,您将在控制器中编程以从db中获取,或者第一次获取它然后缓存它。