Twig 将模板文本传递到includes

Twig 将模板文本传递到includes,twig,craftcms,Twig,Craftcms,我想通过将模板文本作为变量传递到twig{%includes'X%}中来创建干代码,以便它们可以在includes代码中使用(下面的示例) 我已经看到可以将变量传递到include中,如下所示: {% include 'template.html' with {'foo': 'bar'} %} 但是,由于我的代码将在同一页面上多次使用同一个includes模板,因此我需要在这里进行更多的定制 理想情况下,我想做的是在调用includes时将其设置为可行,并将其回显到模板中,例如: 在页面文件中

我想通过将模板文本作为变量传递到twig
{%includes'X%}
中来创建干代码,以便它们可以在includes代码中使用(下面的示例)

我已经看到可以将变量传递到include中,如下所示:

{% include 'template.html' with {'foo': 'bar'} %}
但是,由于我的代码将在同一页面上多次使用同一个includes模板,因此我需要在这里进行更多的定制

理想情况下,我想做的是在调用
includes
时将其设置为可行,并将其回显到模板中,例如:

在页面文件中:

{% set contact_img = 'path to image location' %}
{% include "/IMPORT/Specific/full_page_img_bg" with contact_img %}
模板中

{% set transformed_{{ VARIABLE NAME PASSED HERE }} = craft.imager.transformImage({{ VARIABLE NAME PASSED HERE }}_for_transform, [
  { width: 2000, jpegQuality: 89 },
  { width: 1300, jpegQuality: 84 },
  { width: 750, jpegQuality: 82 },
  { width: 500, jpegQuality: 80 },
], { allowUpscale: false, mode: 'fit'}) %}

<img sizes="
  (max-width: 500px) 500px,
  (max-width: 750px) 750px,
  (max-width: 1280px) 1300px,
  2000px"
  srcset="{{ craft.imager.srcset(transformed_{{ VARIABLE NAME PASSED HERE }}) }}"
  alt="{{ {{ VARIABLE NAME PASSED HERE }}.title }}" 
  class="full-background-image"/>
<div class="full-gradient"></div>
请随便问任何问题,我相信一定有办法做到这一点, 提前感谢-W

您可以创建类似函数的宏(将运行),请参阅

示例:

{% macro input(name, value, type = "text", size = 20) %}
    <input type="{{ type }}" name="{{ name }}" value="{{ value|e }}" size="{{ size }}"/>
{% endmacro %}

{% macro textarea(name, value, rows = 10, cols = 40) %}
    <textarea name="{{ name }}" rows="{{ rows }}" cols="{{ cols }}">{{ value|e }}</textarea>
{% endmacro %}

所有示例均取自本答案开头链接的来源。您需要将参数化包含放入一些宏中。理想情况下,您可以将参数化的include分离到一个单独的文件中,在该文件中可以实现多个此类宏,导入它并在需要的地方调用这些宏以及所需的参数。

听起来像是在寻找阅读文档-激动人心。。。。。兴奋。。。。。。兴奋。。。。哦,是的,marcos应该可以工作-干杯:)非常感谢你给我指点宏上的文档,是的,这就是我要找的-旁注/跟进-这不是函数(至少从JS的角度来看)太奇怪了-是(或者你认为是)因为细枝的本质是模板,所以措辞是不同的(或者有人只是想重新发明轮子)。@Wally,这是一个很好的问题。我会称之为“函数”,我当然会将它们视为函数。
{% macro input(name, value, type = "text", size = 20) %}
    <input type="{{ type }}" name="{{ name }}" value="{{ value|e }}" size="{{ size }}"/>
{% endmacro %}

{% macro textarea(name, value, rows = 10, cols = 40) %}
    <textarea name="{{ name }}" rows="{{ rows }}" cols="{{ cols }}">{{ value|e }}</textarea>
{% endmacro %}
<p>{{ forms.input('username') }}</p>
<p>{{ forms.input('password', null, 'password') }}</p>