仅使用 Liquid in Business 催化剂创建 hreflang 标签

Create hreflang tags only using Liquid in Business catalyst

我想知道是否有更有效的方法来创建 hreflang 标签,只需在 BC 中使用 liquid,而无需创建 webapp。

我试过这种方式,这很有意义,但由于某些原因它不起作用。

{% capture pagURL -%}{module_pageaddress}{% endcapture -%}
{% if pagURL contains "http://us." -%}
<link rel="alternate" href="{{ pagURL}}" hreflang="en-us" />
<link rel="alternate" href="{{ pagURL | replace: 'http://us', 'http://www' }}" hreflang="en-uk" />
<link rel="alternate" href="{{ pagURL | replace: 'http://us', 'http://au' }}" hreflang="en-au" />
<link rel="alternate" href="{{ pagURL | replace: 'http://us', 'http://eu' }}" hreflang="en" />
{% elsif pagURL contains "http://au." -%}
<link rel="alternate" href="{{ pagURL}}" hreflang="en-au" />
<link rel="alternate" href="{{ pagURL | replace: 'http://au', 'http://www' }}" hreflang="en-uk" />
<link rel="alternate" href="{{ pagURL | replace: 'http://au', 'http://us' }}" hreflang="en-us" />
<link rel="alternate" href="{{ pagURL | replace: 'http://au', 'http://eu' }}" hreflang="en" />
{% elsif pagURL contains "http://eu." -%}
<link rel="alternate" href="{{ pagURL}}" hreflang="en" />
<link rel="alternate" href="{{ pagURL | replace: 'http://eu', 'http://us' }}" hreflang="en-us" />
<link rel="alternate" href="{{ pagURL | replace: 'http://eu', 'http://au' }}" hreflang="en-au" />
<link rel="alternate" href="{{ pagURL | replace: 'http://eu', 'http://www' }}" hreflang="en-uk" />
{% elseif pagURL contains "http://www." -%}
<link rel="alternate" href="{{ pagURL}}" hreflang="en-uk" />
<link rel="alternate" href="{{ pagURL | replace: 'http://www', 'http://us' }}" hreflang="en-us" />
<link rel="alternate" href="{{ pagURL | replace: 'http://www', 'http://au' }}" hreflang="en-au" />
<link rel="alternate" href="{{ pagURL | replace: 'http://www', 'http://eu' }}" hreflang="en" />
{% else -%}
{% endif  -%}

奇怪的是,下面的内容在同一个页面上有效。

{% capture pagURL -%}{module_pageaddress}{% endcapture -%}
{{ pagURL}}<br>
{{ pagURL | replace: 'http://www', 'http://us' }}<br>
{{ pagURL | replace: 'http://www', 'http://au' }}<br>
{{ pagURL | replace: 'http://www', 'http://eu' }}<br>

这也有效

{{ pagURL | replace: 'http://www', 'http://us' | prepend: '<link rel="alternate" href="' | append: '" hreflang="en-us" />' }}

代码当然越短越好。

好的,Daut,你会喜欢这个的! ;p

我 运行 在为 制定解决方案时遇到了类似的障碍。 (我会在下面解释)。

据我所知,当涉及到 URL 和变量时,BC 在其 Liquid 渲染方面存在一些问题。在服务器端处理方面,我不太了解 Liquid 的来龙去脉,但在 BC 中,事情似乎并不像它们应该的那样工作。

例如,如果我们获取您的代码并将其剥离到最基本的部分:

这个(无论插入到<head>还是<body>不起作用:

    {% capture pagURL -%}
        {module_pageaddress}
    {% endcapture -%}    

    <link rel="alternate" href="{{pagURL}}" hreflang="en-us">

它输出 <link rel="alternate" href="{{pagURL}}" hreflang="en-us">{{pagURL}} 是呈现的文字。

但这确实有效:

    {% capture pagURL -%}
        {module_pageaddress}
    {% endcapture -%}     

    {% assign test = '<link rel="alternate" href="' | append: {{pagURL}} | append: '" hreflang="en-us">' -%}

    {{test}}

将以上内容与我 运行 遇到的问题进行比较。

这行不通:

    {module_pageaddress collection="page" template=""}
    {module_siteUrl collection="site" template=""}

    {% assign fullUrl = "http://{{site.siteUrl}}/" -%}

    {% if page.pageUrl == {{fullUrl}} -%}

        // We are on the home page

    {% else -%}

        // We are not on the home page

    {% endif -%}

这里的问题是 {{site.siteUrl}} 在变量声明中。不确定是什么问题,但它无法处理问题。

但这确实有效:

    {module_pageaddress collection="page" template=""}
    {module_siteUrl collection="site" template=""}

    {% assign fullUrl = 'http://' | append: {{site.siteUrl}} | append: '/' -%}

    {% if page.pageUrl == {{fullUrl}} -%}

        // We are on the home page

    {% else -%}

        // We are not on the home page

    {% endif -%}

最后回到你的例子,(讽刺的是)这是有效的:

    {% capture pagURL -%}
        {module_pageaddress}
    {% endcapture -%}

    <a href="{{pagURL}}">test</a>

去算一下。

我很确定 BC 有一些自动的方法来抓取页面上任何地方包含的头部元素并将它们重新插入到头部(即使它们一开始就被插入到头部)。

我想知道在 <link rel="alternate" href="{{pagURL}}" hreflang="en-us"> 这样的情况下这是否会导致问题。不过,它并没有解释我 运行 遇到的问题。

归根结底,我认为 BC 对 Liquid 的实现还有一些大问题。