الفرق بين المراجعتين ل"Twig/for"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:الوسم for في Twig}}</noinclude>')
 
(إدخال 2.0 تمام المحتوى وانظر أيضًا والتصانيف والمصادر.)
سطر 1: سطر 1:
 
<noinclude>{{DISPLAYTITLE:الوسم for في Twig}}</noinclude>
 
<noinclude>{{DISPLAYTITLE:الوسم for في Twig}}</noinclude>
 +
يك{{DISPLAYTITLE:الوسم for في Twig}}رر وسم for على كل عنصر من عناصر تسلسل ما، فمثلًا إذا أردنا عرض قائمة من المستخدمين الموجودين في متغير اسمه <code>users</code>:<syntaxhighlight lang="twig">
 +
<h1>Members</h1>
 +
<ul>
 +
    {% for user in users %}
 +
        <li>{{ user.username|e }}</li>
 +
    {% endfor %}
 +
</ul>
 +
</syntaxhighlight>لاحظ أن التسلسل قد يكون مصفوفة أو كائنًا يستخدم واجهة <code>Traversable</code>. وللتكرار على تسلسل من الأعداد فيمكن استخدام العامل <code>..</code> :<syntaxhighlight lang="twig">
 +
{% for i in 0..10 %}
 +
    * {{ i }}
 +
{% endfor %}
 +
</syntaxhighlight>ستطبع الشيفرة أعلاه جميع الأعداد من 0 إلى 10. كذلك قد يكون مفيدًا مع الحروف:<syntaxhighlight lang="twig">
 +
{% for letter in 'a'..'z' %}
 +
    * {{ letter }}
 +
{% endfor %}
 +
</syntaxhighlight>يأخذ العامل <code>..</code> أي تعبير على كلا جانبيه:<syntaxhighlight lang="twig">
 +
{% for letter in 'a'|upper..'z'|upper %}
 +
    * {{ letter }}
 +
{% endfor %}
 +
</syntaxhighlight>إذا أردت خطوة مختلفة عن 1 فاستخدام دالة <code>range</code>.
 +
 +
== متغير loop ==
 +
يمكن الوصول إلى بعض المتغيرات الخاصة داخل كتلة التكرار لـ <code>for</code>:
 +
{| class="wikitable"
 +
!المتغير
 +
!الوصف
 +
|-
 +
|<code>loop.index</code>
 +
|التكرار الحالي للحلقة (1 مفهرس)
 +
|-
 +
|<code>loop.index0</code>
 +
|التكرار الحالي للحلقة (0 مفهرس)
 +
|-
 +
|<code>loop.revindex</code>
 +
|عدد التكرارات من نهاية الحلقة (1 مفهرس)
 +
|-
 +
|<code>loop.revindex0</code>
 +
|عدد التكرارات من نهاية الحلقة (0 مفهرس)
 +
|-
 +
|<code>loop.first</code>
 +
|تتحقق -أي تكون true- في حالة التكرار الأول
 +
|-
 +
|<code>loop.last</code>
 +
|تتحقق -أي تكون true- في حالة التكرار الأخير
 +
|-
 +
|<code>loop.length</code>
 +
|عدد العناصر في التسلسل
 +
|-
 +
|<code>loop.parent</code>
 +
|السياق
 +
|}
 +
<syntaxhighlight lang="twig">
 +
{% for user in users %}
 +
    {{ loop.index }} - {{ user.username }}
 +
{% endfor %}
 +
</syntaxhighlight>لاحظ أن المتغيرات  <code>loop.length</code> و  <code>loop.revindex</code> و  <code>loop.revindex0</code> و <code>loop.last</code> متاحة لمصفوفات PHP فقط أو الكائنات التي تستخدم الواجهة <code>Countable</code>.
 +
 +
== الشرط else ==
 +
إذا لم يحدث تكرار بسبب فراغ التسلسل فيمكن إخراج (render) كتلة بديلة باستخدام <code>else</code>:<syntaxhighlight lang="twig">
 +
<ul>
 +
    {% for user in users %}
 +
        <li>{{ user.username|e }}</li>
 +
    {% else %}
 +
        <li><em>no user found</em></li>
 +
    {% endfor %}
 +
</ul>
 +
</syntaxhighlight>
 +
 +
== التكرار على المفاتيح ==
 +
تكرِّر الحلقة افتراضيًا على قيم التسلسل، ويمكن التكرار على المفاتيح باستخدام الفلتر <code>keys</code>:<syntaxhighlight lang="twig">
 +
<h1>Members</h1>
 +
<ul>
 +
    {% for key in users|keys %}
 +
        <li>{{ key }}</li>
 +
    {% endfor %}
 +
</ul>
 +
</syntaxhighlight>
 +
 +
== التكرار على المفاتيح والقيم ==
 +
تستطيع الوصول إلى كل من المفاتيح والقيم كما يلي:<syntaxhighlight lang="twig">
 +
<h1>Members</h1>
 +
<ul>
 +
    {% for key, user in users %}
 +
        <li>{{ key }}: {{ user.username|e }}</li>
 +
    {% endfor %}
 +
</ul>
 +
</syntaxhighlight>
 +
 +
== التكرار على مجموعة فرعية ==
 +
إذا أردت التكرار على مجموعة فرعية (subset) من القيم، فاستخدم الفلتر <code>slice</code>:<syntaxhighlight lang="twig">
 +
<h1>Top Ten Members</h1>
 +
<ul>
 +
    {% for user in users|slice(0, 10) %}
 +
        <li>{{ user.username|e }}</li>
 +
    {% endfor %}
 +
</ul>
 +
</syntaxhighlight>
 +
 +
== انظر أيضًا ==
 +
[[Twig/intro|مقدمة عن محرك القوالب Twig.]]
 +
 +
[[Twig/tags|الوسوم في Twig.]]
 +
 +
== المصادر ==
 +
 +
* [https://twig.symfony.com/doc/3.x/tags/for.html صفحة الوسم for من توثيق Twig الرسمي.]
 +
 +
[[تصنيف:Twig]]
 +
[[تصنيف:Twig Tags]]

مراجعة 00:43، 26 أبريل 2021

يكرر وسم for على كل عنصر من عناصر تسلسل ما، فمثلًا إذا أردنا عرض قائمة من المستخدمين الموجودين في متغير اسمه users:

<h1>Members</h1>
<ul>
    {% for user in users %}
        <li>{{ user.username|e }}</li>
    {% endfor %}
</ul>

لاحظ أن التسلسل قد يكون مصفوفة أو كائنًا يستخدم واجهة Traversable. وللتكرار على تسلسل من الأعداد فيمكن استخدام العامل .. :

{% for i in 0..10 %}
    * {{ i }}
{% endfor %}

ستطبع الشيفرة أعلاه جميع الأعداد من 0 إلى 10. كذلك قد يكون مفيدًا مع الحروف:

{% for letter in 'a'..'z' %}
    * {{ letter }}
{% endfor %}

يأخذ العامل .. أي تعبير على كلا جانبيه:

{% for letter in 'a'|upper..'z'|upper %}
    * {{ letter }}
{% endfor %}

إذا أردت خطوة مختلفة عن 1 فاستخدام دالة range.

متغير loop

يمكن الوصول إلى بعض المتغيرات الخاصة داخل كتلة التكرار لـ for:

المتغير الوصف
loop.index التكرار الحالي للحلقة (1 مفهرس)
loop.index0 التكرار الحالي للحلقة (0 مفهرس)
loop.revindex عدد التكرارات من نهاية الحلقة (1 مفهرس)
loop.revindex0 عدد التكرارات من نهاية الحلقة (0 مفهرس)
loop.first تتحقق -أي تكون true- في حالة التكرار الأول
loop.last تتحقق -أي تكون true- في حالة التكرار الأخير
loop.length عدد العناصر في التسلسل
loop.parent السياق
{% for user in users %}
    {{ loop.index }} - {{ user.username }}
{% endfor %}

لاحظ أن المتغيرات loop.length و loop.revindex و loop.revindex0 و loop.last متاحة لمصفوفات PHP فقط أو الكائنات التي تستخدم الواجهة Countable.

الشرط else

إذا لم يحدث تكرار بسبب فراغ التسلسل فيمكن إخراج (render) كتلة بديلة باستخدام else:

<ul>
    {% for user in users %}
        <li>{{ user.username|e }}</li>
    {% else %}
        <li><em>no user found</em></li>
    {% endfor %}
</ul>

التكرار على المفاتيح

تكرِّر الحلقة افتراضيًا على قيم التسلسل، ويمكن التكرار على المفاتيح باستخدام الفلتر keys:

<h1>Members</h1>
<ul>
    {% for key in users|keys %}
        <li>{{ key }}</li>
    {% endfor %}
</ul>

التكرار على المفاتيح والقيم

تستطيع الوصول إلى كل من المفاتيح والقيم كما يلي:

<h1>Members</h1>
<ul>
    {% for key, user in users %}
        <li>{{ key }}: {{ user.username|e }}</li>
    {% endfor %}
</ul>

التكرار على مجموعة فرعية

إذا أردت التكرار على مجموعة فرعية (subset) من القيم، فاستخدم الفلتر slice:

<h1>Top Ten Members</h1>
<ul>
    {% for user in users|slice(0, 10) %}
        <li>{{ user.username|e }}</li>
    {% endfor %}
</ul>

انظر أيضًا

مقدمة عن محرك القوالب Twig.

الوسوم في Twig.

المصادر