كيف أقوم بتوسيع الوحدة النمطية المساهمة في دروبال؟

StackOverflow https://stackoverflow.com/questions/1633058

  •  06-07-2019
  •  | 
  •  

سؤال

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

هل كانت مفيدة؟

المحلول

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

أفضل الحلول هي:

  1. استخدم أي واجهة برمجة تطبيقات توفرها الوحدة.في بعض الأحيان توجد وظائف يمكنك استخدامها كاستدعاءات لواجهة برمجة التطبيقات (API) والتي لا تكون بالضرورة مخصصة بهذه الطريقة.
  2. أنشئ وظيفة إضافية وأرسل تصحيحًا إلى قائمة انتظار مشكلات الوحدة النمطية، حتى يتمكن الآخرون من الاستفادة من عملك، وبالتالي يمكنك الاستفادة من عمليات تدقيق الأمان دون بذل الكثير من الجهد.
  3. ليس دائمًا، ولكن في كثير من الأحيان يمكنك المضي قدمًا في إنشاء وحدة نمطية مخصصة تنفذ Hook_form_alter وتضيف معالج إرسال يقودك إلى الوحدة النمطية الخاصة بك للمعالجة.

نصائح أخرى

وجدت جيدة جدا بريد حول توسيع وحدة نمطية في دروبال.الأجزاء الأساسية:

  • إذا كانت الوحدة تستخدم رمزًا لاستدعاء صفحة تريد تغييره، فقم بتغيير رد اتصال الصفحة باستخدام Hook_menu_alter().

  • إذا كانت الوحدة تنفذ وظيفة سمة تريد تغييرها، فقم بتغيير الوظيفة المرتبطة بـ Hook_theme_registry_alter().وبدلاً من ذلك، إذا كان تغيير المتغيرات التي تحصل عليها وظيفة السمة كافيًا، فيمكنك تنفيذ وظيفة المعالجة المسبقة لوظيفة السمة هذه (على سبيل المثال.Hook_preprocess_rdf_metadata() لـ theme_rdf_metadata()، وقم بتغيير المتغيرات التي ستحصل عليها وظيفة السمة.

  • إذا نفذت الوحدة استعلام SQL باستخدام db_select()، وقمت بتعيين علامة للاستعلام، فقم بتغيير الاستعلام الذي تم تنفيذه باستخدام Hook_query_alter().

  • إذا نفذت الوحدة خطافًا لا تريد تنفيذه، فيمكنك تنفيذ Hook_module_implements_alter() لتجنب تنفيذه.

  • إذا كانت الوحدة تنفذ خطافًا بديلًا (على سبيل المثال.Hook_page_alter())، وتريد تغيير ما تم تغييره بواسطة هذا الخطاف، قم بتنفيذ نفس خطاف التغيير، مع التأكد من تنفيذه بعد تنفيذ الخطاف من تلك الوحدة.

في حالة أن الوظيفة التي تريد تغييرها ليست خطافًا، فعندئذٍ:

  • تأكد من أن الوظيفة تستخدم خطافات تم تنفيذها من وحدة أخرى.على سبيل المثال، تقومNode_save() باستدعاء Hook_node_presave();إذا كنت أرغب في تغيير الخاصية "المتغيرة" للعقدة، فأنا لا أخترقnode_save()، ولكني أفضل تنفيذ Hook_node_presave() لتغييرها.

  • تأكد من الإشارة إلى/استخدام الوظيفة من خلال خطاف؛في هذه الحالة، يمكنك أن تفعل شيئا لهذا الخطاف، كما وصفت سابقا.

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

يمكن العثور على المزيد حول توسيع الوحدة الحالية عن طريق إنشاء وحدة جديدة في هذا المثال البسيط هنا.

وماذا حدة هو؟ وتوفر بعض وحدات اجهات برمجة التطبيقات التي يمكنك توسيع عن طريق الكتابة وحدة خاصة بك. هناك طن من وحدات ان "تمديد" المشاهدات من خلال بناء الخروج من المشاهدات API . إذا لم يكن لديك وحدة تريد تمديد API جيد، يمكنك مفترق دائما لجعل نسخة التي تلبي احتياجاتك. ربما أنها سوف تساعد شخص آخر أيضا.

وحتى لو كنا في حاجة إلى استخدام بعض الوظائف يمكننا ان نفعل ذلك بالطريقة التالية. نحن بحاجة لنسخ وظيفة من وحدة ويمكننا المقرب الدالة في ملف template.php الخاص بك. مما يمكنك جعل chanages على تلك الوظيفة وفقا لذلك.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top