يتيح كل نوع من انواع الحلقات اختيار عناصر من قاعدة بيانات SPIP: مقالات او اقسام او اخبار الخ. ويتكون كل من هذه العناصر بدوره من عناصر دقيقة: عنوان وتاريخ ومادة الخ. اذاً داخل الحلقة، يجب تحديد في اي مكان من علامات HTML يجب وضع هذا العنصر الدقيق او ذاك.
لتنفيذ ذلك، سنستخدم علامات SPIP.
الوصف المبسّط
يتم وضع علامات SPIP داخل الحلقات (لأننا نريد معرفة ما اذا كنا نحتاج الى عنصر من مقال او من قسم الخ.). وعادة ما يكون اسم هذه العلامات بسيط، على انه بالفرنسية. وسنقدم، لكل نوع من انواع الحلقات، القائمة الكاملة للعلامات التي يمكن استخدامها، كما سوف نخصص مقالاً لتفسير الاسماء الفرنسية لهذه العلامات.
تبدأ العلامة دائماً برمز #.
فلنقم مثلاً، بعرض قائمة بعناوين مقالات:
<BOUCLE_articles(ARTICLES){id_rubrique}>
<li> #TITRE
</BOUCLE_articles>
(TITRE تعني العنوان)
عندما يتم تنفيذ الحلقة، سيقوم SPIP، لدى كل تكرار باستبدال #TITRE بعنوان المقال الحالي:
عنوان المقال ١<br /> عنوان المقال ٢<br /> ...<br /> عنوان المقال الاخير
يبدو الامر بسيطاً للغاية: فنكتفي بإدخال اسم العنصر المطلوب داخل علامات HTML، فيتم استبداله بالمحتوى المناسب له المسحوب من قاعدة البيانات.
الاوامر البرمجية الاختيارية
على الصعيد العملي، غالباً ما يكون عنصر المحتوى مترافقاً مع علامات HTML لا يتم عرضها الا اذا كان هذا العنصر موجوداً لأنه في حال عدم وجوده سيتأثر تصميم الصفحة.
مثلاً، هناك علامة في SPIP لعرض العنوان المدخل للمقال (SURTITRE#)، الا ان العديد من المقالات لا يملك مدخلاً.
لنكمل المثال السابق:
<BOUCLE_articles(ARTICLES){id_rubrique}><BR>
<LI> <B>#SURTITRE</B><BR><BR>
<B>#TITRE</B><BR>
</BOUCLE_articles><BR>
الذي، من المفترض ان يعرض قائمة مقالات ولكنها، هذه المرة، تحتوي العنوان والمدخل (وهو SURTITRE) لكل مقال. ولكن ماذا يحصل اذا كان احد المقالات لا يملك مدخلاً؟ نحصل على علامتي: «<br />
» اي سطر فارغ.
اذاً ما يجب تنفيذه هو عدم عرض علامة «<br />
» الا اذا كان هناك مدخلاً للمقال.
يصبح التركيب اللغوي لعلامة SPIP كالتالي:
فيتم وضع العلامة - tag بين هلالين وكامل النص الشرطي بين قوسين. ولا يظهر النص الاختياري قبل والنص الاختياري بعد الا اذا كان هناك عنصر يناسب العلامة في قاعدة البيانات.
يصبح مثالنا:
<BOUCLE_articles(ARTICLES){id_rubrique}>
[(#SURTITRE)<br />]
#TITRE<br />
</BOUCLE_articles>
ونحصل هكذا على النتيجة المطلوبة: فإذا كان هناك مدخل للمقال الحالي، سيظهر وتتبعه علامة العودة الى السطر <br />
. اما اذا كان المقال الحالي دون مدخل فلا يظهر شيء حتى ولا العلامة <br />
.
– تحذير: لا يعمل العرض الشرطي هذا مع العلامات الديناميكية (مثلاً: #URL_LOGOUT)
استخدامات متطورة
منذ [SPIP 1.8]، يمكن انشاء علامات متداخلة. هكذا، في مثالنا، اذا اردنا عرض رمز المقال في الحالات التي يوجد فيها مدخل فقط، يمكن كتابة:
<BOUCLE_articles(ARTICLES){id_rubrique}>
[[(#LOGO_ARTICLE)<br />](#SURTITRE)<br />]
</BOUCLE_articles>
ملاحظة: لا يمكن وضع حلقة داخل النص الاختياري في العلامة. ولكن اذا اردنا الا نعرض حلقة الا في حال وجود علامة معينة يمكن استخدام امر
<INCLURE()>
داخل النص الاختياري.
جعل العلامات واضحة
عندما تتداخل الحلقات في بعضها، قد يحصل ان تحتوي حلقتان على علامات بالاسم نفسه. مثلاً في الفقرة التالية:
<BOUCLE_sections(RUBRIQUES){id_rubrique}>
<BOUCLE_articles(ARTICLES){id_rubrique}>
#TITRE
</BOUCLE_articles>
</BOUCLE_sections>
تدل علامة TITRE# الى عنوان مقال. واذا اردنا ان نعرض اسم القسم (وعلامته TITRE# ايضاً) داخل حلقة articles_ لا يمكننا استخدام علامة TITRE#.
ولكن منذ [SPIP 1.8]، صار من الممكن استخدام علامة عائدة لاحدى الحلقات الحاوية وتحمل اسم مشابه لعلامات الحلقة الداخلية وذلك باضافة اسم الحلقة التي تعود لها هذه العلامة. بشكل اضق، يجب تحديد اسم الحلقة بين # واسم العلامة.
وتصبح كتابة العلامة #TAG
العائدة لحلقة _loop
[1] كالتالي: #_loop:TAG. مثلاً:
<BOUCLE_sections(RUBRIQUES){id_rubrique}>
<BOUCLE_articles(ARTICLES){id_rubrique}>
#_sections:TITRE > #TITRE
</BOUCLE_articles>
</BOUCLE_sections>
يعرض اسم القسم ثم عنوان المقال: تصبح علامة #TITRE
العائدة لحلقة sections_ كالتالي: #_sections:TITRE
لكي لا يتم الخلط بينها وبين علامة #TITRE
العائدة لحلقة articles_.
ترشيح النتائج
غالباً ما نحتاج الى تعديل احد العناصر المسترجعة من قاعدة البيانات اما للحصول على عرض مختلف (مثلاً عرض العنوان دون رقمه اذا كنا قد اعطيناه رقماً) او لاسترجاع قيمة ناتجة عن هذا العنصر (مثلاً عرض اليوم الموافق لتاريخ معين).
في SPIP، نستطيع تطبيق مرشحات على العناصر المسترجعة من القاعدة بشكل مباشر وبتحديد ذلك في التركيب اللغوي لعلامات SPIP الذي يصبح:
اذاً يقضي التركيب اللغوي بأن نلحق بإسم العلامة وبين الهلالين، المرشحات واحد تلو الآخر يفصل بينهم خط عمودي.
ملاحظة. في الحقيقة، تشكل هذه المرشحات دالات PHP. فيمكنك بالتالي استخدام دالات PHP مباشرة (بشرط ان تكون بمتغّير واحد لا اكثر) اضافة الى تلك التي يوفرها SPIP.
– تحذير: لا يمكن تطبيق المرشحات على العلامات الديناميكية.
ونقدم هنا بعض المرشحات التي يوفرها SPIP:
– majuscules يحول عنوان المقال (اذا كان باللاتينية) الى حروف كبيرة (وهو اقوى من الوظيفة نفسها التي يوفرها PHP التي لا تعمل بشكل صحيح مع الحروف ذات الاشارات المصوتة (accented characters)، مثلاً:
– justifier يضبط النص كلياً (وهو يعادل علامة <P align=justify>)، مثلاً:
يخصص دليل الاستخدام الحالي مقالاً لمختلف المرشحات التي يوفرها SPIP.
تعطيل معالجة SPIP
يطبّق SPIP اختصارات كتابة على كل النصوص المسترجعة من قاعدة البيانات مثل تحليل اختصارات تصميم الصفحة وغير ذلك.
في بعض الحالات، قد تحتاج الى تعطيل هذه المعالجة لاسترجاع النص الخام كما هو مخزن في القاعدة. يكفي عندها اضافة نجمة (*) بعد اسم علامة SPIP، مما يعطينا:
(أنظر #BALISE* et #BALISE**)
القيم التي تدعمها العلامات
منذ [SPIP 1.8]، تأخذ بعض العلامات [2] معاملات، ويمكن تمرير المعاملات في العلامات بإحاطتها بقوصين «» و«» وتفصل بينها فاصلة «,». مثلاً: #ENV{lang,ar}
.
ويمكن للمعامل ان بكون قيمة ثابتة او علامة اخرى. ولكن لا يمكن استخدام الا العلامات ذات الشكل البسيط (اي دون فقرات اختيارية او مرشحات). ويمكن وضع المعاملات داخل علامتي اقتباس «'...'» اذا لم نرغب في ان يقوم SPIP بمعالجتها.