2016-11-10 2 views
1

Мне было интересно, есть ли более эффективный способ создания тегов hreflang, просто используя жидкость в BC, без необходимости создавать webapp.Создание тегов hreflang только с использованием Liquid in Business катализатора

Я пробовал этот способ, который имеет смысл, но по какой-то причине он не работает.

{% 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" />' }} 

Чем короче код, тем лучше, конечно.

+0

Код действительно отлично работает на каждой странице, за исключением домашней страницы. – Daut

+0

Только вопрос: есть ли причина, по которой «pagURL» и «elsif» отсутствуют «e»? – Luke

+0

'' pagURL '' - это переменная, она объявлена ​​с помощью '' capture '', '' elsif '' является правильным способом записи «else if» в жидкости, BC. – Daut

ответ

2

Ok Daut, вам это понравится! ; p

Я столкнулся с подобными препятствиями при работе над решением для this issue. (Я объясню ниже).

Насколько я могу судить, у BC есть некоторые проблемы вокруг его визуализации Liquid, когда речь идет о URL-адресах и переменных. Я не очень разбираюсь в том, что 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}} в объявлении переменной. Не уверен, в чем проблема, но он просто не может справиться с jandle.

Но это работа:

{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.

+0

Эй, Люк, я знаю все, что вы говорите, правда, и я ценю вашу помощь, но мой код по-прежнему 30 строк: D. Это отличный ответ, но мой вопрос в том, как сделать его коротким. – Daut

+1

Полностью - извините, я не пропустил это, но я забыл обратиться к нему в своем ответе. В итоге моя цель состояла в том, чтобы просто найти способ получить ваши теги ссылок на самом деле. На этом этапе я буду смотреть, как заставить всю оригинальную настройку работать, прежде чем пытаться сократить. Преобразование всех ваших тегов ссылок (или частей тегов ссылок) в переменные может все же сократить общий код. – Luke

Смежные вопросы