Types
Các đối tượng Liquid có thể trả về một trong sáu loại sau: String (chuỗi), Number (số), Boolean (hàm luận lý), Nil (vô giá trị), Array (mảng) hoặc EmptyDrop. Biến số Liquid có thể được khởi chạy bằng cách sử dụng tags assign hoặc capture.
Chuỗi
Chuỗi được gán bằng cách đặt toàn bộ giá trị của biến vào trong dấu ngoặc đơn hoặc ngoặc kép.
{% assign my_string = “Hello World!” %}
Số
Số bao gồm số thực và số nguyên.
{% assign my_num = 25 %}
Booleans
Booleans có thể được gán là đúng hoặc sai. Không cần sự trích dẫn nào khi tuyên bố một booleans.
{% assign foo = true %}
{% assign bar = false %}
Nil
Nil là một giá trị rỗng được trả lại khi thực thi một đoạn mã Liquid mà không thể cho ra kết quả. Nó không phải là một chuỗi với các kí tự “nil”.
Nil được xem như là kết quả sai của các khối điều kiện {% if %}
và các tags Liquid khác khi kiểm tra tính chính xác của một tuyên bố. Ví dụ dưới đây thể hiện rằng nếu như không có một mã số theo dõi (tracking number) được nhập vào một fulfillment. Câu lệnh if sẽ không thể trả về văn bản nằm trong nó.
{% if fulfillment.tracking_numbers %}
We have a tracking number!
{% endif %}
Bất cứ tag hay kết quả nào cho ra là nil sẽ không hiển thị bất cứ thứ gì trên màn hình.
Đầu vào
Tracking number: {{ fulfillment.tracking_numbers }}
Đầu ra
Tracking number: A11111
Mảng
Mảng chứa một danh sách của tất cả các loại ký tự.
Truy cập tất cả các items trong một mảng
Để truy cập các item trong một mảng, bạn có thể xâu chuỗi mỗi item trong mảng bằng cách sử dụng tag for hoặc tag tablerow.
Đầu vào
<!-- if product.tags = "sale", "summer", "spring", "wholesale" -->
{% for tag in product.tags %}
{{ tag }}
{% endfor %}
Đầu ra
sale summer spring wholesale
Truy cập một item cụ thể trong một mảng
Bạn có thể sử dụng kí tự móc vuông để truy cập một item cụ thể trong một mảng. Chỉ số của mảng bắt đầu từ 0.
Đầu vào
<!-- if product.tags = "sale", "summer", "spring", "wholesale" -->
{{ product.tags[0] }}
{{ product.tags[1] }}
{{ product.tags[2] }}
{{ product.tags[3] }}
Đầu ra
sale
summer
spring
wholesale
Gán mảng
Không thể gán một mảng trong Liquid. Ví dụ, trong lập trình Java bạn có thể gán mảng như sau:
<script>
var cars = ["Saab", "Volvo", "BMW"];
</script>
Trong Liquid, bạn phải sử dụng bộ lọc split để phá vỡ một chuỗi đơn thành một mảng các chuỗi con.
EmptyDrop
Một đối tượng EmptyDrop được trả về bất cứ khi nào bạn cố gắng truy cập một đối tượng không tồn tại bằng handle (ví dụ một bộ sưu tập, một trang hay một blog đã bị xóa hoặc ẩn đi). Trong ví dụ dưới đây, page_1, page_2 và page_3 đều là các đối tượng EmptyDrop.
{% assign variable = “hello” %}
{% assign page_1 = pages[variable] %}
{% assign page_2 = pages["i-do-not-exist-in-your-store"] %}
{% assign page_3 = pages.this-handle-does-not-belong-to-any-page %}
Các đối tượng EmptyDrop chỉ có một thuộc tính, thuộc tính empty>?
Các bộ sưu tập và các trang có tồn tại thì sẽ không có thuộc tính empty?.
Thuộc tính empty? của chúng là “falsy” , có nghĩa là được gọi từ bên trong câu lệnh if và trả về kết quả false. Khi sử dụng một câu lệnh unless trong các bộ sưu tập và các trang còn tồn tại, thuộc tính empty? sẽ trả về true
Những ứng dụng của thuộc tính empty? trong themes
Sử dụng thuộc tính empty?, bạn có thể kiểm tra xem một trang có tồn tại hay không trước khi truy cập bất cứ thuộc tính nào khác của nó.
{% unless pages.frontpage.empty? %}
<!– We have a page with handle ‘frontpage’ and it’s not hidden.–>
<h1>{{ pages.frontpage.title }}</h1>
<div>{{ pages.frontpage.content }}</div>
{% endunless %}
Việc biết một trang có tồn tại hay không rất quan trọng. Điều đó giúp tránh xuất ra các phần tử HTML rỗng cho trang, ví dụ:
<h1></h1>
<div></div>
Bạn cũng có thể thực hiện cách kiểm tra giống hệt như vậy với các bộ sưu tập:
{% unless collections.frontpage.empty? %}
{% for product in collections.frontpage.products %}
{% include ‘product-grid-item’ %}
{% else %}
<p>We do have a ‘frontpage’ collection but it’s empty.</p>
{% endfor %}
{% endunless %}