Можно ли совместно использовать макросы HubL между модулями и шаблонами? - PullRequest
2 голосов
/ 08 марта 2019

В CMS HubSpot вы можете создать такой макрос:

{% macro render_section(classes, background_style) %}
    <div class="mosaic-section {{classes}}" {{background_style}}>
        {{ caller() }}
    </div>
{% endmacro %}

Возможно ли использовать этот макрос для разных модулей и шаблонов?Или вам нужно повторять макрос везде, где вам нужно его использовать?

1 Ответ

2 голосов
/ 03 апреля 2019

Да, вы можете обмениваться макросами между модулями, но только модулей, которые находятся в той же области действия , что и импортированный фрагмент HTML / фрагмент кода, который содержит созданные вами макросы.

Согласно документам HubL об использовании тега {% import %} (найдено здесь ), макросы можно импортировать из созданных пользователем HTML-фрагментов / фрагментов. Например, если вам нужно было создать следующий фрагмент HTML с именем macros.html:

{% macro render_section(classes, background_style='', data='') %}
    <div class="mosaic-section {{classes}}" {{background_style}} {{data}}>
        {{ caller() }}
    </div>
{% endmacro %}

Затем вы импортируете macros.html в шаблон, например, с именем homepage.html со следующим кодом HubL / HTML:

<!doctype html>
<head>
    {# standard HubL header code goes here %}
</head>
<body class="site-page two-column {{ builtin_body_classes }}" style="">

    {% import 'path/to/macros.html as module_macros %}

    <!--- more HubL/HTML code .... -->

    {{ standard_footer_includes }}
</body>
</html>

И, как результат, все модули, добавленные в кодированный шаблон homepage.html, теперь находятся в той же области действия, что и импортированные макросы, и поэтому такие модули могут теперь использовать макросы.

Если вы хотите импортировать макрос single из фрагмента HTML, который содержит несколько макросов, вы можете использовать тег {% from %} (найдено здесь ) и выполнить следующее:

{% from 'path/to/macros.html' import render_section %}

Теперь макрос render_section() доступен для всех последующих модулей в кодированном шаблоне.

Примечание:

К сожалению, мне еще не удалось найти способ использовать / импортировать макросы "глобально" в шаблон drag-and-drop - по крайней мере, без необходимости использовать модуль HubL для встраивания, который может добавить странные проблемы с пробелами в сгенерированной разметке HTML, которые вам, возможно, придется решить с помощью CSS.

Надеюсь, что этот ответ был достаточным и поможет решить проблему, которую вы поставили.

...