Shopify 部分中的 forloop.index 问题
Issue with forloop.index in Shopify Section
我正在处理 Shopify 中的动态选项卡部分,但遇到了问题。我创建了两个循环,一个用于选项卡的 href 标记,第二个用于关联的内容元素。我需要前者来引用后者,但在我当前的代码中,href 标签中的输出显示 1 或 2,但在标签内容中,它们从 3 开始。请帮助我!
我的HTML/Liquid:
<ul class="tabs-nav">
{%- for block in section.blocks -%}
{% if block.type == 'tab-title' %}
<li class="tab-active">
<a href="#tab-{{ forloop.index | plus: 1 }}">
{{ block.settings.serv_title }}
</a>
</li>
{% endif %}
{%- endfor -%}
</ul>
<div class="tabs-stage">
{%- for block in section.blocks -%}
{% if block.type == 'tab-content' %}
<div id="tab-{{ forloop.index }}" style="display: block;">
{{ block.settings.serv_cont }}
</div>
{% endif %}
{%- endfor -%}
</div>
我的JavaScript:
$('.tabs-nav a').on('click', function (event) {
event.preventDefault();
$('.tab-active').removeClass('tab-active');
$(this).parent().addClass('tab-active');
$('.tabs-stage div').hide();
$($(this).attr('href')).show();
});
$('.tabs-nav a:first').trigger('click');
我认为问题出在您的设置架构的结构上。听起来您目前分别拥有标题块和内容块的架构(并且使用您当前的配置设置数据,您总共有四个块。)您可以改为拥有一个块的架构,其中包含相关的标题和内容。然后你只需要使用一个 for 循环(虽然你必须捕获标题,捕获内容,并将每个输出到你的 HTML 中......
也就是说,使用您现有的代码,您可以做到这一点(假设您的设置数据中始终有相同数量的标题和内容块,并且它们在 drag/drop 编辑器中的顺序正确):
<ul class="tabs-nav">
{%- assign titleIndex = 0 -%}
{%- for block in section.blocks -%}
{% if block.type == 'tab-title' %}
{%- assign titleIndex = 0 | plus: 1 -%}
<li class="tab-active">
<a href="#tab-{{ titleIndex }}">
{{ block.settings.serv_title }}
</a>
</li>
{% endif %}
{%- endfor -%}
</ul>
<div class="tabs-stage">
{%- assign contentIndex = 0 -%}
{%- for block in section.blocks -%}
{% if block.type == 'tab-content' %}
{%- assign contentIndex = 0 | plus: 1 -%}
<div id="tab-{{ contentIndex }}" style="display: block;">
{{ block.settings.serv_cont }}
</div>
{% endif %}
{%- endfor -%}
</div>
我正在处理 Shopify 中的动态选项卡部分,但遇到了问题。我创建了两个循环,一个用于选项卡的 href 标记,第二个用于关联的内容元素。我需要前者来引用后者,但在我当前的代码中,href 标签中的输出显示 1 或 2,但在标签内容中,它们从 3 开始。请帮助我!
我的HTML/Liquid:
<ul class="tabs-nav">
{%- for block in section.blocks -%}
{% if block.type == 'tab-title' %}
<li class="tab-active">
<a href="#tab-{{ forloop.index | plus: 1 }}">
{{ block.settings.serv_title }}
</a>
</li>
{% endif %}
{%- endfor -%}
</ul>
<div class="tabs-stage">
{%- for block in section.blocks -%}
{% if block.type == 'tab-content' %}
<div id="tab-{{ forloop.index }}" style="display: block;">
{{ block.settings.serv_cont }}
</div>
{% endif %}
{%- endfor -%}
</div>
我的JavaScript:
$('.tabs-nav a').on('click', function (event) {
event.preventDefault();
$('.tab-active').removeClass('tab-active');
$(this).parent().addClass('tab-active');
$('.tabs-stage div').hide();
$($(this).attr('href')).show();
});
$('.tabs-nav a:first').trigger('click');
我认为问题出在您的设置架构的结构上。听起来您目前分别拥有标题块和内容块的架构(并且使用您当前的配置设置数据,您总共有四个块。)您可以改为拥有一个块的架构,其中包含相关的标题和内容。然后你只需要使用一个 for 循环(虽然你必须捕获标题,捕获内容,并将每个输出到你的 HTML 中......
也就是说,使用您现有的代码,您可以做到这一点(假设您的设置数据中始终有相同数量的标题和内容块,并且它们在 drag/drop 编辑器中的顺序正确):
<ul class="tabs-nav">
{%- assign titleIndex = 0 -%}
{%- for block in section.blocks -%}
{% if block.type == 'tab-title' %}
{%- assign titleIndex = 0 | plus: 1 -%}
<li class="tab-active">
<a href="#tab-{{ titleIndex }}">
{{ block.settings.serv_title }}
</a>
</li>
{% endif %}
{%- endfor -%}
</ul>
<div class="tabs-stage">
{%- assign contentIndex = 0 -%}
{%- for block in section.blocks -%}
{% if block.type == 'tab-content' %}
{%- assign contentIndex = 0 | plus: 1 -%}
<div id="tab-{{ contentIndex }}" style="display: block;">
{{ block.settings.serv_cont }}
</div>
{% endif %}
{%- endfor -%}
</div>