如何获得页面的绝对 URL?

How do I get the absolute URL of a page?

我可以使用 cmsfn.link templating function 获取页面的相对 URL。例如:

cmsfn.link(content)
[# -- Returns /example-com/example-page-slug.html --]

如何获取页面的绝对 URL?例如:

https://example.com/example-page-slug.html

使用 sitefn templating function 获取域并将其与 cmsfn.link 组合。例如:

[#assign site = sitefn.site(content)]
[#assign relativeURL = cmsfn.link(content)?remove_beginning("/" + site.name)]
[#assign domain = site.domains[0].name]

https://${domain + relativeURL}

理想情况下,您可以调用 LinkUtil.createExternalLink(content),不幸的是,此方法未直接暴露给模板(为什么????)。

您正在使用的替代方法是

[#assign domain = (state.originalBrowserURL?keep_before('?')?remove_ending(state.originalBrowserURI))!'']

通过站点读取域的不同之处在于,它为您提供用户当前在浏览器中使用的域,因此即使您将站点域配置为指向 public 实例,它也可以在作者实例上正常工作或者当您临时 运行 在您的本地主机上进行配置时等等。

Rendering Context Objects — Magnolia 6.2 中查看 state 的魔法。

[#-- Get / assign your path --]
[#assign path = state.originalURI]

[#-- Put it all together --]
[#assign absoluteUrl = 'https://example.com' + path]


[#-- Render it --]
${absoluteUrl}

如果您不喜欢对协议或域进行“硬编码”,请尝试从站点定义或 Magnolia Config 中获取它们。虽然,如何设置和检索这些属性各不相同。祝你好运。