是否可以在模块和模板之间共享HubL宏?

时间:2019-03-08 17:39:26

标签: hubl hubspot-cms

在HubSpot CMS中,您可以像这样创建一个宏:

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

是否可以在不同的模块和模板之间共享此宏?还是必须在需要使用宏的任何地方重复它?

1 个答案:

答案 0 :(得分:2)

是的,您可以跨模块共享宏,但只能将相同作用域中的模块作为包含已创建的宏的导入HTML部分/代码片段进行共享。

根据使用{% import %}标签(找到here)的HubL文档,可以从用户创建的HTML部分/片段中导入宏。例如,如果要创建以下名为macros.html的HTML部分:

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

然后,您将使用以下HubL / HTML代码将macros.html导入模板,例如名为homepage.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编码模板中的所有模块现在都与导入的宏处于同一作用域,因此,这些模块现在可以利用这些宏。

如果您想从包含多个宏的HTML部分中导入单个宏,则可以使用{% from %}标记(位于here)并执行以下操作:

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

现在,render_section()宏可用于编码模板中的所有后续模块。

注意:

不幸的是,我还没有找到一种方法来“全局”使用/导入宏到拖放模板中-至少不必使用嵌入的HubL模块即可添加您可能需要使用CSS解决生成的HTML标记中的奇怪间距问题。

希望这个答案就足够了,并且可以解决您提出的问题。