0

如何在 Play Framework 2 中实现主题支持?我想创建像这样的目录结构:views/default <- default template directory
views/site1 <- template for site 1
views/site2 <- template for site 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)

4

2 回答 2

1

您必须自己实现它,作为参考,检查Play Authenticate usage sample,它允许发送 ie。验证电子邮件基于 Play 的模板并取决于客户的语言,因此,例如,如果您的主要语言是波兰语,它将呈现,verify_email_pl.scala.html否则如果您的浏览器使用 PA 不支持的语言,它将默默地回退到:verify_email_en.scala.html.

检查方法的使用声明

对于您的情况,这将是一个很好的解决方案,当然只是选择的标准会有所不同。

于 2013-08-25T13:56:02.037 回答
-1

这个过程称为“品牌化”。你要做的就是跟随。在数据库中创建一个名为“BRANDING”的表,并针对每个网站实例在其中添加主题名称。现在,您将按照您提到的那样创建文件夹层次结构,并且在加载 css 文件的 jsp 页面中,您将这样做<link rel="stylesheet" type="text/css" href="/views/${themeName}.css">

wherethemeName将是一个服务器端变量,您将在控制器中编程以从 db 或第一次获取它然后缓存它。

于 2013-08-25T14:02:49.907 回答