المبدأ العام - نسخة أرشيف

لا يصلح هذا المقال الا لأصدارات SPIP حتى الإصدار spip 1.8.3 وبالتالي فإنه قديم منذ اعتماد spip 1.9. للإصدارات الحديثة من SPIP يرجى الذهاب الى هنا.

الا ان قراءة هذا المقال لا تخلو من الفائدة. فلا يزال ما قيل فيه حول ملفات html ساري المفعول غير ان ملفات php3. اختفت وعنا،ين URL تغيرت.

يتم تخزين كامل محتوى اي موقع يديره SPIP في قاعدة بيانات MySQL. ولعرض هذه المعلومات على زوار الموقع، يجب تنفيذ عملية قراءة هذه المعلومات وتنظيمها وتصميم صفحات لها لعرض صفحة HTML في متصفح النسيج.

عادة تكون هذه العملية طويلة ومعقدة:

- فيجب اتقان برمجة PHP وMySQL وكتابة «فقرات برمجية» لا تخلو من التعقيد.
- ليس من السهل دمج هذه الفقرات البرمجية في تصميم متطور للصفحات بـHTML.
- يجب الاخذ في الحسبان مسائل الأداء: فالاعتماد المكثف على برمجة PHP وMySQL يستهلك قدراً كبيراً من موارد الخادم مما يؤدي الى ابطاء التصفح وفي بعض الحالات الى تعطيل الخادم برمته.

لذلك يوفر SPIP حلاً متكاملاً للتغلب على هذه المصاعب:

- يتم تصميم الموقع باستخدام صفحات HTML اسمها الصفحات النموذجية وتحتوي على اوامر مبسطة تحدد اين على الصفحة يجب وضع المعلومات المسحوبة من قاعدة البيانات وكيف.
- يتيح نظام للذاكرة المخبأة تخزين كل صفحة وبالتالي تجنب ارسال استفسارات الى قاعدة البيانات لدى كل زيارة. فإضافة الى تخفيف العبء عن الخادم، يساهم هذا النظام بتسريع تصفح الموقع بشكل ملحوظ فضلاً عن ان موقعاً يديره SPIP يبقى متاحاً للتصفح حتى اذا طرأ عطل على قاعدة البيانات.

زوج من الملفات مخصص لكل نوع من المستندات

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

وميزة طريقة العمل هذه واضحة للغاية: نحدد تنسيق نموذجي (او صفحة نموذجية) لكل المقالات مثلاً، فيقوم النظام بإنشاء كل صفحة بوضع عنوان كل مقال ومادته ووصلات التصفح آلياً.

ولكل نوع من المستندات يحتاج SPIP الى ملفين: ملف .php3 وملف .html. ولدى تثبيت SPIP، ستجد ازواج الملفات: «article.php3 / article.html» و«rubrique.php3 / rubrique.html» الخ. وبالطبع يمكنك تعديل هذه الازواج او انشاء ازواج اخرى.

مبدأ عمل الذاكرة المخبأة

يتم نداء صفحة معينة بواسطة ملف .php3. فمثلاً لجلب المقال رقم 5، نحتاج الى العنوان:

- http://mysite.net/article.php3?id_article=5

1. اذاً الملف المطلوب هو article.php3 مرفق بعامل id_article=5.

2. الملف article.php3 هو ملف PHP واول ما يفعله هو التأكد من وجود ملف مناسب للمقال في مجلد /CACHE على الخادم.

2مكرر. اذا كان الملف المطلوب موجوداً في /CACHE، يقوم article.php3 بالتأكد من تاريخ انشائه. واذا كان الملف حديثاً يجلبه مباشرة الى الزائر وتكون زيارة المقال قد تمت.

3. اذا كان الملف المطلوب غير موجود في /CACHE (لأنها الزيارة الاولى لهذا المقال مثلاً) او اذا كان قديماً يبدأ SPIP عملية معالجة الصفحة.

4. يتم تحميل الصفحة article.html وتحليلها. وتحتوي هذه الصفحة على التصميم المناسب لهذا النوع من المستندات. ويعتمد هذا التصميم على HTML تكمّله اوامر تتيح وضع العناصر المسحوبة من قاعدة البيانات. واعتماداً على العناصر المطلوبة من article.html، يسحب SPIP المعلومات الضرورية من قاعدة MySQL ويدرجها في المواقع المخصصة لها في الصفحة.

5. هكذا يقوم article.php3 بإنشاء ملف، بالاعتماد على الوصف الموجود في article.html، وباستخدام العناصر المسحوبة من قاعدة البيانات. ويتم حفظ هذا الملف الجديد في مجلد /CACHE ثم ارساله الى الزائر.

ولدى زيارة لاحقة، واذا كانت الفترة بين الزيارتين قصيرة نسبياً، يتم تحميل الملف الجديد المخزّن في /CACHE دون الحاجة الى تكرار معالجة الصفحة باستخدام قاعدة البيانات. وفي حال طرأ عطل على قاعدة البيانات، يتم تحميل الملف الموجود في الذاكرة المخبأة حتى لو كان «قديماً».

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

الملف PHP3

ان ملف «.php3» بسيط جداً. فيحتوي article.php3، مثلاً، على:

اذاً هدفه الوحيد هو تحديد متغيرين اثنين: ($fond و$delais) ونداء الملف الذي يقوم بتشغيل SPIP (وهو inc-public.php3).

اما المتغير $fond فهو اسم الملف الذي يحتوي على وصف تصميم الصفحة (اي الصفحة النموذجية). وهنا، بما ان $fond=”article”، سيكون ملف وصف التصميم موجوداً في article.html نفسه [1]. لا حظ انه في المتغير $fond لا نحدد لاحقة «.html».

ملاحظة. ان ميزة الاختيار الشخصي لملف الصفحة النموذجية (والذي يمكن استنتاجه مباشرة من اسم ملف .php3) تكمن في امكان اختيار اسم آخر اذا دعت الحاجة. وذلك لتفادي استبدال ملفات HTML قد تكون باقية من اصدار قديم للموقع ولا نريد حذفها. فإذا كان هناك ملف article.html ناتجاً عن اصدار قديم من الموقع ولا نريد حذفه، يمكننا استخدام ملف صفحة نموذجية اسمه article-new.html ونعطي في article.php3 للمتغير قيمة:
$fond=”article-new”.

واما المتغير $delais، فهو المدة القصوى المسموح خلالها استخدام الملف المخزّن في مجلد /CACHE. ويتم تحديد هذه المدة بالثواني اي ان مدة قيمتها 3600 تعني ساعة واحدة ومدة قيمتها 24*3600 تعني 24 ساعة.

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

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

الملف HTML.

في SPIP تُعرف ملفات .html بـالصفحات النموذجية. فهذه الملفات هي التي تصف واجهة الصفحات الرسومية.

ويتم تطوير هذه الصفحات مباشرة بلغة HTML يضاف اليها اوامر تحدد لـSPIP مواقع العناصر التي يسحبها من قاعدة البيانات (من نوع: «ضع العنوان هنا» او «ضع هنا قائمة بالمقالات التي تتطرق الى موضوع واحد»...).

وتتم كتابة اوامر تحديد هذه المواقع بلغة خاصة هي موضوع دليل الاستخدام هذا. وتشكل هذه اللغة الصعوبة النسبية الوحيدة في SPIP.

ماذا؟ لغة إضافية؟ نعم، عليك بتعلّم هذه اللغة الإضافية. الا انها بسيطة للغاية وتتيح تصميم واجهات معقدة بسرعة مذهلة. ومقارنة ببرمجة PHP/MySQL، ستجد ان هذه اللغة تشكل توفيراً مدهشاً في الوقت (خاصة انها ابسط بكثير). في الحقيقة هذه اللغة هي لغة تعليم اي انها تستخدم علامات تشبه تلك المستخدمة في HTML.

ملاحظة. كما انك تستوحي من المواقع الاخرى لتعلم HTML، كذلك يمكنك ان تستوحي من المواقع الاخرى المطورة بواسطة SPIP لاتقان تصميم الصفحات النموذجية، فيكفي تحميل ملف «.HTML» المناسب. على سبيل المثال، يمكنك مراجعة الصفحات النموذجية لمقالات موقع uZine (انظر الى الاوامر البرمجية في الصفحة للحصول على الصفحة النموذجية).

واجهة مختلفة في الموقع نفسه

اولاً، تجدر الملاحظة انه من الممكن إنشاء أزواج من الملفات تخص العنصر المنطقي نفسه (المقالات او الاقسام...). على سبيل المثال، يمكنك إنشاء ملفات لزيارة المقال نفسه ولكن بتصميمات مختلفة: article.php3/html للتصميم العادي وprint.php3/html للتصميم المخصص لطباعة المقال وarticle-text.php3/html للتنسيق النصوصي (الذي يناسب ضعيفي النظر مثلاً) وarticle-heavy.php3/html لتصميم ثقيل يناسب الاتصال السريع بالشبكة.

- واجهة مختلفة حسب القسم. يمكنك تصميم صفحات نموذجية مختلفة لنفس النوع من المستندات حسب اقسام الموقع. ويكفي هنا إنشاء ملفات .html جديدة حسب الاقسام (لا داعي هنا لتعديل ملف .php3 اذ ان التعديل ينطبق على اسماء ملفات الصفحات النموذجية).

فيكفي اتباع اسم ملف الصفحة النموذجية بـ«-رقم» (اي بخط افقي يتبعه رقم القسم التابع له المقال). مثلاً، اذا أنشأنا ملف article-60.html، ستسخدم كل المقالات الموجودة في القسم رقم 60 هذه الصفحة النموذجية (ولا تعود تستخدم الصفحة النموذجية الافتراضية article.html). لاحظ ان الرقم الظاهر هو رقم قسم. فإذا كان القسم 60 يحتوي على اقسام فرعية، فإن المقالات الموجودة في هذه الاقسام الفرعية ستستخدم الصفحة النموذجية الجديدة article-60.html ايضاً.

ملاحظة. في مثالنا هذا يكون من المفيد كذلك إنشاء ملف rubrique-60.html للاقسام الفرعية وحتى breve-60.html للاخبار لتتماشى مع التصميم الخاص بالقسم 60.

- واجهة لقسم واحد. (SPIP 1.3) يمكن إنشاء واجهة تنطبق على قسم ما ولكن لا تنطبق على اقسامه الفرعية. لذلك يتم إنشاء ملف article=60.html سيطبّق على المقالات الموجودة في القسم 60 فقط وليس على المقالات الموجودة في اقسامه الفرعية.

ماذا يمكننا ان نضع في ملف HTML.

ان ملفات .html هي اساساً ملفات «نصوصية»، تكمّلها اوامر مخصصة لإدخال عناصر من قاعدة البيانات في الصفحة.

ولا يحلل SPIP الا هذه الاوامر (المكتوبة باللغة الخاصة بـSPIP). ولا يهتم ابداً بما تحتويه الصفحة غير هذه الاوامر.

لذلك فإن المحتوى الاساسي لهذه الملفات هو علامات HTML. ويتكفل المطور بتصميم الصفحة وتحديد اصدار HTML الذي يريد استخدامه وغير ذلك من نشاطات التطوير العادية. يمكن كذلك اعتماد اوراق الانماط (CSS) او استخدام مقاطع جافاسكريبت او مشاهد فلاش... اي باختصار كل ما يوضع عادة في صفحة نسيج.

كما يمكنك استخدام علامات XML (فمثلاً، ينتج زوج الملفات «backend.php3/html» علامات XML)، لأنها بالنهاية عبارة عن نصوص ايضاً.

وفي مجال الابتكار، فإن كل الصفحات الذاهبة الى الزائر مسحوبة من مجلد /CACHE بواسطة صفحة مكتوبة بلغة PHP. يمكنك اذاً ادخال اوامر PHP في صفحاتك النموذجية ليتم تنفيذها لدى عرض هذه الصفحات على الزائر. وباستخدامها بشكل دقيق، تتيح هذه الميزة مرونة كبيرة في التعامل مع SPIP بحيث يمكن اضافة وظائف جديدة عليه (كتزويد الصفحات بعدّاد مثلاً) او حتى تحسين بعض عناصر تصميم الصفحة لتناسب المعلومات المسحوبة من قاعدة البيانات.

حواشي

[1واذا كان article.html غير موجود، سيتم اعتماد ملف «dist» مكانه. راجع في هذا الموضوع «ما هي ملفات dist».

مؤلف جورج نُشر في: تم التحديث: 26/10/12

الترجمات: عربي, català, Deutsch, English, Español, italiano