I am sure many of you are more than familiar with Liquid control tags such as if
and else
, but are you familiar with case/when?
Here's how the Shopify docs describe it:
Case/when creates a switch statement to compare a variable with different values. case initializes the switch statement, and when compares its values.
Here's an example:
{% assign handle = 'cake' %} {% case handle %}
{% when 'cake' %}
This is a cake
{% when 'cookie' %}
This is a cookie
{% else %}
This is not a cake nor a cookie
{% endcase %}
In this instance, the output will be determined when the variable called handle
is "equal" to "cake" or is equal to "cookie". If neither condition evaluates to true,
it will output the text after the last else
clause.
If you omit the else
clause and the handle variable never evaluates to true,
no output will be output. This is because the else
clause acts as a fallback in the above example.
Real world example
As nice as our example is, you might be wondering when you might use this in your own theme development.
One example I have used in the past is in relation to banners in a theme. Despite my love of alternate templates, there are occasions where creating a variety of templates simply to display different promotional banners would be very time-consuming. Not only would you have to build the templates, but you'd also have to assign them to each product in turn. A more practical approach is to let Shopify do the heavy lifting for you.
Let's say we wanted to display different promo banners on particular products. One way we could do this is to use product handles and case/when
. This code example will work in a product.liquid
template.
{% assign handle = product.handle %}
{% case handle %}
{% when 'coffee-cup' %}
{% include 'promo-coffee-cup' %}
{% when 'cup-saucer' %}
{% include 'promo-cup-saucer' %}
{% else %}
{% include 'promo-default' %}
{% endcase %}
We start off by creating a variable called handle
and assign it the current value of product.handle
. If you aren't familiar with handles then the docs have a great primer to get you started. Next we instantiate our case
clause. What follows is a series of when
statements.
In our example, if our product handle equals
coffee-cup
then the snippet titled promo-coffee-cup
will be included and Shopify will head right to endcase
and carry on.
Alternatively, if the product handle is equal
to cup-saucer
then the snippet titled promo-cup-saucer
will be included. If the product handle is neither coffee-cup
or cup-saucer
then the else
clause kicks in and the snippet titled promo-default
will be output.
We have achieved quite a lot with a little. We are conditionally loading different snippets depending on the product being viewed and outputting a default promo banner if neither condition is met. We've also achieved this without having to create any alternate templates.
To extend the example, you could simply add in further specific product handles when needed. However, an alternative approach might be needed if you wanted to include tens of different banners. Of course, there's many different ways to achieve the same thing in Liquid and in a future tutorial we'll look at how to use other Liquid constructs such as contains and unless to achieve similar results.
Read more
- An Overview of Liquid: Shopify's Templating Language
- Introducing Online Store 2.0: What it Means For Developers
- How to Manipulate Images with the img_url Filter
- How to Build a Shopify App: The Complete Guide
- Deprecating Sass for Shopify Themes
- Build Forms on Shopify: How to Use Liquid to Build Robust Forms for Shopify Themes
- Building an Accessible Breadcrumb Navigation with Liquid and Shopify
- How to work with Metafields when building Shopify themes
- Understanding Date Formats in Liquid and Shopify
- How URLs Map to Shopify Templates
You might also like: Ways to Customise the img element in Shopify Themes