gpt4 book ai didi

shopify-template - Shopify 部分中的变量范围

转载 作者:行者123 更新时间:2023-12-05 08:41:16 29 4
gpt4 key购买 nike

我试图在我的节文件中使用一个变量,但它似乎没有从它的父模板继承。

例如:

index.liquid

{% assign foo = "bar" %}
{% section 'example' %}

sections/example.liquid

<h1>{{ foo }}</h1>

{% schema %}
{
"name": "Example",
"settings": [
...
]
}
{% endschema %}

不会输出{{ foo }}的值,而我只是得到:<h1></h1>就好像变量从未被定义过一样。

我认为部分会像代码片段一样工作,父模板中定义的任何内容都在包含的代码片段的范围内:

index.liquid

{% assign foo = "bar" %}
{% include 'example' %}

snippets/example.liquid

<h1>{{ foo }}</h1>

我会在哪里得到 <h1>bar</h1>渲染时。

  • 这是错误还是预期的行为?
  • 有没有一种方法可以包含一个部分并使用来自某种形式的外部作用域的变量?

谢谢!

最佳答案

如果这是有意为之的行为,我设法找到了绕过它的方法,并认为我会发布我的不完美但可行解决方案:

sections/example.liquid

<h1><!-- foo --></h1>

您可以使用捕获来获取该部分的内容作为字符串,并在捕获的标记上使用字符串过滤器:

index.liquid

{% assign foo = "bar" %}
{% capture section %}{% section 'example' %}{% endcapture %}
{{ section | replace: '<!-- foo -->', foo }}

您当然可以用您的变量替换任何字符串。但我发现 HTML 注释效果很好,因为如果您忘记运行替换,或者不需要运行替换,则不会呈现任何内容。

如果您想做一些更复杂的事情,例如从该部分删除一些标记,您可以:

sections/example.liquid

<div>

<!-- REMOVE_TITLE? -->
<h1>{{ section.settings.title }}</h1>
<!-- REMOVE_TITLE? -->

<ul>
{% for block in section.blocks %}
<li>{{ block.settings.image | img_url: '300x' | img_tag }}</li>
{% endfor %}
</ul>
</div>

然后你可以这样做:

{% capture section %}{% section 'example' %}{% endcapture %}
{% assign parts = section | split: '<!-- REMOVE_TITLE? -->' %}
{% for part in parts %}
{% assign mod = forloop.index | modulo: 2 %}
{% if mod > 0 %}{{ part }}{% endif %}
{% endfor %}

关于shopify-template - Shopify 部分中的变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50854829/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com