الفرق بين المراجعتين ل"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>