RhymeGuy
RhymeGuy

Reputation: 2112

Timber + ACF - How to get get_row_index() working?

Problem: I would need to get the current layout index from flexible content field. ACF already have built-in functionality for this - https://www.advancedcustomfields.com/resources/get_row_index/

Timber template:

{% extends "base.twig" %}

{% block content %}

    {% for flex_content in post.meta('flex_components') %}
        {{ get_row_index() }} <!-- I'm stuck here -->
        {% include [flex_content.acf_fc_layout|sanitize ~ '.twig'] ignore missing %}
    {% endfor %}

{% endblock %}

My current solution: Is using a simple counter, but I would like to learn how to get this working with get_row_index() function (if is possible).

{% extends "base.twig" %}

{% block content %}

    {% set my_counter = 1 %}
    {% for flex_content in post.meta('flex_components') %}
        {% include [flex_content.acf_fc_layout|sanitize ~ '.twig'] ignore missing %}
        {% set my_counter = my_counter + 1 %}
    {% endfor %}

{% endblock %}

Upvotes: 0

Views: 889

Answers (1)

Gchtr
Gchtr

Reputation: 2794

Unfortunately, you can’t use get_row_index() when using Timber, because that function relies on a global variable set by ACF when using have_rows(), which we don’t have in Timber. This works similar to the WordPress Loop, which Timber tries to get rid of.

In Twig, you can always use the loop variable inside a for loop. This variable provides you with the counter you need.

{% extends "base.twig" %}

{% block content %}
    {{ dump(loop.index) }}

    {% for flex_content in post.meta('flex_components') %}
        {% include [flex_content.acf_fc_layout|sanitize ~ '.twig'] ignore missing %}
    {% endfor %}
{% endblock %}

Upvotes: 4

Related Questions