الوضع هو كالتالي: في موقع واحد، يجب عرض المقالات في الاقسام بطريقة مختلفة من قسم الى آخر:
– في بعض الاقسام، يجب عرض المقالات الواحد تلو الآخر وبالتالي نريد عرضها حسب الترتيب الزمني: الاحدث في الاول والاقدم في الآخر.
– في اقسام اخرى، نريد ان نفرض عرض المقالات قرضاً وذلك بترقيمها («1. المقال الاول»، «2. المقال الثاني»...). وبالتالي نريد عرض هذه المقالات في الموقع العمومي حسب الترتيب الذي اشرنا اليه بالارقام.
وهنا الطريقة للحصول على ذلك:
نوجد الآن داخل حلقة اقسام (مثلاً في صفحة «rubrique.html»):
<BOUCLE_main_section(RUBRIQUES){id_rubrique}>
...
</BOUCLE_main_section>
في هذه الحلقة سنقوم بإجراء الاختبار التالي: هل يوجد في هذا القسم مقال واحد على الاقل يبدأ عنوانه برقم تتبعه نقطة؟
<BOUCLE_test_number(ARTICLES){id_rubrique}{titre==^[0-9]+\.}{0,1}>
يوجد مقال مرقّم في هذا القسم.
</BOUCLE_test_number>
لا يوجد مقال مرقّم.
<//B_test_number>
والمعيار المهم هنا هو:
{titre==^[0-9]+\.}
فهو اختيار حسب عنوان المقال titre
، بالاعتماد على تركيب منتظم («==
» يشير الى اختيار من خلال تركيب منتظم) يكون تركيبه الاملائي: في بداية عنوان titre
للمقال («^
» يشير الى بداية السلسلة الخاضعة للاختبار)، هناك حرف او اكثر («+
» يشير الى «حرف واحد على الاقل من بين الحروف السابقة») يقع بين 0 و9 («[0-9]
» يشير الى «الحروف التي تقع بين 0 و9 ضمناً»)، يتبعها حرف «نقطة» («\.
»).
لاحظ اخيراً اننا لا نختار الا مقال مرقّم واحد ({0,1}
). هكذا لن يتم تنفيذ ما في داخل الحلقة الا مرة واحدة. اضافة الى ذلك، يكفي وجود مقال مرقّم واحد ليؤدي الى عرض قائمة بالترتيب «المرقم».
وبالتالي تعرض الحلقة «يوجد مقال مرقّم في هذا القسم.» اذا كان في القسم مقال واحد على الاقل يسبق عنوانه رقم، والا فتعرض «لا يوجد مقال مرقّم.».
ويكفي الآن استبدال هذه العبارات بحلقات عرض المقالات حسب الترتيب المرغوب:
<BOUCLE_order_numbers(ARTICLES){id_rubrique}{par num titre}>
<li> [(#TITRE|supprimer_numero)]
</BOUCLE_order_numbers>
</BOUCLE_test_number>
<BOUCLE_order_date(ARTICLES){id_rubrique}{par date}{inverse}>
<li> #TITRE
</BOUCLE_order_date>
<//B_test_number>