SPIP ٣.٠

Spip ٣.٠ هو إصدار جديد يتميز بإعادة هندسة كاملة للمجال الخاص بتحويله الى صفحات نموذجية وتقسيمه الى وحدات قائمة بنفسها وإدخال حلقة DATA المدهشة.

SPIP ٢.٠ أدخل وظائف تتيح استخدامه كإطار تطوير تطبيقات للنسيج وذلك تخطياً لغرضه الأصلي كأداة نشر وحسب.

ويدفع SPIP ٣ منطق «إطار التطوير» الى مرتبة تجعله يطبق هذا الإطار على نفسه: فتمت إعادة برمجة كامل المجال الخاص على شكل صفحات نموذجية تعتمد على الأدوات والوظائف التي تقدمها لغة برمجة هذه صفحات SPIP.

وشكلت إعادة هنةدسة المجال الخاص فرصة لإعادة التفكير في كيفية عمل العناصر التحريرية وتنظيم استخدامها لجعله متعمم الى ابعد حد: فقد تم التخلي عن معظم الخصائص التاريخية لكل عنصر (والاستثناءات العائدة لها في برمجيات SPIP) لتلخيصها بإعلان بسيط.

بالتالي أصبح إنشاء عناصر تحريرية جديدة وجعل العناصر الموجودة أكثر شخصية أسهل وأسرع.

وأكمل SPIP ٣ تقسيم النظام الى ملحقات بعد ان بدأ SPIP ٢ هذا التقسيم: فكل الوظائف التي يوفرها SPIP ٢ أصبحت تعتمد على نواة SPIP ٣ يحيط بها ٢٣ ملحق.

وأتاح تقطيع النواة الكامل استكمال دارات برمجته (APIs) ونقاط الدخول الى وظائفه التي يحتاجها مطوري الملحقات.

ويتغذى SPIP ٣ أساساً من عمل مطوري عائلة SPIP-Zone ويعكس الاتجاه الذي كان سائداً: فلم تعد النواة هي التي تستدرج تطوير الملحقات بل أصبح تطوير الملحقات هو الذي يغذي تطوير SPIP من خلال اختبارات تلك الملحقات [1]

ومن بين الوظائف الجديدة، يقدم SPIP ٣ حلقة جديدة DATA تجرد اي نوع من البيانات وليس جداول SQL فقط. وصار من الممكن جرد تعداد او ملف CSV او XML او YAML... وأكثر من ذلك، تسمح حلقة DATA بجرد عنوان URL مباشرة: فيصبح من الممكن مثلاً جرد جدول الكتروني من غوغل او روزنامة او لائحة من مشاهد فيديو على يوتيوب او مجموعة من الصور على فليكر... بفضل هذه الحلقة يصبح النسيج العالمي قاعدة بيانات خاصة بك!

المتطلبات: أصبح يتطلب SPIP ٣.٠ إصدار ٥.١.٠ من لغة بي.اتش.بي. على الاقل ليعمل بشكل سليم.

مجال خاص جديد [2]

يبقى المجال الخاص من الناحية البصرية في استمرارية الاصدارات السابقة مع إضافة إيقونات جديدة تتوزع بين:

  • إيقونات التصفح الأساسية من تأليف سيباستيان ديبونوا
  • لباقي الصفحة، مجموعة من الايقونات منحرفة من FatCow.

لكن إعادة هندسة واجهة المجال الخاص هي أساساً تقنية مع أنها ساهمت في حلّ عدد من العيوب التفاعلية القديمة.

فقد تمت إعادة تنظيم التصفح. فأصبحت القوائم المنسدلة داعمة كلياً للتصفح بواسطة لوحة المفاتيح كما ادخلت ادارة لتوقيت العرض لتسهيل استخدامها بواسطة الفأرة وجعلها أكثر متانة تحت حركات المستخدم الغير منتظمة.

إذاً تت إعادة هندسة كامل المجال الخاص على شكل صفحات نموذجية مخزنة في مجلد prive/squelettes ومنظمة داخل مجلدات فرعية تتناسب مع تقطيع الصفحة الى كتل. ويستخدم هذا التقطيع لإعادة تحديث أجزاء الصفحة بتقنية آجاكس مما يجنّب إعادة تحديث الصفحة كاملة ويجعل من التفاعل بين الكتل أكثر سلاسة [3].

أصبح العديد من نقاط الدخول (المستخدمة أساساً من ملحقات النواة) متاحاً على شكل خطوط أنابيب (pipelines) للسماح للملحقات بتوسيع وظائف المجال الخاص.

تمت إعادة تنظيم صفحات المجال الخاص وتسميتها. لا سيما صفحات العناصر التحريرية التي تستخدم تسميات متسقة تعتمد على أسماء العناصر.

كما أتاحة إعادة الهندسة إعادة تأهيل كاملة لهيكل HTML وسهولة التصفح. وتم وضع مرجع ليتمكن مطورو الملحقات من إعادة استخدام البنى نفسها وللتأكد من ان الإضافات التي تدخل على الواجهة تبقى منسجمة مع النواة.

وأصبحت كل لواح العناصر صفحات نموذجية يمكن تعديلها لتصبح شخصية. وتتمتع كلها بإمكان الفرز حسب الأعمدة والتقسيم الى صفحات متعددة بفضل آجاكس.

ويتيح نظام سقالة جديد لصفحات العناصر بناء واجهة مبسطة سريعة للعناصر التي تعلن عنها الملحقات وذيك بشكل آلي دون تدخل المستخدم. ويمكن في ما بعد تعديل كل مكوّن من هذه الواجهة حسب متطلبات كل عنصر: [4].

تم تطوير كل الاستمارات التفاعلية بالاعتماد على نموذج «التحميل والتدقيق والمعالجة» (CVT) مما يتيح تأمين تفاعلات متينة وإدارة صلبة لرسائل الخطأ وتدقيق الإدخال مرفقة بوظائف آجاكس فعالة وإمكان ملء استمارات من عدة صفحات... ويمكن ايضاً توسيع هذه الاستمارات من خلال الملحقات.

ومن حديث الإصدار الجديد يأخذ SPIP ٣ في الاعتبار، في وضعية التحرير، العودة العادية الى اول السطر (فلم يعد من الضروري استخدام «_ »).

وأخيراً، يحتوي المجال الخاص آلية تقنية للقوالب التصميمية التي تتيح شخصنة أوراق الأنماط او الأيقونات. ويمكن استخدام هذه الآلية من قبل ملحق يقدم مثلاً، صفحات شخصية لكل مستخدم حسب تفضيلاته.

تقسيم النظام الى ملحقات

يكمل SPIP ٣ تقسيم النظام الى ملحقات. ولكن تحافظ نواته على إدارة المقالات والأقسام والمؤلفين إضافة الى لغة بدمجة الصفحات النموذجية والهيكل الاساسي للمجال الخاص. وتم تصدير كل الوظائف الأخرى الى ملحقات يتم تثبيتها آلياً خلال عملية التثبيت القياسية للنظام. وتم وضع هذه الملحقات القياسية في مجلدplugins-dist/ [5].

وأتاح تقسيم النواة إكمال عدد من دارات البرمجة الضمنية ووضعها في متناول المطورين الذين يمكنهم إضافة وظائف لا محدودة بالاعتماد على ملحقات SPIP كمثال.

وفي مجال الملحقات، أعاد SPIP ٣ صياغة اعلانات XML بشكل كامل. ففضلاً عن زيادة وضوحها، أدخلت هذه الصياغة مسألة ترجمة الملحقات وتغذية آلية لدليل الملحقات وأداة تحميل لهذه الملحقات.

من جهة اخرى، يمكن للملحقات ان تستفيد من وظائف تحديث قاعدة بيانات النواة (التي تتحكم بنفاذ الوقت «timeout«) وذلك بمجرد الاعلان عن عملية التحديث.

اما الملحقات القياسية التي تأتي مع SPIP فهي:

  • Brèves يدير عنصر التحرير «الأخبار»
  • الرفيق يعرض معلومات مفيدة تساعد الداخل الى المجال الخاص لأول مرة
  • Compresseur اي «الضاغط» كان موجوداً في SPIP ٢.١ ويتكفل بتحسين أداء الموقع اذ يضغط ملفات اوراق الانماط وملفات جافاسكريبت في الصفحة ويدمجها ببعضها. ويقوم هذا الاصدار من الضاغط بتحسين الاوداق حسب الوسائط واستخدام media@ لدمج كل الوسائط في ملف واحد دون تغيير ترتيب تحميلها. واخيرا يتحكم بعناوين URL المطلقة دون اي بروتوكول لكي تعمل أوراق الأنماط المضغوطة تحت http وhttps بالطريقة نفسها.
  • Dump او «النسخ الاحتياطي» يتكفل بإدارة النسخ الاحتياطي واسترجاعه. وقد تمت اعادة برمجة كاملة لهذه الوظيفة لتوفير نسخ احتياطي كامل وموثوق. واصبح النسخ بتنسيق SQLite ويحتفظ بكل جداول القاعدة.
  • Forum يدير عنصر التحرير «المنتدى» في الموقع العمومي كما للتواصل التحريري في المجال الخاص. وإضافة الى إعادة تصميم واجهة المراقبة، أصبحت المنتديات متاحة لكل العناصر التحريرية (الأصلية او تلك التي تضيفها الملحقات).
  • Images اي «الصور» وهو كان موجوداً في SPIP ٢.١ ويتكفل بإدارة كل مرشحات الصور في والألوان في الصفحات النموذجية.
  • jQuery UI يثبت في SPIP المكتبة الإضافية jQuery UI التي تسهّل إنشاء المكونات الرسومية الديناميكية مثل الألسنة والسحب والرمي وشريط تطور العمليات والمؤثرات الخاصة الأخرى.
  • صندوق الفرجة يدعم SPIP بنافذة منبثقة تعرض الوسائط المختلفة او تقدم التفاعلية [6].
  • Medias اي «الوسائط» [7] ويتكفل بإدارة المستندات والصور. وقد تمت إعادة هندسة واجهته ليوفر المستندات لكل العناصر التحريرية.
  • Mots يدير «المفاتيح» ومجموعات المفاتيح. وأصبحت المفاتيح متاحة لكل العناصر التحريرية.
  • Organiseur او «المفكرة» ويقوم بتنظيم وظائف المراسلة الداخلية والروزنامة في المجال الخاص. وتمت إعادة تصميم واجهته كما أصبحت المراسلة الداخلية مزودة بتنبيه عبر البريد الالكتروني. اما الروزنامة فصارت تعتمد على مكتبة FullCalendar التي تتيح تصفح أكثر سلاسة من السابق.
  • Pétitions يدير «العرائض» المرتبطة بالمقالات ويوفر واجهة إدارة جديدة.
  • الريشة كانت موجودة في SPIP ٢.١ وتوفر المساعدة في التحرير المواد.
  • Révisions او «التعديلات». ويتيح هذا الملحق إنشاء إصدارات متتابعة للعناصر التحريرية حسب التعديلات التي تدخل عليها وقد تمت إعادة تصميم واجهة التعديلات.
  • SafeHTML كان في SPIP ٢.١ ويتكفل بأمان المحتوى الآتي من الخارج والذي قد يكون خطيراً على الموقع.
  • Sites يوفر تشغيل عنصر التحرير «المواقع المبوبة» إضافة الى المقالات المرخصة. ويعرض واجهة لكيفية مراقبة المقالات المرخصة.
  • Squelettes par rubriques اي «صفحات نموذجية حسب القسم» ويدير تشغيل الصفحات التي يحتوي اسمها على لاحقة رقم القسم (article-2.html لمقالات القسم رقم ٢ وأقسامه الفرعية مثلاً).
  • الإحصاءات يدير حساب إحصاءات الموقع والمقالات ويأتي بحلة جديدة كلياً.
  • دعم برامج التصفح القديمة منذ الإصدار ٢.١ يقدم وظائف جافاسكريبت يمكن تفعليها لتتيح عرض الموقع بشكل سليم في الإصدارات القديمة لبرامج التصفح.
  • SVP يتحكم بإدارة كاملة للمحلقات من التثبيت الى التحديث مروراً بالتفعيل والبحث.
  • Textwheel هو محرك للكتابة يدعم اختصارات الكتابة في SPIP والتي صارت تأتي بتنسيق YAML. ويوفر هذا المحرك زيادة في سرعة معالجة الاختصارات (قد تصل الى الضعف في بعض الحالات) ويسهّل تطور الاختصارات وجعلها شخصية.
  • Urls Étendues اي «عناوين URL الموسعة» ويدعم العناوين النظيفة والهرمية من خلال واجهة إعداد تضاف اليها واجهة إدارة متطورة اختيارية لإدارة عناوين كل صفحة بدقة أكبر.
  • الفقرات التي كانت موجودة في الإصدار ٢.١ والتي تتيح للمشرف على الموقع عرض محتوى جداول قاعدة البيانات بواسطة صفحة نموذجية يتم إنشاؤها آلياً حسب بنية جدول القاعدة. وأصبح هذا العرض محصوراً بالمجال الخاص.

صفحات نموذجية قياسية جديدة

بمناسبة الإصدار ٣، تمت إعادة تصميم الصفحات النموذجية القياسية. فبفضل توزيع التصميم على عدة أوراق أنماط يتم استخدامها بشكل مستقل (أسلوب دايزي، أنظر Un, deux, trois… feuilles CSS !)، أصبحت هذه الأوراق تشكل إطار عمل HTML/CSS معياري يمكن استخدامه مباشرة لإطلاق الموقع. وتقدم هذه الصفحات معالجة للكتابة كاملة ومنسجمة مستوحات من إطار عمل Blueprint. وتم تبديل spip_style.css التقليدي بملف spip.css الذي يمكن استخدامه كتكملة لإطار عملك المعتاد.

وتعتمد الصفحات النموذجية بنية HTML جديدة تتحضر لقدوم HTML٥ بدعم علاماته ومحدداته الشرطية لمرونة أكبر في الأنماط.

وظائف جديدة

تم تحسين دعم SQLite بشكل كبير وأصبح تنسيق قواعد البيانات المقترح قياسياً لدى تثبيت جديد للنظام (اذا كان جهاز الخدمة يدعمه طبعاً) وذلك بفضل سهولة التعامل معه [8].

وتم تعميم إدارة العناصر التحريرية. بالتالي، أصبح من الممكن ربط المؤلفين والمستندات والمفاتيح والمنتديات والتعديلات والشعارات بأي عنصر (من عناصر SPIP او العناصر التي تنشئها الملحقات بواسطة دارة برمجية جديدة لإعلان هذه العناصر).

وعندما يتم تفعيل تنبيه التحرير المتزامن، يصبح هذا التنبيه متاحاً لأي عنصر قيد التحرير.

وأضيف الى هوية الموقع شعار نصي الى جانب الشعار الرسومي يظهر بين اسم الموقع ووصفه ويمكن استخدامه في الموقع العمومي بواسطة علامة #SLOGAN_SITE_SPIP.

أما شاشة الأمان فتم دمجها بالنظام قياسياً.

من جهتها صارت السجلات (ملفات logs) تتمتع بإدارة تعتمد على أهميتها. فقياسياً أصبحت السجلات أقل تفصيلاً في الموقع الحي ولا تسجل الا الأخطاء والمعلومات المهمة. ويمكن تحديد مستوى التسجيل خلال تعقب الأخطاء او التطوير مما يتيح الوصول الى المعلومات الضرورية.

وتم الاستغناء عن التنفيذ الدوري (cron) الذي يعتمد على الملفات لاستبداله بلائحة مهمات قيد الانتظار (والتي تدير أيضاً المهمات الدورية). وتيتح هذه اللائحة برمجة عمليات غير متزامنة [9] وتقدم دارة برمجية سهلة لمطوري الملحقات.

وأصبح آجاكس المطبق في الصفحات النموذجية ({ajax} على الإدراج INCLURE) يتيسمتع بدعم لخصائص ARIA لتحسين تواصله. كما ان سيرة التصفح اصبحت متوافرجة آلياً بفضل دارة برمجة «History» الخاصة بلغة HTML٥ [10]. وبالتالي يتم تحديث عنوان URLفي المتصفح آلياً على وصلات آجاكس مما يتيح العودة الى الوراء دون مشاكل.

اما القوالب المستخدمة في النصوص التحريرية، فتحصل آلياً على بيئة الصفحة النموذجية التي تعرض فيها[أنظر]]

وتستخدم استمارات المجال الخاص الإمكانات المتاحة في HTML5 مثل خاصية code>required او خاصية placeholder.

وصار من الممكن فرار حروف # [ ] ( ) { } < > في الصفحات النموذجية باستخدام خط مائل \. فيصبح من الممكن كتابة شروط مثل خيار يمكن تحديده في استمارة بشكل أجمل دون ان يظهر قوسا خاصية name ويؤثرا على قوسي العلامة المغلِفة

[(#ENV{param}|oui)
   <label for='tender'>بحنية؟</label>
   <input type='checkbox' name='avec_quoi\[\]' id='tender' checked='checked' value='tender' />
]

الاختصارات

تم إدخال اختصار خاص بالاختصارات نفسها: [م.ت.ف|منظمة التحرير الفلسطينية] (او [CMS|Content Management System{en}] للدلالة على لغة مختلفة عن لغة المقال الأساسية) وينتج عن ذلك علامة abbr اي الاختصار [11].

ويمكن لقوالب المستندات أن تأخذ قيم العرض والارتفاع مما يتيح تغيير أبعادها:<docxx|largeur=150>.

وأصبح النظام يتحكم بالجداول المربعة (السطور والأعمدة) بشكل أفضل من السابق.

لم يعد من الضروري استخدام الاختصار «_ » للعودة البسيطة الى أول السطر. وللعودة الى هذا الاختصار يمكن إضافة define('_AUTOBR', ''); في ملف mes_options.php.

الحلقات

تم تعميم نظام الحلقات لكي يطبق ليس مباشرة على جداول SQL كما في السابق ولكن على مكرر (iterator). ويؤمن مكرر SQL التصرف التقليدي للحلقات على جداول قاعدة البيانات ولكن صار من الممكن تطبيق الحلقات على اي نوع من البيانات القابل للتكرار: {}->art5444]

المثال الأول للتطبيق الجديد للحلقات: الحلقة DATA توسع عمل الحلقات ليشمل اي معلومات مبنية على شكل جدول. فصار من الممكن تطبيق حلقة على ملف CSV او على عنوان URL بعيد يسترجع معلومة بتنسيق JSON...:

ولتسهيل الانتقال السلس من الحلقات التي كانت تستخدم معياري POUR وCONDITION يتم دعم هاتين الحلقتين باعتبارهما حالة خاصة من حلقة DATA وذلك بالكتابة نفسها التي كانتا تأتيان بها.

المعايير

{si ...} (معيار «إذا»): يتيح تنفيذ حلقة بشرط يتم إعلانه في المعيار الذي لا يرتبط بالبيانات في القاعدة ولكن يرتبط بسياق الصفحة النموذجية.

{tri ...} (معيار «فرز»): يقترن بعلامة الفرز #TRI لتنفيذ فرز سهل.

{feuille} (معيار «الورقة»): يتيح اختيار الأقسام التي لا تملك أقسام فرعية (أي الأقسام الموجودة في أسفل الهرم).

{noeud} (معيار «العقدة»): يتيح اختيار الأقسام التي تملك أقسام فرعية.

{!racine} (معيار «ليس الأصل»): يستثني الأقسام الأساسية الموجودة في أصل الموقع.

{profondeur=3} (معيار «العمق = ٣»): يتيح اختيار أقسام المستوى ٣ في الهرمية (علماً ان الأصل هو المستوى صفر والأقسام الأساسية تشكل المستوى ١ وأقسامها الفرعية المستوى ٢ وهكذا دواليك).

العلامات

يمكن للقوالب ان تحوذ على ذاكرة كاش اذا كانت تحتوى على علامة #CACHE (لكن قياسياً لا تحتوي القوالب على هذه العلامة)

كذلك في المجال الخاص، لا تملك الصفحات النموذجية اي كاش الا اذا وجدت علامة #CACHE فيها.

#LOGO_DOCUMENT يمكن ان يأخذ قيمة إضافية هي وضعية عرض الشعار الرسومي:

  • auto (آلي وهي الوضعية القياسية والمعروفة سابقاً) تعرض رمز الشعار آلياً اذا وجد والا فتعرض مصغراً عنه والا فتعرض رمز نوع المستند.
  • icone (الأيقونة) تدل الى الأيقونة المناسبة لنوع الملف الذي يجب عرضه.
  • apercu (معاينة) تعرض معاينة للصورة فقط حتى لو وجد رمز لهذه الصورة.
  • vignette (الرمز) تعرض رمز المستند اذا وجد او لا شيء اذا غاب.

واختفت علامة #SPIP_CRON ولم يعد لها اي تأثير في الصفحات النموذجية حيث لم تعد مستخدمة.

#BOUTON_ACTION{label, url, class, confirm, title, callback} تنتج استمارة HTML صغيرة تحتوي على زر واحد معنون «label» وينتج عن نقره عملية POST نحو عنوان «url». ويفضل استخدام هذه العلامة بدلاً من رابط عندما تقوم صفحة «url» بإدخال تعديلات على قاعة البيانات. واذا كانت «class» تشمل قيمة «ajax» يقوم الزر بإعادة تحميل كتلة آجاكس التي تحتويها. أما «confirm» فيتيح تحديد رسالة تطلب من المستخدم تأكيد العملية و«title» هو المحتوى المشابه لما يعرضه الزر وأخيراً «callback» وهي دالة جافاسكريبت يتم نداؤها لدى النقر على الزر.

#INFO_XXX{article, 13}: تتيح استرجاع #XXX دون الحاجة الى حلقة ARTICLES على المقال 13 (تستخدم لأي حلقة او اي حقل من الحلقة: #INFO_TITRE{article,13} او #INFO_NOM{auteur,2}...).

#CONFIG{name} تسمح بعرض قيمة عنصر الإعداد name.

اذا كان هذا العنصر جدولاً، يمكن الوصول مباشرة الى قيمة بفضل الكتابة #CONFIG{name/subvalue} التي تسترجع القيمة subvalue العائدة لعنصر الإعداد name. للوصول الى عنصر الإعداد لجدول محدد في احد الملحقات يجب استخدام الكتابة #CONFIG{/metamyplugin/name}: ببدئها بـ/، تدل على اننا نريد اسم الجدول الإعدادي spip_metamyplugin بدلاً من الجدول spip_meta الخاص بـSPIP. في جميع الأحوال ، يمكن تحديد قيمة إضافية قياسية يجب تستخدم اذا كان عنصر الإعداد غير موجود بعد: #CONFIG{name,defaultvalue}.

مثل #CONFIG{name/subvalue}، تتيح علامات #ENV و#GET و#SESSION استخدام الخطوط المائلة للحصول على قيم فرعية من الجدول هكذا: #ENV{name/subvalue} و#GET{table/key/subkey} و#SESSION{prefs/colour}.

#PUBLIE: لاختبار وضعية عنصر ما (منشور ام لا). وتستخدم داخل حلقة وترتبط ضمنياً بالعنصر الحالي في الحلقة او تترافق بقيم صريحة: [(#PUBLIE{article, 3}|oui) ... ] اذا ارتبطت بأي عنصر آخر.

#CLE و#VALEUR علاماتان تسمحان بعرض المفتاح والقيمة في حلقة من نوع DATA. فتتيح #VALEUR{x} عرض قيمة x اذا كانت #VALEUR جدولاً (تعادل [(#VALEUR|table_valeur{x})]). يمكن تسلسل عدة قيم في العلامة #VALEUR{x/y/z} لعرض قيمة في مستوى فرعي من الجدول.

#PRODUIRE: تسترجع اسم الملف الثابت الناتج عن صفحة نموذجية. وهي مفيدة لاسترجاع ورقة أنماط او ملف جافاسكريبت تم آنتاجهما ديناميكياً. وتتم كتابتها مثل علامة #INCLURE: #PRODUIRE{fond=mysheet.css,couleur=ffffff} لاستخدام الصفحة mysheet.css.html.

#LISTE{a,b,c} ببساطة تسترجع جدولاً يحتوي على القيم a وb وc. وهي كتابة مختصرة لـ#ARRAY{0,a,1,b,2,c}.

#TOTAL_UNIQUE تسترجع عدد العناصر المعروضة بواسطة المرشح code>|unique. اذا تم استخدام |unique{name}، يجب ذكر الاسم نفسه في العلامة: #TOTAL_UNIQUE{name}

في المجال الخاص:

#AIDER{surtitre} تتيح عرض رابط الى القسم surtitre في التعليمات الفورية للنظام.

code>#BOITE_OUVRIR و#BOITE_PIED و#BOITE_FERMER: تتيح استخدام الإطارات الخاصة بالمجال الخاص:

  • #BOITE_OUVRIR{title,class} تفتح إطاراً. يمكن عدم آدراج title. اما خصائص الأنماط في المجال الخاص فهي simple وinfo وnote وraccourcis وimportant.
  • علامات HTML التي تلي هذه العلامة تكون ضمن الإطار.
  • #BOITE_PIED تسمح بالانتقال الى اسفل الإطار عندما يكون من الضروري إدخال تذييل للإطار.
  • #BOITE_FERMER تغلق الإطار.

تعرض صفحة المجال الخاص ecrire/?exec=charte_boites التي يوفرها ملحق http://plugins.spip.net/dev العديد من الأمثلة.

#FORMULAIRE_RECHERCHE_ECRIRE تعرض استمارة البحث في المجال الخاص. يمكن تزويدها بعامل اول هو عنوان URL الذي ستذهب اليه الاستمارة بعد تنفيذها وخاصية أنماط كعامل ثان. وفي وجود جافاسكريبت تتصرف الاستمارة كرابط الى عنوان يشمل نص البحث. اذا اضفنا خاصية آجاكس كعامل ثان، تقوم الاستمارة بإعادة تحميل كتلة آجاكس التي يغلفها رابط آجاكس: #FORMULAIRE_RECHERCHE_ECRIRE{#SELF, ajax}.

code>#CHEMIN_IMAGEarticle-24.png تسترجع مسار أيقونة article-24.png العائدة الى نوع واجهة المجال الخاص الذي اختاره المستخدم.

المرشحات

code>|lien_ou_expose يتيح بسهولة إنشاء قائمة بعدة روابط بإبراز الرابط المحدد، بـ<strong> وبالحفاظ على رابط <a> اذا لم يكن محدداً. مثلاً: [(#URL_PAGE{mapage}|lien_ou_expose{libelle, #ENV{page}|=={mypage}, classe, title, rel})]

code>|singulier_ou_pluriel يعرض سلسلة نصية (مفرد) او سلسلة أخرى (جمع) حسب العدد المطبق عليه: [(#TOTAL_BOUCLE|singulier_ou_pluriel{1_article,nb_articles})]. وتشكل 1_article وnb_articles سلاسل لغة تتلقى العدد كعامل @nb@. اذا كان العدد صفراً لا يعرض المرشح أي شيء.

|balise_img يتيح إنشاء علامة HTML من نوع <img> بسرعة ناتجة عن اسم ملف وبتحديد العرض والارتفاع آلياً لتسريع تحميل الصفحة: [(#CHEMIN{myimage.png}|balise_img{alt,class})]

|affdate_debut_fin يعرض بشكل جمالي مجالاً زمنياً يمتد بين تاريخ بداية وتاريخ نهاية مع الأخذ بالحسبان إمكان كون التاريخين في اليوم نفسه او الشهر نفسه او السنة نفسها كما يمكنه عرض الساعة ام لا (من خلال عامل oui او non). مثلاً: [(#DATE_DEBUT|affdate_debut_fin{#DATE_FIN,horaireouinon})].

|timestamp يضيف توقيت بتنسيق ?1234567890 الى اسم ملف حيث يكون الرقم تاريخ الملف بالثواني منذ الأول من كانون الثاني ١٩٧٠ (اي ختم يونيكس الزمني). وتظهر فائدة هذا المرشح في تبويب ملفات أوراق أنماط مثلاً للتأكيد على ان المتصفح سيقوم بتحميلها عندما يتغير عنوان URL: [<link rel="stylesheet" href="(#CHEMIN{css/perso.css}|timestamp)" type="text/css" />]

|objet_icone يسترجع الأيقونة القياسية لعنصر ما. قياسياً، يتم استرجاع الأيقونة بحجم ٢٤ نقطة الا اذا تم إدخال حجم ١٦ او ٣٢ نقطة كعامل في المرشح: [(#OBJET|objet_icone{16})].

|objet_info يسترجع خاصية عنصر ما كما تم إعلانها (او كان SPIP قد حددها آلياً) من خلال الدارة البرمجية declarer_tables_objets_sql.

|objet_afficher_nb يعرض عدد العناصر مع الأخذ في الحسبان العدد الذي يطبق عليه المرشح وسلاسل اللغة المرتبطة بالعنصر: فيعرض [(#TOTAL_BOUCLE|objet_afficher_nb{auteur})] مثلاً «مؤلف واحد» او «٢٣ مؤلف».

|wrap يغلف نص علامة HTML: يعطي [(#TITRE|wrap{<h3>})] نفس نتيجة [<h3>(#TITRE)</h3>].

|generer_info_entite يعرض حقل عنصر من SPIP: يسترجع [(#ID_ARTICLE|generer_info_entite{article,titre})] العنوان المنسق للمقال #ID_ARTICLE. ويعادل [(#INFO_TITRE{article,#ID_ARTICLE})].

في المجال الخاص:

|icone_horizontale يعرض إحدى أيقوات المجال الخاص بتنسيق أفقي. وكتابته هي: [(#URL|icone_horizontale{label,icon,function})]. ويمكن ذكر icon بشكل مختصر (article) وتظهر حينها بحجم ٢٤ نقطة او بشكل واضح (article-24.png). ويحدد العامل الثالث function مجموعة من العمليات المرتبطة بالأيقونة ويمكن أن تكون حسب الرغبة add او del او edit او new او غير غير مذكورة. مثلاً:

[(#URL_ECRIRE{auteur_edit,new=oui}|icone_horizontale{<:icone_creer_nouvel_auteur:>,auteur,new})]</code

{{<code>|icone_verticale

يعرض إحدى أيقوات المجال الخاص بتنسيق عمودي. وكتابتها مثل كتابة |icone_horizontale.

|bouton_action_horizontal يستخدم نفس كتابة |icone_horizontale ويعرض نتيجة مشابهة بصرياً. الا ان علامة HTML تكون من نفس نوع #BOUTON_ACTION لتشغيل عملية POST نحو عنوان URL ويستخدم خاصة عندما يقوم عنوان URL بإدخال تعديلات على قاعدة البيانات.

|sinon_interdire_acces اذا وضع في اي مكان في الصفحة، يمنع الوصول الى هذا المكان عندما تكون العبارة التي يطبق عليها غير صحيحة. في هذه الحال، يتم عرض صفحة خطأ الا اذا تم ذكر عنوان URL كعامل إعادة توجيه (يمكن كذلك إدخال وضعية http لإعادة التوجيه كعامل ثان). ويستخدم عموماً عندما نرغب في التدقيق في الأذونات [(#AUTORISER{modifier,article,#ID_ARTICLE}|sinon_interdire_acces)].

جافاسكريبت

يستخدم SPIP ٣ الإصدار ١.٧.٢ من jQuery وأصبح يدمج jQuery UI بإصدار ١.٨.٢٠. وصار من الممكن استخدام إصدار مختلف من jQuery في الموقع العمومي بتعديل مجلد javascript/jquery.js في مجلد squelettes/ دون خطر التأير السلبي على المجال الخاص.

روابط آجاكس: لم تعد روابط .ajax تقطع سيرة التصفح في برامج التصفح التي تدعم دارة برمجة HTML٥ (فايرفوكس وسافاري وكروم لدى كتابة هذا المقال). بمعنى آخر، عندما ننقر على رابط آجاكس في SPIP يقوم بإعادة تحميل جزء من الصفحة، يتم تحديث عنوان URL في المتصفح مما يتيح للزائر انقر على «السابق» للغودة الى الوراء.

خصائص أنماط خاصة لروابط آجاكس:

  • .nohistory يعني ان الرابط ليس له أي تأثير على سيرة التصفح في المتصفح عندما يتم نقره
  • .preload يشير لـSPIP بأنه يجب تحميل محتوى رابط آجاكس مسبقاً حال تحميل الصفحة. بالتالي يؤدي النقر على الرابط الى تحديث فوري
  • .nocache يشير لـSPIP بأنه لا يجب وضع محتوى رابط آجاكس في ذاكرة كاش. بالتالي تتسبب كل نقرة على الرابط بإعادة تحميل من جهاز الخدمة (قياسياً، يتم التحميل الأول فقط ويقوم المتصفح بحفظ المحتوى).

التحكم عن بعد بتحميل كتل آجاكس: تتيح روابط .ajax قياسياًإعادة تحميل كتلة آجاكس التي تغلفها، لكن نحتاج أحياناً لإعادة تحميل كتلة آجاكس أخرى من الصفحة.

من أجل ذلك، صار من الممكن تسمية كتل آجاكس خلال إدراجها <INCLURE{fond=...,ajax=blocname} />. يمكن عندها إعادة تحميل كتلة آجاكس التي تمت تسميتهاوذلك بواسطة النداء ajaxReload('blocname');. يمكن إضافة عامل ثان مكون من لائحة خيارات تحتوي:

  • callback: الدالة التي يجب استخدامها بعد تحميل الكتلة بواسطة آجاكس
  • args: لائحة بالعوامل المطلوب تمريرها الى عنوان URL خلال تحميل الكتلة ((تتيح تغيير علامة #ENV الخاصة بالكتلة التي تم تحديثها)
  • history: عامل الدلالة الى التأثير على سيرة التصفح ام لا. مثال:
    ajaxReload('blocname', {
       callback:function(){alert('finish');},
       args:{id_article:3},
       history:false
       });
    

ajaxReload يسخدم أيضاً على محدد jQuery مما يؤدي الى إعادة تحميل أصغر كتلة آجاكس تغلف العنصر المطلوب. عندها لا يأخذ الا عامل واحد (لائحة الخيارات): $('#contenu').ajaxReload({args:{id_article:3}})

إدارة الحركة مع جافاسكريبت: خلال العمليات التفاعلية الآتية من المستخدم، يمكن إطلاق عدد من المؤثرات المتحركة على محدد jQuery :

  • يؤدي jQuery('#myid').animateLoading() الى مؤثر حركة التحميل على #myid (ينطلق آلياً لدى إعادة تحميل آجاكس)
  • jQuery('#myid').endLoading() يتسبب بإيقاف حركة التحميل على #myid (ينطلق آلياً لدى إعادة تحميل آجاكس)
  • jQuery('#myid').animateAppend() يحرك الكتلة #myid ليظهركما لو انه أضيف للتو
  • jQuery('#myid').animateRemove() يحرك الكتلة #myid لتبدو انها حذفت من جراء العملية

وظائف مساعدة: تستخدم parametre_url() مثل قدينتها في لغة PHP لإضافة عوامل على عنوان URL او حذفها او استرجاعها:

  • parametre_url(url,arg,value) تضيف arg=value الى url وتسترجع العنوان المعدل
  • parametre_url(url,arg,'') تحذف قيمة arg من url وتسترجع العنوان المعدل
  • parametre_url(url,arg) تسترجع قيمة arg في url

اما $('a').followLink() فتتبع الرابط بمحاكاة نقرة عليه (تأخذ في الحسبان كون الرابط من نوع آجاكس ام لا)

الانبثاق في المجال الخاص اذا نقرنا على رابط الى صفحة في المجال الخاص وكان هذا الرابط يتمتع بنمط .popin ستظهر نافذة منبثقة تعرض قلب الصفحة المستهدفة (اي الكتلة (contenu/). ويحتفظ الرابط بقابلية النقر وفتح الهدف في نافذة أخرى من خلال زر الفأرة الأيمن مما يعرض الصفحة كاملة.

الدارات البرمجية

يقدم SPIP ٣ عدة دارات برمجية قياسية (APIs) لإدارة العناصر التحريرية:

  • إدارة قياسية لجداول روابط اي عنصر بأي عتصر آخر وهي دارةediter_liens
  • إنشاء عناصر تحريرية جديدة بسهولة بدارة إعلانية
  • إدارة قياسية لدالات إدراج العناصر تحريرية وتعديلها ونشرها: الدارة editer_objet
  • تتيح objet_test_si_publie($objet, $id_objet) سهولة اختبار كون اي عنصر منشور ام لا حسب وضعيته كما هي معلنة (وحسب نشر مستقبلي اذا وجد)
  • تسترجع generer_url_ecrire_objet($objet,$id_objet,$args, $ancre) عنوان URL الخاص بصفحة العنصر في المجال الخاص. ويمكن اضافة $args و$ancre اختيارياً.
  • يتم نداء الأنبوب optimiser_base_disparus لدى حذف العناصر الموجودة في سلة المهملات نهائياً من قاعدة البيانات والروابط الميتة الناتجة عنها.

ويدعم SPIP ٣ آيضاً إدارة للائحة مهمات تتيح برمجة تنفيذ بعض العمليات في المستقبل او بشكب غير متوازي (اي في اسرع وقت ممكن ولكن دون إجبار المستخدم على الانتظار).

وتم تسهيل عملية تنثبيت الملحقات بفضل تحكم آلي باستمارات #FORMULAIRE_CONFIGURER_XXX وباستخدام دالات lire_config وecrire_config وeffacer_config (انظر Configurer une fonctionnalité de votre site, ou un plugin)

اما استمارات CVT، فتتيح آنشاء استمارات من عدة صفحات وتدعم أيضاً النسخ الاحتياطي الآلي للمحتوى وذلك بفضل إعلان بسيط. ويتيح أنبوب formulaire_fond جعل تصميم الاستمارات شخصياً (بتغيير علامات HTML) [12].

في دارة برمجة SQL

  • تمت إضافة دالة sql_skip التي تتيح القفز فوق عدد من النتائج.
  • تمت ترجمة القيم null في sql_updateq وsql_insertq الى NULL ولم تعد تعامل كسلاسل فارغة.
  • وتسمح دالتا sql_demarrer_transaction وsql_terminer_transaction ببدء معاملة SQL وإنهائها [13].

إنشاء نقطة دخول «عازل» (public/sandbox.php) لمعالجة الصفحات النموذجية تتيح لأي ملحق إدارة معالجة الصفحات النموذجية ضمن مجموعة من المرشحات والدالات ووضعها في لائحة بيضاء او لائحة سوداء ومنع أوامر PHP في هذه الصفحات.

تخصص المعايير صار من الممكن إضافة بادئة هي اسم جهاز الخدمة او جدول من قاعدة البيانات الى دالة المعايير. ويتم البحث عنها بالترتيب التالي: fonction critère. La recherche se fait dans l’ordre :

  1. criterion_server_TABLE_mycriterion_dist,
  2. criterion_server_TABLE_mycriterion,
  3. criterion_server_mycriterion_dist,
  4. criterion_server_mycriterion,
  5. criterion_TABLE_mycriterion_dist,
  6. criterion_TABLE_mycriterion,
  7. criterion_mycriterion_dist,
  8. criterion_mycriterion

في ملف options.php الخاص بملحق ما او في ملف mes_options.php، تتيح $GLOBALS['marqueur_skel'] .= ":prefixe" التمييز بين ذاكرة كاش والصفحات النموذجية المعالجة كما كانت $GLOBALS['marqueur'] .= ":prefixe" تميز بين ذاكرة كاش والصفحات النموذجية.

حواشي

[1عدى عن ملحق الريشة التي تم دمجه في SPIP ٢ والذي دشن هذا الاتجاه، نذكر ملحقات Afficher_objets وBase CSS وNavigation du privé وCVT multi-étapes وForum وJob-queue وصندوق الفرجة ومكتبة المستندات وTextWheel وURLs éditables وComments والتي ساهمت في تطوير SPIP ذاته. وتم دمج ملحقات أخرى لكن مع بعض التعديلات التي ادخلت عليها.

[2لقد بدأت هذه الورشة منذ وقت في منطقة التطوير SPIP-Zone والذين سبق واستخدموا ملحق تصفح المجال الخاص (Navigation du privé) او ملحق مكتبة المستندات سيجدون المجال الخاص الجديد مألوفاً.

[3مثلًا، الانتقال الى تحرير المقال أصبح فورياً بفضل التحميل المسبق لكتلة التحرير بواسطة آجاكس.

[5في SPIP ٢.١ كانت محفوظة في مجلد extensions/ الذي تم الغاؤه في الإصدار الجديد

[6انه بديل عن ملحقات مثل Thickbox وLightBox... ويعتمد على مكتبة Colorbox

[7وكان يعرف في الاصدار ٢ باسم مكتبة المستندات

[8في المقابل لا يزال دعم PostGreSQL تجريبياً وغير مكتمل لاستخدامه في موقع حي.

[9مثلاً، مهمة إرسال بريد ما في أسرع وقت ممكن تتيح للمستخدم إكمال عمله دون انتظار تنفيذها

[10في كل برامج التصفح الحديثة باستثناء إنترنت إكسبلورر الذي لا يدعمها بعد.

[11فعلامة <acronym> لم تعد مستخدمة في HTML5

[13وكتجربة تم أيضاً إدخال sql_preferer_transaction لتجنب مشاكل بطء الأداء في حال الإدخال المتعدد في قاعدة SQLite والذي يتم تنفيذه بسدعة أكبر في وضعية المعاملة - transaction. هذه الوظيفة تسترجع true في SQLite فقط.

مؤلف George نُشر في: تم التحديث: 19/04/23

الترجمات: عربي, English, français, Nederlands, українська