كتابات:
هذه القائمة ستكون محدثة باستمرار للحديث عن Drupal coding standard ..
المستخدمين Users
- احرص على أن لاتقل أدوار الموقع عن (زائر، مستخدم عادي، مستخدم للتجربة، مدير محتوى، مدير عام)
- عدم الإعتماد على دور المدير العام administrator لتشغيل وإدارة محتوى الموقع بل تكون هذه الصلاحيات مسندة إلى دور مدير المحتوى.
- مدير المحتوى يجب أن تكون لديه صلاحيات Clear Cache.
- مدير المحتوى يجب أن يكون لديه صلاحية التعديل على جميع المحتويات المنشورة.
المحتوى Content
- إتاحة إضافة أكواد CSS مخصصة لكل نموذج وتكون مربوطة بصلاحية مخصصة لمدير المحتوى والمدير العام.
- التصنيفات Taxonomy تستخدم لأغراض التصنيف وليس لتخزين المحتوى.
- مراعاة وجود Breadcrumbs في جميع الصفحات حسب التسلسل.
المظهر Theme
- استخدام Regions تعطي مرونة عند إضافة أي محتويات مستقبلية.
- استخدام موديول Blockify عند إظهار شعار الموقع وغيره.
- النصوص الثابتة والظاهرة في الموقع مثل Footer يجب أن تكون قابله للتعديل من واجهة المستخدم بدون الرجوع للكود.
- يجب أن لايكون الثيم يتطلب عرض ملفات خارجية مثل استخدام CDN أو Webfont خارجي، ويجب أن يتم استدعاؤه من نفس مجلد المظهر.
- عدم استخدام إيقونات على شكل صور.
- استخدام Webfont لعرض الإيقونات.
- أن يكون النظام قابل للعرض والعمل بشكل كامل على الشاشات الصغيرة Responsive Design.
- النصوص الموجودة في التصميم وحتى الثابتة منها يجب
الأداء Performance
- تفعيل خاصية Caching للـ Blocks والـ Views.
- إعدادات الأداء للـ Caching في لوحة التحكم الافتراضية للدروبال يجب أن تكون مفعلة دائماً وفق الإعدادات المناسبة.
- عدم استخدام موديول Panels.
الكود Code
- يجب عدم استخدام hook_init لأي سبب.
- يجب عدم كتابة inline CSS أو inline JavaScript.
- يجب أن يكون استدعاء ملفات CSS من منطقة Header (في أعلى الصفحة head).
- يجب أن يكون استدعاء ملفات JavaScript من منطقة Footer (في أسفل الصفحة).
- كتابة وصف لكل دالة Function يوضح الغرض منها واعتماد كتابة التعليقات داخل الدالة Function لشرح تفاصيل عملها.
- تطبيق موديول Coder بعد الانتهاء من التطوير لتطبيق Drupal coding standards.
- كتابة تلميحات @TODO داخل الكود عند وجود حالات إضافية يمكن تطبيقها مستقبلاً.
- عدم الاعتماد على حفظ متغيرات غير افتراضية في الدروبال داخل الـ PHP Session.
- عند الحاجة لاستخدام hook_form_alter يجب استخدام hook_form_FORM_ID_alter وعدم استخدام hook_form_alter.
- استخدام ملف الـ Custom موديول الأساسي custom.module لكتابة الـ Hooks فقط ويتم عزل الدوال Functions التابعة مثل Menu item call back في ملف مستقل بإسم custom.inc.
- كتابة الدوال Functions المساعدة التي يحتاجها المشروع في ملف مستقل بإسم custom.functions.inc وتحتوي على دوال Functions قابلة للإستدعاء وتأدية وظيفة واحدة وليست عبارة عن إجراءات.
- كتابة الـ Blocks الخاصة في ملف مستقل بإسم custom.blocks.inc ويحتوي على hook_block_info و hook_block_view وعند الحاجة لـ hook_theme تتم كتابته في الملف الأساسي custom.module.
- كتابة وصف فوق كل دالة بسطر واحد على الأقل يوضح أنواع المدخلات والمخرج النهائي لهذه الدالة، وتكون طريقة كتابة هذا الوصف وفق المعايير المناسبة لقرائتها بواسطة أنظمة التوثيق الآلي مثل phpdoc وغيرها، وبالإمكان الاعتماد على إضافات مساعدة مثل: (https://atom.io/packages/docblockr).
- تسمية الـ Custom موديول ببادئة custom ويكون اسم الموديول المخصص students يكون اسم الموديول custom_students.
- يتم كتابة جميع أسماء الـ Hooks كماهي طريقة Drupal بأن يكون HOOK هو اسم الموديول .. ولكن فيما يتعلق بالدوال الأخرى التي ليست هوك فيكتفى بكتابة اختصار الموديول فقط مثلاً في حال اسم الموديول custom_students فإن جميع الدوال الأخرى يتم تسميتها ببادئة cs_NAME.
عام General
- استخدام Image Style لمقاسات الصور المستخدمة في Views, tpl files, custom module.
- أسماء أنواع المحتوى يجب أن تكون بصيغة المفرد. (طالب) وليس (طلاب).
- أسماء الـ Taxonomy vocabularies تكون بصيغة الجمع (كليات) وليس (كلية).
- تجنب استخدام أسماء حقول طويلة أو مقطوعة بسبب الطول، ويجب استخدام اسم معبر لحقول أنواع المحتوى والتصنيفات.
المصادر Drupal code standard
- https://gist.github.com/Greg-Boggs/8a2661b70c4e293db585
- من تجربتي الخاصة مع التطوير.
The main reason not to use drupal_goto()
in a form submission handler is that calling it would stop the other form submission handlers to be invoked. https://drupal.stackexchange.com/a/30938/24113