Skip to content

튜토리얼: Liquid 코드 작성하기

Liquid에 처음이신가요? 이 튜토리얼은 초보자 친화적인 사용 사례를 위해 Liquid 코드 작성 시작하는 데 도움이 될 것입니다. 각 튜토리얼은 조건 논리 및 연산자와 같은 다양한 학습 목표의 조합을 다룹니다.

이 튜토리얼을 마치면 다음을 할 수 있습니다:

  • 일반적인 사용 사례에 대한 Liquid 코드 작성하기
  • 사용자 데이터에 따라 메시지를 개인화하기 위해 Liquid 조건 논리 연결하기
  • 변수와 필터를 사용하여 속성의 값을 사용하는 방정식 작성하기
  • Liquid 코드의 기본 명령을 인식하고 코드가 수행하는 작업에 대한 일반적인 이해 형성하기
튜토리얼 학습 목표
사용자 세그먼트에 대한 메시지 개인화 기본값, 조건 논리
버려진 장바구니 알림 연산자, 조건 논리
이벤트 카운트다운 변수, 날짜 필터
매월 생일 메시지 변수, 날짜 필터, 연산자
좋아하는 제품 홍보 변수, 날짜 필터, 방정식, 연산자

사용자 세그먼트 {#segments}에 대한 개인화된 메시지

VIP 고객 및 신규 구독자와 같은 다양한 사용자 세그먼트에 맞게 메시지를 사용자 정의해 보겠습니다.

  1. 사용자의 이름이 있을 때와 없을 때 보낼 개인화된 인사말로 메시지를 열어보세요. 이를 위해 first_name 속성을 포함하고 first_name가 비어 있을 경우 사용할 기본값을 포함하는 Liquid 태그를 생성합니다. 이 시나리오에서는 기본값으로 “여행자”를 사용해 보겠습니다.
1
Happy summer, {{${first_name} | default: "traveler"}}!

2. 이제 사용자가 VIP 고객인 경우 보낼 메시지를 제공하겠습니다. 이를 위해 조건부 논리 태그 if를 사용해야 합니다. 이 태그는 vip_status 사용자 정의 속성이 VIP와 같으면 다음 Liquid가 수행된다고 말합니다. 이 경우 특정 메시지가 전송됩니다.

1
2
{% if {{custom_attribute.${vip_status}}} == 'VIP' %}
Thank you for being a VIP customer! Enjoy your exclusive discount code: VIPSUMMR464.

3. 신규 구독자에게 맞춤형 메시지를 보내보겠습니다. 사용자의 vip_statusnew인 경우 다음 메시지를 전송하도록 조건부 논리 태그 elsif를 사용하겠습니다.

1
2
{% elsif {{custom_attribute.${vip_status}}} == 'new' %}
Thank you for subscribing! Enjoy your welcome discount code: NEWTRAVEL257.

4. VIP 또는 신규가 아닌 사용자들은 어떻게 하나요? 우리는 else 태그를 사용하여 모든 다른 사용자에게 메시지를 보낼 수 있습니다. 이 태그는 이전 조건이 충족되지 않을 경우 다음 메시지를 보내야 함을 지정합니다. 그런 다음 endif 태그로 조건부 논리를 닫을 수 있습니다. 더 이상 고려할 VIP 상태가 없기 때문입니다.

1
2
3
{% else %}
Thanks for traveling with us! Enjoy your unique discount code: SUMMRTRVLS240.
{% endif %}
Full Liquid code
1
2
3
4
5
6
7
8
Happy summer, {{${first_name} | default: "traveler"}}!
{% if {{custom_attribute.${vip_status}}} == 'VIP' %}
Thank you for being a VIP customer! Enjoy your exclusive discount code: VIPSUMMR464.
{% elsif {{custom_attribute.${vip_status}}} == 'new' %}
Thank you for subscribing! Enjoy your welcome discount code: NEWTRAVEL257.
{% else %}
Thanks for traveling with us! Enjoy your unique discount code: SUMMRTRVLS240.
{% endif %}

버려진 장바구니 알림

사용자에게 장바구니에 남아 있는 항목을 상기시키기 위해 개인화된 메시지를 보내봅시다. 장바구니에 있는 항목 수에 따라 추가로 사용자화하여, 항목이 세 개 이하인 경우 모든 항목을 나열합니다. 항목이 세 개를 초과하는 경우, 더 간결한 메시지를 보낼 것입니다.

  1. 사용자의 장바구니가 비어 있는지 확인하기 위해 != 연산자를 사용하여 Liquid 조건부 논리를 열어봅시다. 이는 “같지 않다”는 의미입니다. 이 경우, 우리는 사용자 정의 속성 cart_items가 빈 값과 같지 않도록 조건을 설정할 것입니다.
1
{% if {{custom_attribute.${cart_items}}} != blank %}

2. 그런 다음, 장바구니에 세 개 이상의 항목이 있는지 확인하기 위해 `>` 연산자를 사용하여 초점을 좁혀야 합니다. 이는 “보다 크다”는 의미입니다.

1
{% if {{custom_attribute.${cart_items}}} | size > 3 %}

3. 사용자를 이름으로 인사하는 메시지를 작성하거나, 이름이 없을 경우 기본값으로 “거기”를 사용합니다. 장바구니에 세 개 이상의 항목이 있을 경우 명시해야 할 내용을 포함합니다. 사용자를 압도하지 않기 위해 전체 목록을 나열하고 싶지 않으므로, 처음 세 개의 cart_items를 나열합시다.

1
Hi {{${first_name} | default: 'there'}}, don't forget to complete your purchase! Your items {{custom_attribute.${cart_items[0]}}}, {{custom_attribute.${cart_items[1]}}}, {{custom_attribute.${cart_items[2]}}}, and others are waiting for you.

4. 이전 조건이 충족되지 않을 경우(즉, cart_items가 비어 있거나 세 개 미만인 경우) 발생해야 할 일을 지정하기 위해 else 태그를 사용하고, 보낼 메시지를 제공합니다. 세 개의 항목은 많은 공간을 차지하지 않기 때문에, 우리는 모두 나열할 수 있습니다. 우리는 Liquid 연산자 join,를 사용하여 항목이 쉼표로 구분되어 나열되도록 지정할 것입니다. 논리를 endif로 닫습니다.

1
2
3
{% else %}
Hi {{${first_name} | default: 'there'}}, don't forget to complete your purchase! Your items: {{{custom_attribute.${cart_items}}} | join: ', '}  are waiting for you. 
{% endif %}

5. else를 사용한 다음 abort_message를 사용하여 장바구니가 이전 조건을 충족하지 않을 경우 메시지를 보내지 않도록 Liquid 코드에 지시합니다. 다시 말해, 장바구니가 비어 있는 경우입니다. 논리를 endif로 닫습니다.

1
2
3
{% else %}
{% abort_message('No items in cart') %}
{% endif %}
Full Liquid code
1
2
3
4
5
6
7
8
9
{% if {{custom_attribute.${cart_items}}} != blank %}
{% if {{custom_attribute.${cart_items}}} | size > 3 %}
Hi {{${first_name} | default: 'there'}}, don't forget to complete your purchase! Your items {{custom_attribute.${cart_items[0]}}}, {{custom_attribute.${cart_items[1]}}}, {{custom_attribute.${cart_items[2]}}}, and others are waiting for you.
{% else %}
Hi {{${first_name} | default: 'there'}}, don't forget to complete your purchase! Your items: {{{custom_attribute.${cart_items}}} | join: ', '}  are waiting for you.
{% endif %}
{% else %}
{% abort_message('No items in cart') %}
{% endif %}

이벤트 카운트다운

기념일 세일까지 남은 일수를 사용자에게 알리는 메시지를 보내겠습니다. 이를 위해 변수들을 사용하여 속성 값들을 조작하는 방정식을 만들겠습니다.

  1. 먼저, 변수 sale_date을 사용자 정의 속성 anniversary_date에 할당하고 date: "s" 필터를 적용하겠습니다. 이것은 anniversary_date를 초 단위로 표현된 타임스탬프 형식으로 변환한 후, 그 값을 sale_date에 할당합니다.
1
{% assign sale_date = {{custom_attribute.${anniversary_date}}} | date: "%s" %}

2. 오늘의 타임스탬프를 캡처할 변수를 할당해야 합니다. 변수 todaynow (현재 날짜 및 시간)에 할당한 후, date: "%s" 필터를 적용하겠습니다.

1
{% assign today =  'now' | date: "%s"  %}

3. 이제 현재 (today)와 기념일 세일 (sale_date) 사이의 초 수를 계산해 보겠습니다. 이를 위해 변수 differencesale_date에서 today을 뺀 값으로 설정합니다.

1
{% assign difference =  event_date | minus: today %}

4. 이제 difference를 메시지에서 참조할 수 있는 값으로 변환해야 합니다. 세일까지 남은 초 수를 사용자에게 알려주는 것은 이상적이지 않습니다. 변수 difference_daysevent_date에 할당하고 86400로 나누어 일 수를 구하겠습니다.

1
{% assign difference_days = difference | divided_by: 86400 %}

5. 마지막으로, 보낼 메시지를 생성하겠습니다.

1
Get ready! Our Anniversary Sale is in {{ difference_days }} days!
Full Liquid code
1
2
3
4
5
{% assign sale_date = {{custom_attribute.${anniversary_date}}} | date: "%s" %}
{% assign today =  'now' | date: "%s"  %}
{% assign difference =  event_date | minus: today %}
{% assign difference_days = difference | divided_by: 86400 %}
Get ready! Our Anniversary Sale is in {{ difference_days }} days!

월별 생일 메시지

오늘의 월에 생일이 있는 모든 사용자에게 특별 프로모션을 보내겠습니다. 이번 달에 생일이 없는 사용자에게는 메시지가 전송되지 않습니다.

  1. 먼저, 오늘의 월을 가져오겠습니다. 변수 this_monthnow (현재 날짜 및 시간)에 할당한 후, date: "%B" 필터를 사용하여 변수가 월과 같도록 지정하겠습니다.
1
{% assign this_month = 'now' | date: "%B" %}

2. 이제 사용자의 date_of_birth에서 생일 월을 가져오겠습니다. 변수 birth_monthdate_of_birth에 할당한 후, date: "%B" 필터를 사용하겠습니다.

1
{% assign birth_month = {{${date_of_birth}}} | date: "%B" %}

3. 이제 두 개의 변수가 값으로 월을 가지고 있으므로 조건 논리로 비교할 수 있습니다. 조건을 사용자의 birth_monthdate_of_birth가 같도록 설정합시다.

1
{% if {{this_month}} == {{birth_month}} %}

4. 이번 달이 사용자의 생일 달이라면 보낼 메시지를 만들어 봅시다.

1
We heard {{this_month}} is a special month! Enjoy a 50% discount on your purchase with code BIRTHDAY50 until the end of {{this_month}}.

5. 조건이 충족되지 않을 경우(이번 달이 사용자의 생일 달이 아니기 때문에) 발생하는 일을 지정하기 위해 else 태그를 사용하세요.

1
{% else %} 

6. 사용자의 생일 달이 이번 달이 아닐 경우 메시지를 보내고 싶지 않으므로, abort_message를 사용하여 메시지를 취소한 다음 endif으로 조건 논리를 닫습니다.

1
2
{% abort_message("Not their birthday month") %}
{% endif %}
Full Liquid code
1
2
3
4
5
6
7
{% assign this_month = 'now' | date: "%B" %}
{% assign birth_month = {{${date_of_birth}}} | date: "%B" %}
{% if {{this_month}} == {{birth_month}} %}
We heard {{this_month}} is a special month! Enjoy a 50% discount on your purchase with code BIRTHDAY50 until the end of {{this_month}}.
{% else %} 
{% abort_message("Not their birthday month") %}
{% endif %}

좋아하는 제품 프로모션

사용자의 마지막 구매 날짜가 6개월 이상 지났다면 사용자의 좋아하는 제품을 홍보합시다.

  1. 먼저, 사용자의 좋아하는 제품과 마지막 구매 날짜가 있는지 조건 논리를 사용하여 확인합니다.
1
{% if {{custom_attribute.${favorite_product}}} == blank or {{custom_attribute.${last_purchase_date}}} == blank %}

2. 그런 다음 사용자의 좋아하는 제품이나 마지막 구매 날짜가 없으면 메시지를 보내지 않도록 명시합니다.

1
{% abort_message("No favorite product or last purchase date") %}

3. 위의 조건이 충족되지 않을 경우(우리가 가지고 있는 사용자의 좋아하는 제품과 마지막 구매 날짜가 있기 때문에) 발생해야 할 일을 지정하기 위해 else를 사용합니다.

1
{% else %}

4. 구매 날짜가 있다면, 오늘 날짜와 비교할 수 있도록 변수를 할당해야 합니다. 먼저, 변수 todaynow (현재 날짜 및 시간)으로 할당하여 오늘 날짜의 값을 만들고, date: "%s" 필터를 사용하여 값을 초 단위의 타임스탬프 형식으로 변환합니다. 타임스탬프에 “0”을 추가하기 위해 plus: 0 필터를 추가합니다. 이것은 타임스탬프의 값을 변경하지 않지만, 향후 방정식에서 타임스탬프를 사용하는 데 유용합니다.

1
{% assign today = 'now' | date: "%s" | plus: 0 %}

5. 이제 변수를 last_purchase_date로 할당하여 마지막 구매 날짜를 초 단위로 캡처하고 date: "s" 필터를 사용합니다. 다시 plus: 0 필터를 추가합니다.

1
{% assign last_purchase_date = {{custom_attribute.${last_purchase_date}}} | date: "%s" | plus: 0 %}

6. 마지막 구매 날짜와 오늘 날짜가 초 단위이므로, 6개월이 몇 초인지 계산해야 합니다. 방정식을 만들어 봅시다(약 6개월 * 30.44일 * 24시간 * 60분 * 60초) 그리고 이를 변수 six_months에 할당합니다. 시간 단위의 곱셈을 지정하기 위해 times을 사용합니다.

1
{% assign six_months = 6 | times: 30.44 | times: 24 | times: 60 | times: 60 %}

7. 이제 모든 시간 값이 초 단위로 되어 있으므로, 우리는 그 값을 방정식에 사용할 수 있습니다. 오늘의 값을 가져와서 last_purchase_date을 빼는 today_minus_last_purchase_date라는 변수를 할당해 보겠습니다. 이것은 마지막 구매 이후로 얼마나 많은 초가 지났는지를 알려줍니다.

1
{% assign today_minus_last_purchase_date = {{today | minus: last_purchase_date}} %}

8. 이제 조건 논리에서 우리의 시간 값을 직접 비교해 보겠습니다. 조건을 today_minus_last_purchase_date가 여섯 개월 이상 (>=)인 것으로 정의해 보겠습니다. 다시 말해, 마지막 구매 날짜는 최소한 여섯 개월 전이었습니다.

1
{% if today_minus_last_purchase_date >= six_months %}

9. 마지막 구매가 최소한 여섯 개월 전이었다면 보낼 메시지를 만들어 보겠습니다.

1
We noticed it’s been a while since you last purchased {{custom_attribute.${favorite_product}}}. Have you checked out our latest offerings?

10. 조건이 충족되지 않을 경우(구매가 최소한 여섯 개월 전이 아니었기 때문에) 어떤 일이 일어날지를 지정하기 위해 else 태그를 사용할 것입니다.

1
{% else %}

11. 메시지를 취소하기 위해 abort_message를 포함할 것입니다.

1
{% abort_message("No favorite product or last purchase date") %}

12. 마무리하기 위해, 두 개의 endif 태그로 Liquid를 끝낼 것입니다. 첫 번째 endif는 좋아하는 제품 또는 마지막 구매 날짜에 대한 조건 검사를 닫고, 두 번째 endif는 마지막 구매 날짜가 최소한 여섯 개월 전이라는 조건 검사를 닫습니다.

1
2
{% endif %}
{% endif %}
Full Liquid code
1
2
3
4
5
6
7
8
9
10
11
12
13
{% if {{custom_attribute.${favorite_product}}} == blank or {{custom_attribute.${last_purchase_date}}} == blank %}
{% abort_message("No favorite product or last purchase date") %}
{% else %}
{% assign today = 'now' | date: "%s" | plus: 0 %}
{% assign last_purchase_date = {{custom_attribute.${last_purchase_date}}} | date: "%s" | plus: 0 %}
{% assign six_months = 6 | times: 30.44 | times: 24 | times: 60 | times: 60 %}
{% assign today_minus_last_purchase_date = {{today | minus: last_purchase_date}} %}
{% if today_minus_last_purchase_date >= six_months %}
We noticed it’s been a while since you last purchased {{custom_attribute.${favorite_product}}}. Have you checked out our latest offerings?
{% else %}
{% abort_message("Last purchase was less than six months ago") %}
{% endif %}
{% endif %}
New Stuff!