الثلاثاء، 25 ديسمبر 2012

كيف يعمل دروبال -الجزء الثاني


مكونات النظام

-الواجهة الإدارية   Administrative Interface   
تتميز الواجهة الإدارية بأنها مدمجة مع بقية الموقع , اي كجزء منه .
ويمكن بسهولة الوصول لكافة الوظائف والخدمات الإدارية عبر القوائم الإدارية التي تظهر في أعلى الصفحة عند الدخول كمدير للموقع site administrator

-الوحدات     Modules  
يعتبر دروبال بمثابة إطار عمل وحدوي – ههههه إن جاز التعبير – اي ان بنيته قائمة على اساس الوحدات modular framework . حيث ان الوظائف والخدمات مضمنة ضمن وحدات modules  , والتي من الممكن تفعيلها أو تعطيلها .
يتم اضافة ميزات وخدمات جديدة لدروبال عبر تفعيل وحدات موجودة للتو , او عبر تثبيت وحدات جديدة تمت كتابتها من قبل أعضاء في مجتمع دروبال drupal community, أو حتى عبر كتابة وحدات جديدة .
وبالتالي فإن اي موقع بإمكانه ان يعمل بالحد الأدنى من الوحدات في حال لم يكن بحاجة لبقية الوحدات الاضافية , واما المواقع التي تستلزم وظائف اخرى بإمكانها اضافة الوحدات التي تحوي هذه الوظائف وتفعيلها بسهولة. تم توضيح هذه الامر عبر الرسم التوضيحي رقم 1-3
enabling-additional-modules
enabling-additional-modules
يمكن توسيع الوحدات عبر اضافة انماط جديدة من المحتوى new content types  مثل recipes , blog posts or files
او يمكن اضافة سلوكيات لهذه الوحدات مثال : تنبيه بريدي  e-mail notification  …
ويتم استدعاء وظائف الوحدات modules functionality  من قبل اطار العمل framework في الوقت المناسب عبر ما يعرف ب hooks  (السنانير و مفردها سنارة ) والتي ساترجمها بالاحداث , لانها بالنهاية تمثل انقداح حدث ما , اي حدوثه.

-الأحداث – السنانير  Hooks   
يمكننا أن نتخيل السنارة (الحدث ) على انه بمثابة حدث داخلي ضمن دروبال – لذلك ساتخذ كلمة حدث كترجمة ل Hook –
وتسمى بالاستدعاءات callbacks
ملاحظة : في الواقع فإن ال hooks  لا تمثل استدعاءات بمعنى الكلمة , لان ال hooks  تُهيكَل وتبنى اعتمادا على معايير تسمية الوظائف function – naming conventions  , وليس عبر تسجيلهم بواسطة متنصت   listiener (كما هو الحال في بعض لغات البرمجة).

سنوضح هنا آلية عمل الأحداث hooks عبر مثال بسيط :
لنفترض بأن مستخدم ما قام بالدخول إلى موقع دروبال , خلال الفترة الزمنية التي تتم بها عملية الدخول يقوم دروبال بقدح حدث hook_user_login . وهذا يعني بأن اي تابع function  يتطابق اسمه مع عُرف التسمية module name + hook name  سوف يتم استدعائه , مثلا إذا كنا في وحدة التعليقات comment module  عندها سيتم استدعاء التابع (الوظيفة ) comment_user_login , وإذا كنا في وحدة العقدة node module  عندها سيتم استدعاء التابع node_user_login  … وهلم جرة.
بفرض لدينا وحدة ما , وليكن اسمها spammy ,وظيفتها ارسال بريد للمستخدم عند كل دخول للموقع ,عندما نريد كتابة تابع (وظيفة ) للحدث  Hook_user_login  عندها يتم استبدال كلمة Hook باسم الوحدة , وبالتالي يكون اسم التابع  spammy_user_login  وسيتم استدعائه بشكل اوتوماتيكي عند كل دخول للمستخدم .
حيث ضمن محتوى هذا التابع نضع الترميز code  الذي ينفذ عملية ارسال البريد الالكتروني للمستخدم مع كل دخول.

-الثيمات     Themes   
عندما نقوم بإنشاء صفحة انترنت ونريد ارسالها للمستعرض يكون لدينا اهتمامين اساسين :
  1. تجميع البيانات المناسبة
  2. وترميز المعطيات لتعرض على الويب
وتعتبر طبقة الثيم هي المسؤولة عن إنشاء HTML (أو JSON, XML ,etc ) التي سيقوم المستعرض بتلقيها.
  يعتبر  (PHP Template ) بمثابة محرك القوالب الاساسي لدروبال templating engine, وبإمكانك ان تستخدم بدلاً عنه Easy Template System (ETS) .
أغلب المطورين الذين يرغبون بإنشاء ثيمات جديدة في دروبال , يستخدمون محرك القوالب الاساسي الذي يأتي مع دروبال .
هنالك شيء مهم يجب تذكره بأن دروبال يشجع ويؤكد على فصل  المحتوى عن الترميز.
يوفر دوربال عدة اساليب لتمكن المطورين من تعديل او تكيف المظهر الخارجي للموقع يما يناسبهم. اسهل طريقة لذلك عبر استخدام ملفات التنسيق cascading style sheet (CSS)  وذلك لتجاوز التنسيقات المعرفة في دروبال عبر اسناد تنسيقات جديدة للخاصيات class , id  بتنسيقات جديدة معرفة ضمن ملفات التنسيق.
على كل الأحول إذا رغبتم بالذهاب إلى أبعد من ذلك , وإجراء تعديلات على خرج HTML  الكلي , فإنه بإمكانك القيام بذلك نظام القوالب في دروبال ( نتعرف عليه لاحقا).
تتألف ملفات القوالب في دروبال من لغتي HTML  و  PHP  . بالإضافة إلى ذلك فإن كل جزء ديناميكي من صفحات دروبال , مثل قائمة او ما شابه , يمكن  تجاوزه ببساطة override  عبر تصريح تابع function  يحمل الاسم المناسب , وبالتالي فإن دروبال سوف يستخدم هذا التابع لينشأ ذلك الجزء من الصفحة.

-العقد     Nodes   
إن انماط المعطيات content type في دروبال كلها مشتقة من نمط اساسي فريد يسمى ب عقدة  node . سواء كان blog entry  او recipe  او حتى project task  فإنهم هيكلية البيانات الاساسية واحدة في الكل.
تكمن العبقرية في هذا النهج في إمكانية التوسيع والتطوير بسهولة. بإمكان مطوري الوحدات module developers  اضافة ميزات اضافية مثل التعليقات , تقييم , مرفقات ,… للعقد بشكل عام , دون الاكتراث إلى نوع العقدة node type  , ومن ثم يستطيع مدير النظام اختاير تفعيل الميزات التي يريد على انماط المعطيات التي يريد . مثلاً : ريما يختار المدير ان يفعل التعليقات للمدونات blog  , وان لا يفعلها للمقالات …
تحوي العقد بشكل عام مجموعة من الخصائص السلوكية behavioral properties  التي يرثها كل انماط المعطيات.فاي عقدة يمكن تحديدها لتظهر في الصفحة الرئيسية من الموقع , نشرها او عدم نشرها , او حتى وضع إمكانية البحث ضمنها.
وبسبب هذه البنية الموجدة للعقد nodes  فإن الواجهة الإدارة توفر لنا واجهات للتعامل مع هذه العقد و تحريرها.

-الحقول     Fields   
تتألف المحتويات في دروبال من حقول. فعنوان العقدة node title  هو عبارة عن حقل , وكذلك الحال بالنسبة لجسم العقدة node body  . بإمكانك استخدام الحقول في دروبال لإنشاء اي نمط محتويات content type ترغب به, على سبيل المثال الحدث Event فإنه عادة يتألف من عنوان title  وشرح description or body , تاريخ البداية start date  ,  توقيت البداية start time , فترة زمنية duration  , موقع location  , ومن المحتمل ان يحوي على رابط للتسجيل في الحدث . إن كل عنصر من العناصر السابقة يمثل حقل field .
لدينا في دروبال الامكانية لإنشاء انماط محتويات content type  باستخدام الحقول , إما بشكل برمجي عبر إنشاء وحدة module  , او عبر الواجهات الإدارية في دروبال وذلك عن طريق انشاء نمط معطيات جديد content type  وإسناده الحقول عبر واجهة المستخدم التي يوفرها لنا دروبال( التجربة العملية توضح بشكل افضل الفكرة ) .
وكذلك تقدم لنا الواجهة الخاصة بالحقول field API التي يوفرها لنا دروبال سهولة كبيرة في إنشاء انماط بسيطة ومعقدة من انمطا المحتويات وذلك مع كم قليل من البرمجة .

-الكتل     Blocks    
الكتلة  Block  وهي عبارة عن معلومات يمكن تفعيلها أو تعطيلها ضمن جزء محدد من قالب الموقع site’s template .على سبيل المثال , يمكن ان تعرض الكتلة Block  عدد المستخدمين الفعالين ضمن الموقع . أو يمكن ان يكون لديك كتلة تحوي روابط لأكثر محتويات الموقع قراءة, او قائمة بالأحداث القادمة.
عادة ما تتوضع البلوكات blocks   ضمن العمود الجانبيsidebar  في قالب الموقع , او ضمن الترويسة header  او تذيل الموقع footer.
يمكن إعداد البلوكات لتعرض عقد node من نمط محدد في مكان محدد .
عادة ما تستخدم البوكات لعرض معلومات تم اعدادها بشكل خاص للمستخدم الحالي. على سبيل المثال , فإن بلوك المستخدم تحوي فقط على روابط للمناطق الادارية ضمن الموقع التي يستطيع المستخدم الحالي النفاذ إليها , مثل “حسابي ” my account  .
المناطق Regions  التي يمكن للبلوكات ان تظهر فيها (مثل الترويسة او التذيل او العمود اليميني او اليساري من الموقع ) يتم تعريفها ضمن ثيم الموقع  site’s theme , ويتم التحكم بموضع وإمكانية رؤية هذه البلوكات ضمن مناطقها regions عبر واجهة ادارية مخصصة لذلك.

-توضع الملفات     File Layout   
ان استيعاب وفهم بنية وتوضع الملفات ضمن التنصيب الاساسي لدروبال يعلمنا عدة أمور وممارسات هامة مثل : معرفة مكان توضع الوحدات والثيمات التي يتم تحميلها.
الشكل 1-4 أدناه يوضح مكان توضع الملفات والمجلدات ضمن التنصيب الأساسي لدروبال

file-layout in drupal

المصدر: كتاب التطوير الاحترافي لدروبال 

ليست هناك تعليقات:

إرسال تعليق