2

I have a section "Hotel Room" with a field "Sleeps" (number). There is no limit on the values that can be entered. On the frontend I want a list of all existing entered values for this field. So if I have these four entries:

  1. sleeps=2
  2. sleeps=2
  3. sleeps=8
  4. sleeps=10

I want an array [2, 2, 8, 10] to iterate over. Bonus points for unique/distinct values, but I'm well aware I can add a Twig filter to array_unique() it.

Is this possible using Craft's craft.entries lookups within Twig?

  • Do I understand this correctly if you want to pull in these vales and add them to an array that you can loop through in your template somewhere else? – naboovalley Dec 3 '14 at 20:25
2

Getting that array is simple. Prepare an empty array, then loop through your entries and merge the "Sleeps" fields value to it.

To get your array with the unique values, you basically do the same but also save the value as the key on each iteration. If a key already exists in the array the key/value pair gets overwritten (→ good for you)!

There's a strange behaviour that setting custom numeric keys doesn't work with Twig, that's why I composed a string out of the value.

{# Prepare variables #}
{% set myArray1 = [] %}
{% set myArray2 = [] %}

{# Loop through entries of the "Hotel Room" section #}
{% for entry in craft.entries.section('hotelRoom') %}

    {% set value = entry.sleeps %}

    {% set myArray1 = myArray1|merge([value]) %}
    {% set myArray2 = myArray2|merge({ ('key' ~ value): value }) %}

{% endfor %}
| improve this answer | |
  • Worked like a charm, thank you. Cunning idea using the key to avoid dupes! – Nick Dunn Dec 12 '14 at 20:38
  • Using this method I've just hit an obvious problem. If the number of entries is high (~1500) Craft simply runs out of memory running this. Could we optimize this? – certainlyakey Jan 29 '16 at 23:49
  • @certainlyakey I don't think so, not without switching to PHP in a custom plugin. You might want to open a new question for this... – carlcs Jan 30 '16 at 0:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.