استلهمنا مفهوم هذه القوالب من قوالب ويكيبيدياوهي تقدم امكانات جديدة لمسؤولي المواقع والمحررين.
وتشكل القوالب امتداداً للاختصارين التقليديين <img1>
و<doc1>
. وهذان الاختصاران اصبحا يعادلان القالبين dist/modeles/img.html
وdist/modeles/doc.html
.
وتم توسيع كتابتهما بما يتيح، عدا عن المحاذاة (<img1|left>
, <img1|right>
)، إمكان تحديد نمط أكثر شمولاً يتناسب إما مع صفحة نموذجية معينة اذا وجدت او مع نمط من ورقة الأنماط (يسترجع <img1|classe>
القالب modeles/img_classe.html
اذا وجد ملفه والا فيستخدم القالب modeles/img.html
ولكن مع متغير class="classe"
).
لكن لا تكتفي القوالب بالتعامل مع الصور والمستندات، فتتيح انشاء مختصرات جديدة من نوع <model1>
بمجرد إضافة صفحة نموذجية في مجلد modeles/
داخل مجلد الصفحات النموذجية!
بغياب اي قالب مناسب للاختصار المحدد (مثلاً
<خبر1>
)، يقوم مدير القوالب في SPIP بالتأكد من أنه يمكنه التعرف على العنصر المطلوب (هنا عنصر الأخبارbreve
) واذا ما كان لدى هذا الأخير عنوان URL.<خبر1>في هذه الحال (التعرف إيجابي هنا لأن النظام يعرف الأخبار ويشمل وظيفة عناوين URL لها)، يقوم SPIP باستبدال الاختصار
<خبر1>
بإطار صغير عائم يحتوي وصلة الى الخبر المطلوب مع عرض لعنوانه تماماً كما لو أدخلنا[->خبر1]
.أما اذا لم يتعرف النظام على العنصر فيتركه كما هو ليتيح معالجته في وقت لاحق (بواسطة ملحق او مرشح إضافي) أو يتجاهله.
من جهة أخرى، يمكن تمرير متغيرات إضافية الى القوالب (كما فعلنا لمستندات فلاش «embed» بالاختصار <emb1|autostart=true>
). الكتابة شاملة وتقبل علامات HTML كما في المثال التالي:
<son19|لون=#ff0000
|عنوان=<i>الجبل</i> الكبير
|صورة=12>
حيث يتم نداء القالب modeles/son.html
الذي يعالج المتغيرات ليعرض الصورة 12 في إطار بـلــــون #ff0000 وكلام صورة فيه نص مائل.
استخدامات متعددة
لا يزال العديد من تطبيقات القوالب لم نتطرق اليه. ونعرض هنا بعض التطبيقات التي فكرنا فيها. واذا وجدت تطبيقات أخرى، لا تتردد في الإعلان عنها باقتراح قوالبك في SPIP Zone/SPIP Contrib’ اللذان يوفران الآن أقساماً مخصصة لتلك التطبيقات.
– تغيير شكل اختصارات المستندات. رغم كثرة الطلب عليها، كان من الصعب تطوير هذه الوظيفة لأنها كانت تتطلب تحرير أوامر php في ملفات نواة SPIP. اما الآن فصار يكفي نسخ dist/modeles/img.html
في مجلد فرعي modeles/
داخل مجلد الصفحات النموذجية وتعديل الملف. والشيء نفسه للاختصارين <doc1>
و<emb1>
مع ان هذا الاخير قد يكون أكثر تعقيداً.
تحذير: لا تتسرع في تعديل القوالب بهدف ادخال تغييرات طفيفة على الاختصارات، فغالباً ما يكون من الأسهل تعديل الأنماط spip_documents_xx من داخل ملفات أوراق الأنماط في الموقع.
– تشغيل صوت بواسطة مشغّل فلاش. يمكن لقالب modeles/son_player.html
ان ينتج اختصار <son12|player>
.
– ربط موقع بمقال. بإضافة قالب modeles/site_box.html
في صفحة نموذجية، ننتج مباشرة اختصار <site1|box>
. نكتب عندها القالب (باستخدام حلقات تقليدية) بحيث يعرض اسم الموقع تتبعه وصلات لأحدث ثلاثة مقالات مرخصة فيه، وذلك في إطار عائم الى اليسار مما يشكل مربع معلومات سهل الوضع في المقال. ويمكن لمتغير ان يحدد عدد المقالات المرخصة المطلوب عرضها ووجود ملخصات للمقالات ام لا، الخ.
– عرض صورة كطابع بريدي. بمجرد معرفة كيفية انتاج صفحة نموذجية فيها صورة على شكل طابع بريدي (انظر Un site dûment timbré)، يكفي تسميتها modeles/stamp.html
لإنشاء الاختصار <stamp12>
. كما يمكن إضافة متغيرات للحجم واللون ونوع الختم [1]...
بالطبع يمكن بالطريقة نفسها انشاء قوالب تعرض صوراً بلون السيبيا او صوراً مصغرة، الخ. نراهن على ان كل ذلك سيصبح متوافراً على شكل ملحقات.
– إنشاء مقال مركّب. لنفترض اننا بحاجة الى مقال مكون من مقدمة مقال آخر هو المقال 1 ومادة مقال ثان هو المقال 2. هذا بسيط: يكفي إنشاء قالبين يسترجع أحدهما مقدمة المقال 1 والثاني مادة المقال 2 وندخل في مقالنا في مربع المقدمة <article1|deck>
وفي مربع المادة <article2|text>
. ويمكن إضافة مرشحات وعلامات وأي شيء آخر.
– وضع مقال في عدة أقسام. من خلال برمجة قوالب <article1|deck>
و<article1|text>
الخ، يصبح من السهل وضع نسخة عن مقال معين في مقال آخر دون الحاجة الى تكرار البيانات. نحصل هكذا على مقال «صوري» يمكن وضعه في قسم جديد (مع إمكان إدخال عنوان مختلف عليه او إضافة عناصر أخرى اليه).
– إجراء استطلاع. من خلال القوالب، تمت إعادة كتابة الملحق Forms الذي يتيح إنشاء استمارات واستخدامها في مقالات بواسطة الاختصار <form1>
.
– عرض اقتباس عشوائي. اذا أدخلنا فقرات مقتبسة في أخبارنا، يمكن لاختصار <citation|aleatoire>
استخراج احداها عشوائياً (بالمعيار {par hasard}{0,1}
المطبق على حلقة أخبار) وعرضها في إطار عائم الى جانب الفقرة الحالية.
– إدراج مستند بلغة مختلفة عن لغة المقال. تعمل القوالب مثل الإدراجات (include) مع المتغير lang=xx
المتاح دائماً. اذا كان احد المستندات يحتوي على لغتين (مثلاً في مقطع multi في الوصف)، يمكن عرض الوصف بالاسبرانتو في مقال بالعربية باستخدام <doc1|left|lang=eo>
. واذا كانت صفحة القالب النموذجية تحتوي على سلاسل لغات، سيتم التعرف عليها باللغة التي تم تمريرها في المتغير (eo).
– عرض رسم بياني. اذا تلقى القالب جدول بيانات، يتكفل بإنشاء رسم بياني لهذه البيانات و إدراجه في مادة النص.
– عنوان فقرة على شكل صورة. قد نرغب في استخدام اختصار من نوع <imagetypo|texte=My heading>
(ولكن لا يعمل بالعربية).
متغيرات على يد مين يشيل
تأتي كتابة اختصارات القوالب على شكل <modele12>
او <modele|parameter1=anything|parameter2=something>
او <modele12|alignement|parameter1=etc>
. ويمكن للمتغيرات (parameters) ان تتكون من علامات HTML او من اختصارات SPIP (شرط ان تحتوي القوالب المناداة على معالجة لتلك الاختصارات بالطبع).
ويمكن للمتغيرات ان تحتل عدة أسطر مما يتيح كتابة أكثر وضوحاً:
<modele 10
|الدولة=ألمانيا
|السكان=82000000
|المساحة=357027
|الترتيب=63
|النشيد=<i>Das Lied der Deutschen</i>
|url=http://ar.wikipedia.org/wiki/المانيا
>
تقوم الصفحة النموذجية باسترجاع كل هذه المتغيرات في علامة #ENV
هكذا: #ENV{سكان}
يساوي 82000000. وتكون هذه العلامة محمية ضد إدخال اي اوامر جافاسكريبت. واذا اردنا ادخال علامات HTML في متغير ما، يجب استخدام عبارة #ENV*{النشيد}
. واذا اردنا ايضاً تطبيق كتابة SPIP، يمكن استخدام [(#ENV*{النشيد}|typo)]
او [(#ENV*{النشيد}|propre)]
.
ويتم تمرير المتغير الاساسي (10 في مثالنا) بطريقتين: #ENV{id}=10
و#ENV{id_modele}=10
، مما يتيح، في حال نادينا قالب بواسطة <article3|chapo>
، الوصول الى مقدمة المقال 3 هكذا: <BOUCLE_a(ARTICLES){id_article}>#CHAPO</BOUCLE_a>
.
او الوصول الى الأخبار المرتبطة بالمفتاح رقم 3 هكذا:
<BOUCLE_b(BREVES){id_mot=#ENV{id}}>#TITRE</BOUCLE_b>
.
كما نرى، يجب على كل قالب ان يملك توثيقه الخاص به لأن الاختصار لا يوضح كيف يتم استخدام العناصر التي يحتويها.
استخدام ممكن في الصفحات النموذجية
لا تستخدم القوالب كاختصارات في المقالات فقط. فمن الممكن نداؤها من الصفحة النموذجية باستخدام علامة #MODELE{model}
او [(#MODELE{model}{p1=شيء1,p2=شيء2}{p3=الخ}|مرشح...)]
. هذا ليس بجديد لأنه يعادل الإدراج (غير الديناميكي) لصفحة نموذجية (وهو الإدراج الذي تطبقه أيضاً علامة #INCLURE
).
القوالب الافتراضية
يأتي SPIP مع القوالب التالية:
– img
و doc
و emb
– article_mots
وarticle_traductions
اللذان يسترجعان تباعاً لائحة المفاتيح المرتبطة بمقال ما وترجمات المقال (الاختصاران: <article1|mots>
و<article1|traductions>
ويتم أيضاً نداء هذين القالبين من الصفحة النموذجية dist/article.html
)
– lesauteurs
الذي يحدد نتاج علامة #LESAUTEURS
ولكن لا يمكن نداؤه كاختصار
– مجموعة من قوالب ترقيم الصفحات (انظر Le système de pagination - لا يزال بالفرنسية).
بعض النصائح لتطوير القوالب
ينصح أولاً بالتفكير في الكتابة (syntax) التي ستعتمد: هل هذا القالب مرتبط بمقال معين؟ اذا كان الجواب بالايجاب تصبح الكتابة <article1|xxx>
.
بعد تحديد الكتابة، يتم إنشاء الملف modeles/article_xxx.html
وإدخال العلامة #ENV
فيه. ثم، في مقال تجريبي، ندخل الاختصار <article1|xxx|param=x...>
. تظهر عندها (على شكل جدول متسلسل) البيئة كما تم تمريرها للقالب، حيث يمكن مثلاً رؤية معرّف المقال (باسم #ENV{id}
و#ENV{id_article}
).
ثم يمكننا البدء بإدخال الصفحة النموذجية لمقطع الصفحة هذه: <BOUCLE_x(ARTICLES){id_article}>
او <BOUCLE_x(ARTICLES){id_article=#ENV{id}}>
. والسلام...
لكي يصبح القالب كاملاً، يجب اختبار الكتابتين <article1|xxx|left>
و[<article1|xxx>->www.spip.net]
.
في الكتابة الأولى، يتم تمرير المتغير align=left
الى القالب (ويفضل ان يُضبط القالب الى الجهة المحددة اي اليسار).
في الكتابة الثانية، يتم تمرير الوصلة كمتغير lien=http://www.spip.net
ونمط الوصلة في lien_classe=spip_out
. ينصح بالأخذ في الاعتبار عنوان URL المطلوب بتحويله الى وصلة في مكان ما من القالب (مثلاً في عنوان او صورة). في هذه الحال، يجب إضافة نمط class="spip_lien_ok"
في علامة HTML الأولى في القالب مما ينبه مدير القوالب بأنه تم الأخذ بالوصلة (وإلا، فإن مدير القوالب سيضيف من عنده <a href=...>...</a>
حول القالب الناتج).
في ما يتعلق بالمتغيرات، فقد تم تطوير العلامة #ENV{x}
بحيث تتجنب كل محاولة إدخال HTML او جافاسكريبت غير مرغوب فيها. وقد نرغب، في قالب ما، بالسماح بإدخال HTML في المتغيرات: يجب عندها استخدام #ENV*{x}
لاسترجاع البيانات وترشيحها اذا اقتضى الأمر بواسطة |propre
او |typo
حسب نوع البيانات (نص يحتوي على عدة فقرات او سطر واحد من النص).
على صعيد البرمجة، يستحسن تصميم القوالب باستخدام الحلقات وتجنب أوامر php والعلامات الديناميكية. يذكر انه في قالب يحتوي php يتم تخزين نتيجة الأوامر في الذاكرة المخبأة وليس الأوامر نفسها (كما هو الحال مع الصفحات النموذجية).