将模板文字传递给包含
Pass template literals into includes
我想通过将模板文字作为变量传递到树枝 {% includes 'X' %}
中来创建 DRY 代码,以便它们可以在包含代码中使用(下面的示例)。
我看到您可以将变量传递给包含,如下所示:
{% include 'template.html' with {'foo': 'bar'} %}
但由于我的代码将在同一页面上多次使用相同的包含模板,因此我需要在此处进行更多自定义。
理想情况下,我想做的是在调用 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>
基本上就像在 JS 中你可以设置一个函数参数并将该参数输出到函数,但是你可以使用不同的参数多次调用该函数,即
function callName(name) {
console.log(name)
}
callName('DEV-BOY')
#DEV-BOY
callName('BOY-BE_DEV')
#BOY-VE_DEV
请随时提出任何问题,我相信一定有办法做到这一点,
提前致谢 - W
您可以像函数一样创建宏(将运行),请参阅 https://twig.symfony.com/doc/2.x/tags/macro.html
示例:
{% 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 %}
在上面的示例中,您可以看到您将宏包含在 macro
和 endmacro
语句之间。 macro
语句采用您定义的一些参数,如果需要,可能带有默认值。你可以很像函数一样调用它们,例子:
<p>{{ forms.input('username') }}</p>
<p>{{ forms.input('password', null, 'password') }}</p>
所有示例均取自本答案开头链接的来源。您需要将参数化包含放入一些宏中。理想情况下,您可以将参数化包含分离到一个单独的文件中,您可以在其中实现多个此类宏,导入它并使用您需要的参数在需要它们的地方调用宏。
我想通过将模板文字作为变量传递到树枝 {% includes 'X' %}
中来创建 DRY 代码,以便它们可以在包含代码中使用(下面的示例)。
我看到您可以将变量传递给包含,如下所示:
{% include 'template.html' with {'foo': 'bar'} %}
但由于我的代码将在同一页面上多次使用相同的包含模板,因此我需要在此处进行更多自定义。
理想情况下,我想做的是在调用 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>
基本上就像在 JS 中你可以设置一个函数参数并将该参数输出到函数,但是你可以使用不同的参数多次调用该函数,即
function callName(name) {
console.log(name)
}
callName('DEV-BOY')
#DEV-BOY
callName('BOY-BE_DEV')
#BOY-VE_DEV
请随时提出任何问题,我相信一定有办法做到这一点, 提前致谢 - W
您可以像函数一样创建宏(将运行),请参阅 https://twig.symfony.com/doc/2.x/tags/macro.html
示例:
{% 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 %}
在上面的示例中,您可以看到您将宏包含在 macro
和 endmacro
语句之间。 macro
语句采用您定义的一些参数,如果需要,可能带有默认值。你可以很像函数一样调用它们,例子:
<p>{{ forms.input('username') }}</p>
<p>{{ forms.input('password', null, 'password') }}</p>
所有示例均取自本答案开头链接的来源。您需要将参数化包含放入一些宏中。理想情况下,您可以将参数化包含分离到一个单独的文件中,您可以在其中实现多个此类宏,导入它并使用您需要的参数在需要它们的地方调用宏。