الفرق بين المراجعتين ل"Liquid/filters"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
سطر 283: سطر 283:
 
|}
 
|}
 
لاحظ أن القيمة ستكون هي الوقت الحالي لآخر إنشاء للصفحة من القالب، وليس وقت تقديم الصفحة إلى المستخدم في حالة التخزين المؤقت أو إنشاء موقع ساكن.
 
لاحظ أن القيمة ستكون هي الوقت الحالي لآخر إنشاء للصفحة من القالب، وليس وقت تقديم الصفحة إلى المستخدم في حالة التخزين المؤقت أو إنشاء موقع ساكن.
 +
 +
=== default ===
 +
يضبط قيمة افتراضية للمتغير الذي لا يملك قيمة مُسنَدة. سيظهر المرشّح <code>default</code> قيمته إذا كان الدخل <code>nil</code> أو <code>false</code> أو فارغ.
 +
 +
لم تُحدَّد قيمة المتغير <code>product_price</code>، لذلك اُستخدِمت القيمة الافتراضية في المثال التالي:
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{{ product_price | default: 2.99 }}
 +
</syntaxhighlight>
 +
|<syntaxhighlight lang="liquid">
 +
2.99
 +
</syntaxhighlight>
 +
|}
 +
حُدِّدت قيمة المتغير <code>product_price</code>، لذلك لم تُستخدَم القيمة الافتراضية في المثال التالي:
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{% assign product_price = 4.99 %}
 +
{{ product_price | default: 2.99 }}
 +
</syntaxhighlight>
 +
 +
 +
<code>4.99</code>
 +
|}
 +
قيمة المتغير <code>product_price</code> فارغة، لذلك اُستخدِمت القيمة الافتراضية في المثال التالي:
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{% assign product_price = "" %}
 +
{{ product_price | default: 2.99 }}
 +
</syntaxhighlight>
 +
|
 +
 +
<code>2.99</code>
 +
|}
 +
 +
=== بالسماح بالقيمة <code>false</code> (خاص بالإصدار 5.0.0) ===
 +
يمكن السماح للمتغيرات أن تعيد القيمة <code>false</code> بدلًا من القيمة الافتراضية من خلال استخدام المعامل <code>allow_false</code>.
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{% assign display_price = false %}
 +
{{ display_price | default: true, allow_false: true }}
 +
</syntaxhighlight>
 +
|
 +
 +
<code>false</code>
 +
|}
 +
 +
=== divided_by ===
 +
يقسم هذا المرشّح عددًا على عددٍ آخر.
 +
 +
تُقرَّب النتيجة إلى أقرب عدد صحيح (كالمرشّح  <code>floor</code>) إذا كان المقسوم عليه عددًا صحيحًا.
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{{ 16 | divided_by: 4 }}
 +
{{ 5 | divided_by: 3 }}
 +
</syntaxhighlight>
 +
|<syntaxhighlight lang="liquid">
 +
4
 +
1
 +
</syntaxhighlight>
 +
|}
 +
 +
==== التحكم بعملية التقريب ====
 +
ينتج عن المرشّح <code>divided_by</code> نتيجة من نوع المقسوم عليه نفسه، أي إذا قسمت على عدد صحيح، فستكون النتيجة عددًا صحيحًا. إذا قسمت على عدد عشري float، فستكون النتيجة عددًا عشريًا.
 +
 +
المقسوم عليه في المثال التالي هو عدد صحيح:
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{{ 20 | divided_by: 7 }}
 +
</syntaxhighlight>
 +
|<syntaxhighlight lang="liquid">
 +
2
 +
</syntaxhighlight>
 +
|}
 +
المقسوم عليه في المثال التالي هو عدد عشري:
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{{ 20 | divided_by: 7.0 }}
 +
</syntaxhighlight>
 +
|<syntaxhighlight lang="liquid">
 +
2.857142857142857
 +
</syntaxhighlight>
 +
|}
 +
 +
==== تغيير أنواع المتغيرات ====
 +
قد ترغب في استخدام متغير كمقسوم عليه، حيث لا يمكنك في هذه الحالة إضافة <code>‎.0</code> لتحويله إلى عدد عشري ببساطة، ولكن يمكنك إسناد <code>assign</code> نسخة محوَّلة من المتغير إلى عدد عشري باستخدام المرشّح <code>times</code>.
 +
 +
سنقسم في المثال التالي على متغير يحتوي على عدد صحيح، لذلك نحصل على عدد صحيح:
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{% assign my_integer = 7 %}
 +
{{ 20 | divided_by: my_integer }}
 +
</syntaxhighlight>
 +
|
 +
 +
<code>2</code>
 +
|}
 +
نضرب المتغير بالعدد <code>1.0</code> باستخدام المرشّح <code>times</code> لنحصل على عدد عشري، ثم نقسمه على عدد عشري بدلًا من ذلك في المثال التالي:
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{% assign my_integer = 7 %}
 +
{% assign my_float = my_integer | times: 1.0 %}
 +
{{ 20 | divided_by: my_float }}
 +
</syntaxhighlight>
 +
|
 +
 +
<code>2.857142857142857</code>
 +
|}
 +
 +
=== downcase ===
 +
يجعل هذا المرشّح كل حرف في سلسلة نصية أحرفًا صغيرة، وليس له تأثير على السلاسل النصية التي تتكون بالفعل من أحرف صغيرة.
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{{ "Parker Moore" | downcase }}
 +
</syntaxhighlight>
 +
|<syntaxhighlight lang="liquid">
 +
parker moore
 +
</syntaxhighlight>
 +
|}
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{{ "apple" | downcase }}
 +
</syntaxhighlight>
 +
|<syntaxhighlight lang="liquid">
 +
apple
 +
</syntaxhighlight>
 +
|}
 +
 +
=== escape ===
 +
يطبّق هذا المرشّح عملية الهروب على سلسلة نصية عن طريق استبدال المحارف بتسلسلات الهروب escape sequences (بحيث يمكن استخدام هذه السلسلة في عنوان URL مثلًا)، ولا يغيّر السلاسل النصية التي ليس لديها أي شيء لتطبيق عملية الهروب عليه.
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{{ "Have you read 'James & the Giant Peach'?" | escape }}
 +
</syntaxhighlight>
 +
|<syntaxhighlight lang="liquid">
 +
Have you read &#39;James &amp; the Giant Peach&#39;?
 +
</syntaxhighlight>
 +
|}
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{{ "Tetsuro Takara" | escape }}
 +
</syntaxhighlight>
 +
|<syntaxhighlight lang="liquid">
 +
Tetsuro Takara
 +
</syntaxhighlight>
 +
|}
 +
 +
=== escape_once ===
 +
يطبّق عملية الهروب على سلسلة نصية بدون تغيير الكيانات المُطبَّق عليها الهروب مسبقًا، ولا يغيّر السلاسل النصية التي ليس لديها أي شيء لتطبيق عملية الهروب عليه.
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{{ "1 < 2 & 3" | escape_once }}
 +
</syntaxhighlight>
 +
|<syntaxhighlight lang="liquid">
 +
1 &lt; 2 &amp; 3
 +
</syntaxhighlight>
 +
|}
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{{ "1 &lt; 2 &amp; 3" | escape_once }}
 +
</syntaxhighlight>
 +
|<syntaxhighlight lang="liquid">
 +
1 &lt; 2 &amp; 3
 +
</syntaxhighlight>
 +
|}
 +
 +
=== first ===
 +
يعيد هذا المرشّح العنصر الأول من المصفوفة.
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{{ "Ground control to Major Tom." | split: " " | first }}
 +
</syntaxhighlight>
 +
|<syntaxhighlight lang="liquid">
 +
Ground
 +
</syntaxhighlight>
 +
|}
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{% assign my_array = "zebra, octopus, giraffe, tiger" | split: ", " %}
 +
 +
{{ my_array.first }}
 +
</syntaxhighlight>
 +
|
 +
 +
<code>zebra</code>
 +
|}
 +
يمكنك استخدام المرشّح <code>first</code> مع الصيغة النقطية عندما تحتاج إلى استخدام المرشّح ضمن وسم:<syntaxhighlight lang="liquid">
 +
{% if my_array.first == "zebra" %}
 +
  Here comes a zebra!
 +
{% endif %}
 +
</syntaxhighlight>
 +
 +
=== floor ===
 +
يقرّب هذا المرشّح الدخل إلى أقرب عدد صحيح. تحاول لغة Liquid تحويل الدخل إلى عدد قبل تطبيق المرشح.
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{{ 1.2 | floor }}
 +
{{ 2.0 | floor }}
 +
{{ 183.357 | floor }}
 +
</syntaxhighlight>
 +
|<syntaxhighlight lang="liquid">
 +
1
 +
2
 +
183
 +
</syntaxhighlight>
 +
|}
 +
قيمة الدخل في المثال التالي عبارة عن سلسلة نصية:
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{{ "3.5" | floor }}
 +
</syntaxhighlight>
 +
|<syntaxhighlight lang="liquid">
 +
3
 +
</syntaxhighlight>
 +
|}
 +
 +
=== join ===
 +
يدمج هذا المرشّح العناصر الموجودة في مصفوفة في سلسلة نصية واحدة باستخدام الوسيط كفاصل بينها.
 +
{| class="wikitable"
 +
!الدخل
 +
!الخرج
 +
|-
 +
|<syntaxhighlight lang="liquid">
 +
{% assign beatles = "John, Paul, George, Ringo" | split: ", " %}
 +
 +
{{ beatles | join: " and " }}
 +
</syntaxhighlight>
 +
|
 +
 +
<code>John and Paul and George and Ringo</code>
 +
|}

مراجعة 10:58، 3 أغسطس 2021

المرشّحات Filters

abs

يعيد هذا المرشّح قيمة عدد المطلقة.

الدخل
{{ -17 | abs }}
{{ 4 | abs }}
الخرج
17

4

يعمل المرشّح abs أيضًا مع سلسلة نصية تحتوي على عدد فقط.

الدخل
{{ "-19.86" | abs }}
الخرج
19.86

append

يضيف هذا المرشّح السلسلة النصية المحددة إلى نهاية سلسلة نصية أخرى.

الدخل
{{ "/my/fancy/url" | append: ".html" }}
الخرج
/my/fancy/url.html

يمكن للمرشّح append أيضًا قبول متغير كوسيطٍ له.

الدخل الخرج
{% assign filename = "/index.html" %}
{{ "website.com" | append: filename }}
website.com/index.html

at_least (خاص بالإصدار 4.0.1)

يَحُدّ من عددٍ ما إلى حد القيمة الأدنى.

الدخل الخرج
{{ 4 | at_least: 5 }}
{{ 4 | at_least: 3 }}
5

4

at_most (خاص بالإصدار 4.0.1)

يَحُدّ من عددٍ ما إلى حد القيمة الأعلى.

الدخل الخرج
{{ 4 | at_most: 5 }}
{{ 4 | at_most: 3 }}
4

3

capitalize

يجعل هذا المرشّح الحرف الأول من سلسلة نصية حرفًا كبيرًا ويحوّل الأحرف المتبقية إلى أحرف صغيرة.

الدخل الخرج
{{ "title" | capitalize }}
Title

يُكتَب الحرف الأول فقط من السلسلة النصية كحرف كبير، لذلك لا تُكتَب الأحرف الأولى من الكلمات اللاحقة بأحرف كبيرة:

الدخل الخرج
{{ "my GREAT title" | capitalize }}
My great title

ceil

يقرّب هذا المرشّح الدخل إلى أقرب عدد صحيح. تحاول لغة Liquid تحويل الدخل إلى عدد قبل تطبيق المرشّح.

الدخل الخرج
{{ 1.2 | ceil }}
{{ 2.0 | ceil }}
{{ 183.357 | ceil }}
2

2

184

سنستخدم في المثال التالي قيمة الدخل كسلسلة نصية:

الدخل الخرج
{{ "3.5" | ceil }}
4

compact (خاص بالإصدار 4.0.0)

يزيل هذا المرشّح أي قيم nil من المصفوفة.

افترض في المثال التالي أن site.pages عبارة عن مجموعة من صفحات محتوى موقع ويب، وبعض هذه الصفحات لها سِمة تسمى category تحدّد فئة محتوى الصفحة. إذا ربطنا map هذه الفئات مع مصفوفة، فقد تكون بعض قيم عناصر المصفوفة nil إن لم تتضمن صفحةٌ ما السمة category.

الدخل الخرج
{% assign site_categories = site.pages | map: "category" %}

{% for category in site_categories %}
- {{ category }}
{% endfor %}
- business
- celebrities
-
- lifestyle
- sports
-
- technology

لكن يمكننا إزالة جميع قيم nil في المصفوفة باستخدام المرشّح compact عند إنشاء المصفوفة site_categories.

الدخل الخرج
{% assign site_categories = site.pages | map: "category" | compact %}

{% for category in site_categories %}
- {{ category }}
{% endfor %}
- business
- celebrities
- lifestyle
- sports
- technology

concat (خاص بالإصدار 4.0.0)

يربط (يضم معًا) مصفوفات متعددة، إذ تحتوي المصفوفة الناتجة على جميع العناصر من مصفوفات الدخل.

الدخل الخرج
{% assign fruits = "apples, oranges, peaches" | split: ", " %}
{% assign vegetables = "carrots, turnips, potatoes" | split: ", " %}

{% assign everything = fruits | concat: vegetables %}

{% for item in everything %}
- {{ item }}
{% endfor %}
- apples
- oranges
- peaches
- carrots
- turnips
- potatoes

يمكنك تجميع مرشّحات concat متعددة معًا لضم أكثر من مصفوفتين.

الدخل الخرج
{% assign furniture = "chairs, tables, shelves" | split: ", " %}

{% assign everything = fruits | concat: vegetables | concat: furniture %}

{% for item in everything %}
- {{ item }}
{% endfor %}
- apples
- oranges
- peaches
- carrots
- turnips
- potatoes
- chairs
- tables
- shelves

date

يحوّل هذا المرشّح العلامة الزمنية timestamp إلى تنسيق تاريخ date آخر، فتنسيق هذه الصيغة هو strftime نفسه. يستخدم الدخل تنسيق Time.parse الخاص بلغة روبي Ruby نفسه.

الدخل الخرج
{{ article.published_at | date: "%a, %b %d, %y" }}
Fri, Jul 17, 15
الدخل الخرج
{{ article.published_at | date: "%Y" }}
2015

يعمل المرشّح date مع السلاسل النصية إذا احتوت على تواريخ جيدة التنسيق.

الدخل الخرج
{{ "March 14, 2016" | date: "%b %d, %y" }}
Mar 14, 16

يمكنك الحصول على الوقت الحالي من خلال تمرير الكلمة الخاصة "now" (أو "today") إلى المرشّح date.

الدخل الخرج
This page was last updated at {{ "now" | date: "%Y-%m-%d %H:%M" }}.
This page was last updated at 2021-04-28 17:52.

لاحظ أن القيمة ستكون هي الوقت الحالي لآخر إنشاء للصفحة من القالب، وليس وقت تقديم الصفحة إلى المستخدم في حالة التخزين المؤقت أو إنشاء موقع ساكن.

default

يضبط قيمة افتراضية للمتغير الذي لا يملك قيمة مُسنَدة. سيظهر المرشّح default قيمته إذا كان الدخل nil أو false أو فارغ.

لم تُحدَّد قيمة المتغير product_price، لذلك اُستخدِمت القيمة الافتراضية في المثال التالي:

الدخل الخرج
{{ product_price | default: 2.99 }}
2.99

حُدِّدت قيمة المتغير product_price، لذلك لم تُستخدَم القيمة الافتراضية في المثال التالي:

الدخل الخرج
{% assign product_price = 4.99 %}
{{ product_price | default: 2.99 }}

4.99

قيمة المتغير product_price فارغة، لذلك اُستخدِمت القيمة الافتراضية في المثال التالي:

الدخل الخرج
{% assign product_price = "" %}
{{ product_price | default: 2.99 }}

2.99

بالسماح بالقيمة false (خاص بالإصدار 5.0.0)

يمكن السماح للمتغيرات أن تعيد القيمة false بدلًا من القيمة الافتراضية من خلال استخدام المعامل allow_false.

الدخل الخرج
{% assign display_price = false %}
{{ display_price | default: true, allow_false: true }}

false

divided_by

يقسم هذا المرشّح عددًا على عددٍ آخر.

تُقرَّب النتيجة إلى أقرب عدد صحيح (كالمرشّح floor) إذا كان المقسوم عليه عددًا صحيحًا.

الدخل الخرج
{{ 16 | divided_by: 4 }}
{{ 5 | divided_by: 3 }}
4
1

التحكم بعملية التقريب

ينتج عن المرشّح divided_by نتيجة من نوع المقسوم عليه نفسه، أي إذا قسمت على عدد صحيح، فستكون النتيجة عددًا صحيحًا. إذا قسمت على عدد عشري float، فستكون النتيجة عددًا عشريًا.

المقسوم عليه في المثال التالي هو عدد صحيح:

الدخل الخرج
{{ 20 | divided_by: 7 }}
2

المقسوم عليه في المثال التالي هو عدد عشري:

الدخل الخرج
{{ 20 | divided_by: 7.0 }}
2.857142857142857

تغيير أنواع المتغيرات

قد ترغب في استخدام متغير كمقسوم عليه، حيث لا يمكنك في هذه الحالة إضافة ‎.0 لتحويله إلى عدد عشري ببساطة، ولكن يمكنك إسناد assign نسخة محوَّلة من المتغير إلى عدد عشري باستخدام المرشّح times.

سنقسم في المثال التالي على متغير يحتوي على عدد صحيح، لذلك نحصل على عدد صحيح:

الدخل الخرج
{% assign my_integer = 7 %}
{{ 20 | divided_by: my_integer }}

2

نضرب المتغير بالعدد 1.0 باستخدام المرشّح times لنحصل على عدد عشري، ثم نقسمه على عدد عشري بدلًا من ذلك في المثال التالي:

الدخل الخرج
{% assign my_integer = 7 %}
{% assign my_float = my_integer | times: 1.0 %}
{{ 20 | divided_by: my_float }}

2.857142857142857

downcase

يجعل هذا المرشّح كل حرف في سلسلة نصية أحرفًا صغيرة، وليس له تأثير على السلاسل النصية التي تتكون بالفعل من أحرف صغيرة.

الدخل الخرج
{{ "Parker Moore" | downcase }}
parker moore
الدخل الخرج
{{ "apple" | downcase }}
apple

escape

يطبّق هذا المرشّح عملية الهروب على سلسلة نصية عن طريق استبدال المحارف بتسلسلات الهروب escape sequences (بحيث يمكن استخدام هذه السلسلة في عنوان URL مثلًا)، ولا يغيّر السلاسل النصية التي ليس لديها أي شيء لتطبيق عملية الهروب عليه.

الدخل الخرج
{{ "Have you read 'James & the Giant Peach'?" | escape }}
Have you read &#39;James &amp; the Giant Peach&#39;?
الدخل الخرج
{{ "Tetsuro Takara" | escape }}
Tetsuro Takara

escape_once

يطبّق عملية الهروب على سلسلة نصية بدون تغيير الكيانات المُطبَّق عليها الهروب مسبقًا، ولا يغيّر السلاسل النصية التي ليس لديها أي شيء لتطبيق عملية الهروب عليه.

الدخل الخرج
{{ "1 < 2 & 3" | escape_once }}
1 &lt; 2 &amp; 3
الدخل الخرج
{{ "1 &lt; 2 &amp; 3" | escape_once }}
1 &lt; 2 &amp; 3

first

يعيد هذا المرشّح العنصر الأول من المصفوفة.

الدخل الخرج
{{ "Ground control to Major Tom." | split: " " | first }}
Ground
الدخل الخرج
{% assign my_array = "zebra, octopus, giraffe, tiger" | split: ", " %}

{{ my_array.first }}

zebra

يمكنك استخدام المرشّح first مع الصيغة النقطية عندما تحتاج إلى استخدام المرشّح ضمن وسم:

{% if my_array.first == "zebra" %}
  Here comes a zebra!
{% endif %}

floor

يقرّب هذا المرشّح الدخل إلى أقرب عدد صحيح. تحاول لغة Liquid تحويل الدخل إلى عدد قبل تطبيق المرشح.

الدخل الخرج
{{ 1.2 | floor }}
{{ 2.0 | floor }}
{{ 183.357 | floor }}
1
2
183

قيمة الدخل في المثال التالي عبارة عن سلسلة نصية:

الدخل الخرج
{{ "3.5" | floor }}
3

join

يدمج هذا المرشّح العناصر الموجودة في مصفوفة في سلسلة نصية واحدة باستخدام الوسيط كفاصل بينها.

الدخل الخرج
{% assign beatles = "John, Paul, George, Ringo" | split: ", " %}

{{ beatles | join: " and " }}

John and Paul and George and Ringo