0
votes

I'm new to liquid coding while starting my own Shopify store (although I had some experience with coding). I'm currently stuck trying to get this code to function. I've added 3 text options in the liquid file for each variable. The idea is that when the criteria are met, it would display the appropriate text option. Please see the code string here for ref.

  {% if section.settings.free_shipping_announcement_bar %}
    
        {% assign promote_text = section.settings.promote_free_shipping_text | escape %}
        {% assign unlocked_text = section.settings.unlocked_free_shipping_text | escape %}
        {% assign unlocked_del_text = section.settings.unlocked_free_delivery_text | escape %}
        {% assign threshold = section.settings.free_shipping_threshold | times: 100 %}
        
        {% assign value_left = threshold | minus:cart.total_price %}
        {% assign value_left_money = value_left | money %}

         <div class="announcement-bar">
       
             {% if value_left <= 0 %}
            <p class="announcement-bar__message">{{unlocked_text}}</p>  
           
           {% elsif value_left >= 1 and value_left < 50 %}
            <p class="announcement-bar__message">{{unlocked_del_text}}</p>
           

           {% else %}
            <p class="announcement-bar__message">{{promote_text | replace:'(value)' , value_left_money}}</p>
           {% endif %}

basically, the idea is if the cart total is between $0-$99 I will show the "promote_text", if it's between $100-$149 it will show the "Unlocked_free_del_text"(free delivery), then at $150+ in the cart it shows "unlocked_text".

It currently shows the "promote_text" from $0-$149 then changes directly to the "unlocked_text" and skips the middle section for "unlocked_del_text"

my best assumption is that I'm using the elsif function wrong but I've trailed as many adjustments as I can think of without breaking the code, so any advice would be greatly appreciated!

2

2 Answers

0
votes

Thanks for the quick response! I trialed the snippet you added but unfortunately ran into the same issue. here is the schema that I added to impact the section of code I input. If you are able to spot a simple issue in here please let me know, otherwise, I will continue to troubleshoot personally and hopefully find a solution or alternate method, to avoid troubling someone with having to replicate the entire code to recreate the issue.

{
    "type":"checkbox",
    "label":"enable free shipping bar",
    "id":"free_shipping_announcement_bar",
    "default":false
},
{
    "type":"text",
    "id":"promote_free_shipping_text",
    "label":"message to promote free shipping"
},
{
    "type":"text",
    "id":"unlocked_free_shipping_text",
    "label":"message for unlocked free shipping"
},
{
    "type":"text",
    "id":"unlocked_free_delivery_text",
    "label":"message for unlocked free delivery"
},
{
    "type":"range",
    "id":"free_shipping_threshold",
    "label":"threshold for free shipping",
    "min":0,
    "max":200,
    "step":5,
    "unit":"$",
    "default":150
}
0
votes

Update: After checking and testing the code over dev store I find you need to use divided_by to value_left value to compare with the value into normalized format.

so your code needs an update to this line

{% assign value_left = threshold | minus:cart.total_price | divided_by: 100%}

becase case is multile of 100 to process to cart value and need to normalized before test into if else condition.

The code looks great, I am not sure why this not works properly, you can check and try in this way also and I hope it will work. overwise you need to post the whole code along with schema and anyone replicate it dev store and find the solution.

{% if section.settings.free_shipping_announcement_bar %}    
     {% assign promote_text = section.settings.promote_free_shipping_text | escape %}
     {% assign unlocked_text = section.settings.unlocked_free_shipping_text | escape %}
     {% assign unlocked_del_text = section.settings.unlocked_free_delivery_text | escape %}  
     {% assign threshold = section.settings.free_shipping_threshold | times: 100 %}
     

     {% assign value_left = threshold | minus:cart.total_price | divided_by: 100%}

     {% assign value_left_money = value_left | money %}
     <div class="announcement-bar">       
        {% if value_left <= 0 %}
             <p class="announcement-bar__message">{{unlocked_text}}</p>             
        {% elsif value_left >= 1 and value_left < 50 %}
            <p class="announcement-bar__message">{{unlocked_del_text}}</p>
        {% else %}            
            <p class="announcement-bar__message">{{promote_text | replace:'(value)' , value_left_money}}</p>
        {% endif %}
     </div>
   {% endif %}