ترتيب النتائج
يدل {par sort_criterion} الى الترتيب الذي تعرض به النتائج. ويطابق هذا المعيار احدى العلامات المسحوبة من قاعدة البيانات لكل نوع من انواع الحلقات. مثلاً، يمكن ترتيب المقالات {par date}
(حسب التاريخ) او {par date_redac}
(حسب تاريخ التحرير) او {par titre}
(حسب العنوان). (لاحظ انه، بينما تظهر العلامات بحروف كبيرة، تُكتب المعايير بحروف صغيرة).
حالة خاصة: {par hasard}
(عشوائياً) يتيح الحصول على قائمة بترتيب عشوائي.
عكس الترتيب. اضافة الى ذلك، يؤدي {inverse}
(اي عكس) الى قلب ترتيب العرض. مثلاً، يبدأ معيار {par date}
بعرض المقالات الاقدم تاريخاً؛ الا ان معياري {par date}{inverse}
، فيعرضان اولاً المقالات الاحدث تاريخاً.
منذ SPIP ١.٩، يمكن لمعيار inverse ان يأخذ كمتغير اي علامة لتغيير اتجاه الفرز ديناميكياً. مثلاً، من الممكن كتابة: <BOUCLE_example(ARTICLES){par #ENV{tri}}{inverse #ENV{senstri}}>
مما يتيح اختيار العمود التي يتم الفرز حسبه واتجاه الفرز من خلال عنوان URL (&senstri=1 او &senstri=0)
الترتيب حسب الرقم [SPIP 1.3]. عندما نقوم بالترتيب حسب احد عناصر المقال (العنوان مثلاً)، يتم الترتيب ابجدياً. لكن اذا اردنا فرض ترتيب مختلف، يمكن اضافة رقم امام العنوان، مثلاً: «1. المقال الاول»، «2. المقال الثاني»، «3. المقال الثالث»... ومن جراء الفرز الابجدي نحصل على ترتيب الارقام التالي: «1، 10، 11، 2، 3،...». ولاسترجاع الفرز حسب الارقام يمكن استخدام:
{par num criterion}
امثلة:
<BOUCLE_articles(ARTICLES){id_rubrique}{par date}{inverse}>
يعرض مقالات قسم ما مفروزة حسب الترتيب الزمني المعكوس (اي الاحدث اولاً والاقدم آخراً). اما:
<BOUCLE_articles(ARTICLES){id_rubrique}{par titre}>
فيعرضها حسب الترتيب الابجدي لعناوينها. واخيراً:
<BOUCLE_articles(ARTICLES){id_rubrique}{par num titre}>
يعرضها حسب ترتيب ارقام عناوينها (ملاحظة: الخيار {par num titre}
- اي حسب رقم العنوان - لا يعمل في الاصدارات القديمة من قاعدة MySQL، اي تلك الاقدم من الاصدار ٣.٢٣).
<BOUCLE_articles(ARTICLES){id_rubrique}{par multi titre}>
في إطار موقع متعدد اللغات يتيح معيار {par multi critère} الفرز بالترتيب الأبجدي لكل لغة. ومن دون معيار "multi" تسترجع الحلقة الفرز نفسه لكل لغة.
التصنيف حسب عدة معايير. منذ الاصدار ١.٨، ١.٨.١ من SPIP، يمكن التصنيف حسب عدة معايير: <b>{par</b> criterion1<b>,</b> criterion2<b>}</b>
. نحدد هكذا ترتيب التصنيفات المتتالية. وسيتم فرز النتائج حسب المعيار criterion1 ثم حسب المعيار criterion2 للنتائج التي توفي شرط criterion1. ويمكن ادخال اي عدد من المعايير.
مثلاً، يفرز {par date, titre}
النتائج حسب التاريخ date ثم يفرز النتائج التي تملك التاريخ date تفرز حسب العنوان titre.
مع [SPIP 1.8.2] يمكن تحديد عدة معايير {par ...} لحلقة للوصول الى النتيجة نفسها. مثلاً، يعادل {par date} {par titre}
المثال السابق.
ملاحظة: عندما نستخدم عدة معايير فرز، لا ينطبق معيار {inverse} الا على معيار الفرز الموجود مباشرة قبله.لذلك أدخل [SPIP 1.8.2] الكتابة {!par ...} التي تعكس معيار فرز معين. مثلاً، يقوم
{!par date} {par num titre}
بالفرز حسب التاريخ date التنازلي ثم حسب الأرقام التصاعدية في العناوين titre للنتائج التي تملك التاريخ نفسه.
المقارنات والمعادلات
{معيار < قيمة}
مقارنة بقيمة محددة. يمكن استخدام «>» و«<» و«=» و«>=» و«<=». ويمكن استخدام كل معايير الفرز (كما يتم سحبها من قاعدة البيانات) للحد من عدد النتائج المعروضة.
ويمكن لقيمة العامل الايمن ان تكون:
– قيمة ثابتة تم تحديدها في الصفحة النموذجية. مثلاً:
<BOUCLE_art(ARTICLES){id_article=5}>
يعرض المقال الذي يحمل الرقم 5 (وهو مفيد لإبراز مقال معين في الصفحة الاساسية للموقع).
<BOUCLE_art(ARTICLES){id_secteur=2}>
يعرض مقالات القسم الاساسي الرقم 2 (اي القسم 2 الموجود في اصل الموقع).
– منذ [SPIP 1.8]، علامة متاحة في سياق الحلقة. مثلاً:
<BOUCLE_art(ARTICLES){id_article=5}>
<BOUCLE_title(ARTICLES) {titre=#TITRE}>
...
</BOUCLE_title>
</BOUCLE_art>
تعرض المقالات التي تحمل عنوان المقال 5 نفسه.
تنبيه: يجب استخدام علامة بسيطة، اي لا تحتوي على اي مرشح او فقرة اختيارية.خاصة اذا اردنا استخدام العلامة #ENV — او اي علامة اخرى تأخذ معاملات —، يجب استخدام الكتابة:
{title = #ENV{titre}}
وليس{title = [(#ENV{titre})]}
.
التركيب المنتظم (regular expression):
قوي جداً (لكنه معقد الاستخدام)، يؤدي عامل المقارنة «==» الى المقارنة حسب تركيب منتظم.
مثلاً:
<BOUCLE_art(ARTICLES){titre==^[اج]}>
يختار المقالات التي تبدأ عناوينها بأحد الحرفين «ا» او «ج».
النفي:
يمكن استخدام التركيب {س س س != ج ج ج} و{س س س !== ج ج ج}. وتدل علامة «!» الى النفي (اي العامل المنطقي NOT).
<BOUCLE_art(ARTICLES){titre!==^[اج]}>
يختار المقالات التي لا تبدأ عناوينها بأحد الحرفين «ا» او «ج».
<BOUCLE_art(ARTICLES){id_secteur != 2}>
يختار المقالات التي لا تعود الى القسم الاساسي الرقم 2.
عرض بعتمد على التواريخ
لتسهيل استخدام المقارنات بين التواريخ، اضفنا المعايير التالية:
– age وage_redac يدلان تباعاً الى قِدَم المنشور والى اول نشر للمقال بعدد الايام. فمثلاً: {age<30} يختار العناصر التي نشرت منذ شهر.
– اما المعايير mois, mois_redac, annee, annee_redac (شهر، شهر التحرير، سنة، سنة التحرير)، فتتيح المقارنة بين قيم ثابتة ({annee<=2000}
للعناصر المنشورة قبل نهاية عام 2000).
يمكن التأليف بين عدة معايير للحصول على نتائج دقيقة جداً. مثلاً:
<BOUCLE_art(ARTICLES){id_secteur=2}{age<30}{id_rubrique!=3}>
يعرض مقالات القسم الاساسي الرقم 2، المنشورة منذ اقل من 30 يوماً وباستثناء مقالات القسم الفرعي الرقم 3.
نصيحة. ان معيار age
مفيد جداً لعرض المقالات والاخبار التي تحمل تاريخاً لم يقع بعد وذلك باستخدام قيم سالبة (بشرط ان يكون قد تم تحديد خيار «نشر المقالات المؤجلة» في صفحة «الاعداد الدقيق» للموقع). فعلى سبيل المثال، يتيح هذا المعيار ابراز احداث مستقبلية (لم تحدث بعد). ويختار {age<0}
المقالات او الاخبار التي تحمل تاريخاً في المستقبل (اي «بعد» اليوم).
عمر بالنسبة لتاريخ محدد. يتم حساب معيار age
بالاعتماد على تاريخ اليوم الجاري (بالتالي يدل {age<30}
الى المقالات المنشورة منذ شهر). اما المعيار age_relatif فيقارن بين تاريخ مقال ما او خبر ما وتاريخ آخر تم تحديده. مثلاً، داخل حلقة مقالات، نكون قد عرفنا تاريخ لكل نتيجة من نتائج الحلقة، فيمكننا عندها الاختيار بالاعتماد على هذا التاريخ وليس على تاريخ اليوم الجاري).
مثلاً:
<BOUCLE_main_article(ARTICLES){id_article}>
<h1>#TITRE</h1>
<BOUCLE_next(ARTICLES){id_rubrique}{age_relatif<=0}{exclus}{par date}{0,1}>
المقال التالي #TITRE
</BOUCLE_next>
</BOUCLE_main_article>
تعرض حلقة BOUCLE_next مقالاً واحداً من القسم نفسه، مرتباً حسب التاريخ وتاريخ نشره اقل من تاريخ نشر «main_article» او يعادله. بمعنى آخر المقال العائد الى القسم نفسه والمنشور بعد المقال الاساسي (main_article).
لمزيد من المعلومات حول استخدام التواريخ، انظر ادارة التواريخ.
عرض جزء من النتائج
– {branche}
(اي الفرع) منذ [SPIP 1.8.2]، يقصر النتائج — لحلقات تحتوي على #ID_RUBRIQUE — على الفرع الحالي (اي القسم الحالي وأقسامه الفرعية). مثلاً: <BOUCLE_articles(ARTICLES) {branche}>
يسترجع كل المقالات الموجودة في القسم الحالي وتلك الموجودة في أقسامه الفرعية.<BOUCLE_articles(ARTICLES) {!branche}>
يسترجع كل المقالات غير الموجودة في القسم الحالي وأقسامه الفرعية.
يمكن استخدام المعيار {branche?} (اختياري) لتطبيقه فقط عندما يتم تحديد قسم في السياق (قسم مغلِف او رقم قسم موجود في عنوان URL). مثلاً:<BOUCLE_articles(ARTICLES) {branche?}>
يسترجع كل المقالات الموجودة في القسم الحالي وأقسامه الفرعية اذا كان هناك id_rubrique في السياق والا فيسترجع كل مقالات الموقع.
{doublons}
او {unique}
(هذان المعياران متطابقان تماماً) يتيحان منع عرض النتائج التي تم عرضها في حلقات أخرى تستخدم أحد المعيارين في الصفحة.
لمحة تاريخية: منذ [SPIP 1.2] وحتى [SPIP 1.7.2]، كان ينحصر استخدام هذا المعيار بحلقات ARTICLES وRUBRIQUES وDOCUMENTS وSITES فقط.
– {doublons
xxxx
}
منذ [SPIP ١.٨]، يمكن الحصول على عدة مجموعات من المعايير {doublons}
المستقلة عن بعضها. فالحلقات التي تحتوي على {doublons احمر}
لن تؤثرعلى الحلقات التي تحتوي على {doublons ازرق}
كمعيار.
– {exclus}
يتيح استثناء العنصر (مقال او خبر او قسم الخ) الذي نوجد فيه حالياً من النتائج. مثلاً عندما نعرض المقالات الموجودة في القسم نفسه الموجود فيه المقال الحالي لا نريد عرض عنوان المقال الحالي في اللائحة.
– {xxxx IN a,b,c,d} منذ [SPIP 1.8]، هنا يقتصر العرض على النتائج التي تملك معيار xxxx يعادل a او b او c او d. ويتم ترتيب النتائج حسب ترتيب هذه القيم (الا اذا تم طلب معيار ترتيب آخر). ومن الممكن اختيار سلاسل نصوص، مثلاً {titre IN الصين, اليابان}
(اي العنوان هو الصين او اليابان).
مع SPIP ١.٩، يصبح من الممكن إدخال العلامات كمتغيرات في IN وخاصة العلامة ENV، التي تتقبل مرشحات التحليل للتأكد من ان استفسارات القاعدة مكتوبة بشكل سليم. بالتال، سيقوم SPIP بفحص ما اذا كان المتغير المرافق للعلامة ENV يدل الى جدول (آت مثلاً من ملء استمارة تنتهي صفة name العائدة لها بـ[]). اذا كانت الحال هكذا واذا تم ايقاف مرشحات التحليل بإلحاق العلامة بنجمتين، يتم اعتبار كل عنصر من الجدول كمتغير عائد لـIN ويطبق SPIP مرشحات الأمان على كل من هذه المتغيرات.
وتقدم الصفحة النموذجية القياسية formulaire_forum_previsu مثالاً لاستخدام حلقة MOTS تحتوي المعيار {id_mot IN #ENV**{ajouter_mot}}: تختار هذه الحلقة فقط المفاتيح العائدة الى مجموعة تم تحديدها ديناميكياً. وهنا تم إنشاء هذه المجموعة من خلال استمارة الصفحة النموذجية القياسية choix_mots التي تستخدم صفات name=ajouter_mot[].
– {a, b}
حيث a
وb
رقمان. يتيح هذا المعيار الحد من عدد العناصر. فيدل a
الى العنصر الذي نبدأ منه العرض (يجدر الانتباه الى ان رقم اول عنصر هو صفر) ويدل b
الى عدد العناصر المعروضة.
مثلاً، يعرض المعيار {0, 10}
العناصر العشرة الاولى. ويعرض {4, 2}
عنصرين ابتداءاً من الخامس (ضمناً).
– {debut_xxx,b} هو نكهة مختلفة ومطورة من المعيار السابق. إنه يتيح البدء بحد عدد العناصر بواسطة متغير يتم تمريريه في عنوان URL (هذا المتغير يحل مكان العامل a المذكور سابقاً). ان عمل هذا المعيار معقد بعض الشيء ولكن لحسن الحظ لا نضطر الى استخدامه كثيراً.
ويجب ان يبدأ المتغير الذي تم تمريريه في عنوان URL بـdebut_xxx (حيث xxx هي عبارة يختارها مطور الموقع). هكذا، في صفحة تحمل عنوان URL:
spip.php?page=petition&id_article=13&debut_signatures=200
مع صفحة نموذجية اسمها petition.html وتحتوي مثلاً على حلقة توقيعات:
<BOUCLE_signatures(SIGNATURES){id_article}{debut_signatures,100}>
نحصل على قائمة بمائة توقيع تبدأ من التوقيع الرقم 201 [تذكير]. ومع عنوان URL على شكل:
spip.php?page=petition&id_article=13&debut_signatures=300
نحصل على قائمة بمائة توقيع تبدأ من التوقيع الرقم 301 [تذكير].
– {a,n-b} منذ [SPIP 1.8]، هو تنوع من {a,b}
، يختصر العرض بالاعتماد على عدد النتائج في الحلقة. ويشكل a الحد الذي يبدأ منه عرض النتائج ويدل b الى عدد النتائج التي لا يجب عرضها في آخر الحلقة.
هكذا سيعرض {0,n-10}
كل النتائج الا العشر الاخيرة.
{5, n}
يعرض النتائج من السادس الى الأخير.
تنبيه:
يتم تبديل «a
» و«b
» بأرقام ولكن يجب فعلاً استخدام حرف «n
» اذا دعت الحاجة.
– {n-a, b}
منذ الاصدار ١.٨، ١.٨.١ من SPIP، هو نظير {a, n-b}
. نعرض b
نتيجة ايتداءاً من النتيجة الرقم a قبل نهاية الحلقة.
مثلاً: يعرض {n-20,10}
عشر نتائج ايتداءاً النتيجة الرقم ٢٠ قبل نهاية الحلقة.
– {a/b} حيث a وb رقمان. ويتيح هذا المعيار عرض جزء a
(نسبياً) من النتائج نسبتاً الى عدد من «الشرائح» b.
مثلاً: يعرض {1/3} اول ثلث من النتائج. وتبرز اهمية هذا المعيار حين نريد عرض النتائج في عدة اعمدة. فللحصول على عرض بعمودين، يكفي انشاء حلقة اولى، في خانة من خانات جدول، تشمل المعيار {1/2}
(النصف الاول من النتائج)، ثم حلقة ثانية في خانة ثانية من الجدول، تشمل المعيار {2/2}
(النصف الثاني من النتائج).
تحذير. من الخطر استخدام معيار {doublons}
مع هذا المعيار. فمثلاً:
<BOUCLE_first(ARTICLES){id_rubrique}{1/2}{doublons}>
<li> #TITRE
</BOUCLE_first>
<BOUCLE_second(ARTICLES){id_rubrique}{2/2}{doublons}>
<li> #TITRE
</BOUCLE_second>
لا تعرض كل مقالات القسم! فلنفترض مثلاً، ان هناك 20 مقالاً في هذا القسم. فستعرض الحلقة BOUCLE_first النصف الاول من هذه المقالات، اي المقالات العشرة الاولى وتمنع (بسبب وجود {doublons}
) من اعادة استخدامها. اما الحلقة BOUCLE_second، فستجلب النصف الثاني من المقالات التي لم تعرض بعد في الحلقة BOUCLE_first، اي الخمسة مقالات الاخيرة في القسم. ونكون بذلك قد «خسرنا» خمسة مقالات في هذه العملية...
العرض بين النتائج
يتيح المعيار {"inter"} ادراج علامات HTML (وهي هنا inter) بين نتائج الحلقة. مثلاً، اذا اردنا ان نفصل اسماء مؤلفين بفاصلة، تصبح الحلقة:
<BOUCLE_auteurs(AUTEURS){id_article}{"،"}>
متفرقات
يتيح {logo}
اختيار فقط المقالات (او الاقسام الخ) التي تملك شعاراً. ويعمل هذا المعيار ايضاً في حلقة (HIERARCHIE). اما المعيار المعاكس {!logo}
فيعرض العناصر التي لا تملك شعاراً.