微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将模板文字传递给包含

如何解决将模板文字传递给包含

我想通过将模板文字作为变量传递到树枝 {% 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,rows = 10,cols = 40) %}
    <textarea name="{{ name }}" rows="{{ rows }}" cols="{{ cols }}">{{ value|e }}</textarea>
{% endmacro %}

在上面的示例中,您可以看到将宏括在 macroendmacro 语句之间。 macro 语句采用您定义的一些参数,如果需要,可以使用默认值。你可以像函数一样调用它们,例子:

<p>{{ forms.input('username') }}</p>
<p>{{ forms.input('password',null,'password') }}</p>

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。