4

I'm trying to get all entries that related to one .. three categories, as determined whether their id appears in the query string:

{% set sector = craft.categories.id(craft.request.getQuery('sector')) %}
{% set impact = craft.categories.id(craft.request.getQuery('impact')) %}
{% set topic = craft.categories.id(craft.request.getQuery('topic')) %}

{% for post in craft.entries.section(section).relatedTo('and', sector, impact, topic) %}

This works well if each of sector, impact, and topic are present, but will return nothing if any one of sector, impact, topic is null (i.e. getQuery('') is blank). Can anyone suggest a way I can do this?

Daniel
  • 343
  • 3
  • 8

1 Answers1

5

Completely untested, but try something like:

{% set ids = [] %}

{% if craft.request.getQuery('sector') %}
    {% set ids = ids|merge([craft.request.getQuery('sector')]) %}
{% endif %}

{% if craft.request.getQuery('impact') %}
    {% set ids = ids|merge([craft.request.getQuery('impact')]) %}
{% endif %}

{% if craft.request.getQuery('topic') %}
    {% set ids = ids|merge([craft.request.getQuery('topic')]) %}
{% endif %}

{% if ids|length %}

    {% for post in craft.entries.section(section).relatedTo('and', ids|join(',')) %}
        ....
    {% endfor %}

{% endif %}
Lindsey D
  • 23,974
  • 5
  • 53
  • 110
Brad Bell
  • 67,440
  • 6
  • 73
  • 143