5

Is it possible to put conditions on the ordering of a loop of entries?

I have two fields: title and alphaTitle. I want to order alphabetically, by alphaTitle if it has a value, otherwise by title. Title will always have a value but I only want to order by title if there is no alphaTitle. I've been having some trouble figuring out if this is possible or how to do it - any chance someone can point me in the right direction?

Brad Bell
  • 67,440
  • 6
  • 73
  • 143
Becky Soll
  • 81
  • 1

1 Answers1

12

There are several ways you could attack this, but probably the easiest is directly from the SQL side with something like this using a SQL CASE statement:

{% set entries = craft.entries.section('news').order('(CASE WHEN field_alphaTitle IS NULL OR field_alphaTitle = "" THEN title ELSE field_AlphaTitle END)').find() %}

<ul>
    {% for entry in entries %}
        <li>TITLE = {{ entry.title }} / ALPHA TITLE = {{ entry.alphaTitle }}</li>
    {% endfor %}
</ul>

Note that is assuming that alphaTitle is a custom field and title is the standard one available to all entries.

Brad Bell
  • 67,440
  • 6
  • 73
  • 143