Liquid
لغة Liquid هي لغة قوالب آمنة وموجَّهة للعملاء لتطبيقات الويب المرنة، وهي لغة قوالب مفتوحة المصدر أنشأتها منصة شوبيفاي Shopify وكُتِبت بلغة روبي Ruby، وهي العمود الفقري لقوالب شوبيفاي وتُستخدَم لتحميل محتوى ديناميكي على واجهات المتاجر.
اُستخدِمت لغة Liquid في الإنتاج ضمن شوبيفاي منذ عام 2006 وتستخدمها الآن تطبيقات استضافة ويب أخرى متعددة.
يمكنك تنزليها أو الاطلاع عليها على GitHub.
مدخل إلى لغة Liquid
تستخدم لغة Liquid مزيجًا من الكائنات objects والوسوم tags والمرشّحات filters ضمن ملفات القالب template لعرض محتوى ديناميكي متغير.
الكائنات Objects
تحتوي الكائنات على المحتوى الذي تعرضه لغة Liquid على الصفحة، حيث تُعرَض الكائنات والمتغيرات عند وضعها ضمن أقواس معقوصة مزدوجة {{
و }}
.
{{ page.title }}
الخرج:
Introduction
تعرض لغة Liquid في هذه الحالة محتوى خاصية العنوان title
لكائن الصفحة page
الذي يحتوي على النص Introduction
.
الوسوم Tags
تُنشِئ الوسوم منطق وتحكم تدفق القوالب. لا تنتج محدّدات النسبة المئوية للقوس المعقوص {%
و %}
والنص المُحاط بهما أيَّ خرج مرئي عند تصيير rendered القالب. يتيح لك هذا إسناد متغيرات وإنشاء شروط أو حلقات بدون إظهار منطق لغة Liquid على الصفحة.
{% if user %}
Hello {{ user.name }}!
{% endif %}
خرج الشيفرة:
Hello Adam!
يمكن تصنيف الوسوم إلى أنواع مختلفة هي:
- التحكم بسير أو تدفق تنفيذ الشيفرة Control flow
- التكرار أو المرور على العناصر Iteration
- قوالب Template
- إسناد متغيرات Variable assignment
اطّلع على المزيد عن كل نوع من الوسوم في الأقسام الخاصة بها.
المرشحات Filters
تغيّر المرشحات خرج كائن أو متغيّر لغة Liquid، وتُستخدَم ضمن الأقواس المزدوجة المعقوصة {{ }}
والوسوم ذات النوع إسناد متغيرات variable assignment ويُفصَل بينهما بمحرف الشريط العمودي |
.
{{ "/my/fancy/url" | append: ".html" }}
الخرج:
/my/fancy/url.html
يمكن استخدام مرشّحات متعددة على خرج واحد، إذ تُطبَّق المرشّحات من اليسار إلى اليمين:
{{ "adam!" | capitalize | prepend: "Hello " }}
الخرج:
Hello Adam!
التطبيقات التي تستخدم لغة Liquid
الأساسيات
المعاملات Operators
شرح المعاملات المنطقية ومعاملات موازنة متعددة التي تحتويها Liquid، ويمكنك استخدام هذه المعاملات لإنشاء منطق مع الوسوم ذات النوع control flow (تحكم في تدفق أو خط سير الشيفرة).
نوعا القيم الصحيحة Truthy والخطأ Falsy في Liquid
يشرح هذا القسم أنواع البيانات التي تُقيَّم على أنها صح true
أو خطأ false
.
أنواع البيانات في لغة Liquid
تشرح هذه الصفحة أنواع البيانات التي تحويها لغة Liquid وكيفية التعامل معها.
إصدارات Liquid
يعرض الإصدارات الأكثر شيوعًا من لغة Liquid الموجودة وهي Liquid و Shopify Liquid و Jekyll Liquid.
التحكم بالمسافات الفارغة Whitespace في Liquid
تتيح Liquid آليةً للتحكم بالمسافات الفارغة عند تصيير الشيفرة وطباعتها في قالب HTML، إذ يُحوَّل أي سطر من شيفرة Liquid في القالب إلى سطر إضافي ضمن ملف HTML المصيَّر حتى إن لم يحتوي ذلك السطر على نص لطباعته فيه، لذا وجب توفير آلية للتحكم بتلك الأسطر والمسافات الفارغة.
الوسوم Tags
وسوم التحكم في تدفق وسير التنفيذ في Liquid
يعرض وسوم التحكم في تدفق وسير التنفيذ Control flow tags التي تحدّد تنفيذ كتل شيفرة Liquid أم لا وتتحكم في تدفق سير تنفيذ شيفرة Liquid.
وسوم التكرار Iteration في Liquid
يعرض الوسوم التكرارية التي تحويها Liquid والتي تنفِّذ كتلًا من الشيفرة تكراريًا.
وسوم القالب Template tags
يعرض الوسوم الخاصة بالقالب التي تحويها Liquid والتي تخبر لغةَ Liquid بمكان تعطيل معالجة التعليقات أو الشيفرة التي ليست تابعة للغة Liquid، وكيفية إنشاء علاقات بين ملفات القوالب.
وسوم المتغيرات في Liquid
يعرض الوسوم الخاصة بالمتغيرات التي تنشئ متغيرات Liquid جديدة.
المرشحات Filters
يعرض هذا القسم كل المرشحات الموجودة في Liquid، وسنسردها ضمن قائمة لسهولة الوصول إليها:
abs
يعيد هذا المرشّح قيمة العدد المطلقة.
append
يضيف هذا المرشّح سلسلة نصية محدَّدة إلى نهاية سلسلة نصية أخرى.
at_least
يحدّد قيمة عددٍ ما بالقيمة الدنيا.
at_most
يحدّد قيمة عددٍ ما بالقيمة العليا.
capitalize
يجعل هذا المرشّح الحرف الأول من سلسلة نصية باللغة الإنجليزية حرفًا كبيرًا ويحوّل الأحرف المتبقية إلى أحرف صغيرة.
ceil
يقرّب هذا المرشّح الدخل إلى أقرب وأكبر عدد صحيح، إذ تحاول لغة Liquid تحويل الدخل إلى عدد قبل تطبيق المرشّح.
compact
يزيل هذا المرشّح أي قيم nil
من المصفوفة.
concat
يربط هذا المرشّح (أو يضم معًا) مصفوفات متعددة، إذ تحتوي المصفوفة الناتجة على جميع العناصر من مصفوفات الدخل.
date
يحوّل هذا المرشّح علامة زمنية timestamp إلى تنسيق تاريخ date آخر.
default
يضبط قيمة افتراضية للمتغير الذي لا يملك قيمة مُسنَدة.
divided_by
يقسم هذا المرشّح عددًا على عددٍ آخر.
downcase
يجعل هذا المرشّح كل حرف في سلسلة نصية بحالة الأحرف الصغيرة، وليس له تأثير على السلاسل النصية التي تتكون من أحرف صغيرة مسبقًا.
escape
يطبّق هذا المرشّح عملية الهروب على سلسلة نصية.
escape_once
يطبّق عملية الهروب على سلسلة نصية بدون تغيير الكيانات المُطبَّق عليها الهروب مسبقًا.
first
يعيد هذا المرشّح العنصر الأول من مصفوفة.
floor
يقرّب هذا المرشّح الدخل إلى أقرب وأصغر عدد صحيح.
join
يدمج هذا المرشّح العناصر الموجودة في مصفوفة ضمن سلسلة نصية واحدة باستخدام وسيطه كفاصل بينها.
last
يعيد هذا المرشّح العنصر الأخير من مصفوفة.
lstrip
يزيل هذا المرشّح كل المسافات (مسافات tab والمسافات الفارغة والأسطر الجديدة) من جانب السلسلة النصية الأيسر، ولا يؤثر على المسافات بين الكلمات.
map
يُنشئ هذا المرشّح مصفوفة من القيم عن طريق استخراج قيم خاصيةٍ مسمَّاة من كائن آخر.
minus
يطرح عددًا من عدد آخر.
modulo
يعيد هذا المرشّح الباقي من عملية قسمة.
newline_to_br
يدخل هذا المرشّح الفاصل السطري (<br />
) الخاص بلغة HTML أمام كل سطر جديد (\n
) في سلسلة نصية.
plus
يجمع هذا المرشّح عددين.
prepend
يضيف هذا المرشّح سلسلة نصية محدَّدة إلى بداية سلسلة نصية أخرى.
remove
يزيل كل ظهور لسلسلة نصية فرعية محدَّدة من سلسلة نصية.
remove_first
يزيل الظهور الأول فقط لسلسلة نصية فرعية محدَّدة من سلسلة نصية.
replace
يستبدل هذا المرشّح كلَّ ظهور لوسيطه الأول في سلسلة نصية بوسيطه الثاني.
replace_first
يستبدل الظهور الأول فقط لوسيطه الأول في سلسلة نصية بوسيطه الثاني.
reverse
يعكس هذا المرشّح ترتيب العناصر في مصفوفة، ولكن لا يمكنه عكس سلسلة نصية.
round
يُستخدَم لتقريب عدد إلى أقرب عدد صحيح أو إلى العدد المُمرَّر كوسيط الذي يمثل عدد المنازل العشرية.
rstrip
يزيل كل المسافات (مسافات tab والمسافات الفارغة والأسطر الجديدة) من جانب السلسلة الأيمن، ولا يؤثر على المسافات بين الكلمات.
size
يعيد هذا المرشّح عدد المحارف في سلسلة نصية أو عدد العناصر في مصفوفة.
slice
يعيد هذا المرشّح سلسلة نصية فرعية مؤلفة من محرف واحد أو يعيد سلسلة من عناصر المصفوفة التي تبدأ بالفهرس المحدَّد باستخدام الوسيط الأول.
sort
يرتب هذا المرشّح عناصر المصفوفة بترتيب حسّاس لحالة الأحرف.
sort_natural
يرتب العناصر في مصفوفة بترتيب غير حساس لحالة الأحرف.
split
يقسم هذا المرشّح سلسلة نصية إلى مصفوفة باستخدام وسيطه كفاصل بين العناصر، حيث يُستخدَم المرشّح split
لتحويل العناصر المفصول بينها بفواصل من سلسلة نصية إلى مصفوفة.
strip
يزيل هذا المرشّح كل المسافات (مسافات tabs والمسافات الفارغة والأسطر الجديدة) من جانبي السلسلة النصية الأيسر والأيمن، ولا يؤثر على المسافات بين الكلمات.
strip_html
يزيل وسوم لغة HTML من سلسلة نصية.
strip_newlines
يزيل محارف الأسطر الجديدة (فواصل الأسطر) من سلسلة نصية.
times
يضرب عددًا بعدد آخر.
truncate
يقتطع سلسلة نصية وصولًا إلى عدد المحارف الذي مُرِّر كوسيط.
truncatewords
يقصّر هذا المرشّح من طول السلسلة النصية وصولًا إلى عدد الكلمات الممرَّرة كوسيط.
uniq
يزيل العناصر المكرَّرة في المصفوفة.
upcase
يجعل هذا المرشّح كل حرف في السلسلة النصية حرفًا كبيرًا، وليس له أي تأثير على السلاسل النصية التي تتكوّن كلها من أحرف كبيرة مسبقًا.
url_decode
يفك هذا المرشّح تشفير سلسلة نصية مُشفَّرة كعنوان URL أو مُشفَّرة باستخدام المرشّح url_encode
.
url_encode
يحوّل محارف عنوان URL غير آمن في سلسلة نصية إلى محارف مُشفَّرة كنسبة مئوية.
where
ينشئ هذا المرشّح مصفوفة تتضمن فقط الكائنات التي تملك قيمة خاصية معينة، أو أي قيمة صحيحة truthy افتراضيًا.