从Freemarker中的相对链接获取绝对链接

时间:2014-10-31 11:59:55

标签: html freemarker magnolia

我正在使用Magnolia创建一个网站 - CMS。现在我正在实施一个博客页面。在每个博客页面上,有几个共享按钮。现在我正忙着实现twittershare按钮。在这里,我将使用推特卡。为此,我需要在元标记中提供图像的URL。主要问题:我像这样检索我的图像:$ {damfn.getAssetLink(content.blogImage)}。这只返回我的资源的相对路径。有没有快速的方法(在freemarker中),将tis转换为绝对链接?

非常感谢提前!

1 个答案:

答案 0 :(得分:1)

通常您在magnolia.properties中定义magnolia.default.base.url

然后您可以使用Components.getComponent(ServerConfiguration.class).getDefaultBaseUrl()

进行检索

现在您必须将服务安装到freemarker中。您可以通过在启动时将安装程序任务添加到渲染器中来实现。您可以在模块版本处理程序中执行此操作。在那里,您覆盖了getStartupTasks(...),如下所示:

@Override
protected List<Task> getStartupTasks(InstallContext installContext) {
    final List<Task> tasks = new ArrayList<>();
    tasks.add(new InstallRendererContextAttributeTask("rendering", "freemarker", "serverConf", ServerConfiguration.class.getName()));
    tasks.add(new InstallRendererContextAttributeTask("site", "site", "serverConf", ServerConfiguration.class.getName()));
    return tasks;
}

现在您可以调用freemarker:

"${serverConf.defaultBaseUrl}/${ctx.contextPath}/${damfn.getAssetLink(content.blogImage)}"

检查斜线是否是必需的,并确保在您的木兰配置(“ / server / ...”)中正确设置了defaultBaseUrl

edit:在freemarker ${Request}中调用当前请求应该会更容易一些,因此它可能类似于“ $ {Request.domain} / $ {ctx.contextPath} / $ {damfn.getAssetLink(content .blogImage)}“,而无需将serverConfiguration注入渲染器