在HubSpot CMS中,您可以创建一个宏,如下所示:
{% macro render_section(classes, background_style) %}
<div class="mosaic-section {{classes}}" {{background_style}}>
{{ caller() }}
</div>
{% endmacro %}
是否可以在不同的模块和模板之间共享此宏?还是您必须在需要使用宏的任何地方重复该宏?
是的,您可以跨模块共享宏,但只能共享与包含您创建的宏的导入 HTML 部分/代码段位于同一范围内的模块。
根据使用{% import %}
标记的 HubL 文档(可在此处找到),可以从用户创建的 HTML 部分/片段导入宏。例如,如果要创建以下名为macros.html
的 HTML 部分:
{% macro render_section(classes, background_style='', data='') %}
<div class="mosaic-section {{classes}}" {{background_style}} {{data}}>
{{ caller() }}
</div>
{% endmacro %}
然后,您将macros.html
导入到模板中,例如,使用以下 HubL/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 %}
标记(可在此处找到)并执行以下操作:
{% from 'path/to/macros.html' import render_section %}
现在,宏render_section()
可用于编码模板中的所有后续模块。
注意:
不幸的是,我还没有找到一种方法来"全局"使用/导入宏到拖放模板中——至少不必使用嵌入的 HubL 模块,该模块可能会在生成的 HTML 标记中添加奇怪的间距问题您可能需要使用 CSS 解决。
希望这个答案足够,并有助于解决您提出的问题。