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

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:الوسم for في Twig}}</noinclude>')
 
 
(مراجعتان متوسطتان بواسطة مستخدمين اثنين آخرين غير معروضتين)
سطر 1: سطر 1:
 
<noinclude>{{DISPLAYTITLE:الوسم for في Twig}}</noinclude>
 
<noinclude>{{DISPLAYTITLE:الوسم for في Twig}}</noinclude>
 +
يكرر وسم <code>for</code> على كل عنصر من عناصر تسلسل ما، فمثلًا إذا أردنا عرض قائمة من المستخدمين الموجودين في متغير اسمه <code>users</code>:
 +
{{DISPLAYTITLE:الوسم for في Twig}}<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>
 +
|تتحقق -أي تكون <code>true</code>- في حالة التكرار الأول
 +
|-
 +
|<code>loop.last</code>
 +
|تتحقق -أي تكون <code>true</code>- في حالة التكرار الأخير
 +
|-
 +
|<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]]

المراجعة الحالية بتاريخ 06:06، 11 مايو 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>

انظر أيضًا

المصادر