كيف يمكنني استخدام وظائف المعالج المسبق للموضوع لقوالب بلدي؟

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

سؤال

لدي العديد من ملفات .tpl.php للعقد وحقول CCK ومساواة معهم. تحتوي ملفات القالب هذه على الكثير من المنطق في نقل الأشياء ، وتجريد الروابط ، وإنشاء روابط جديدة ، وما إلى ذلك. أفهم أن هذا التطور السيئ وليس "طريقة دروبال".

إذا فهمت بشكل صحيح ، فإن "طريقة دروبال" هي استخدام وظائف المعالج المسبق في template.php ملف لمعالجة المتغيرات وإضافة متغيرات جديدة. بعض الأسئلة حول ذلك:

  • هل هناك اتفاقية تسمية لإنشاء وظيفة قبل المعالج لموضوع معين؟ على سبيل المثال ، إذا كان لدي قالب حقل CCK يسمى content-field-field_transmission_make_model.tpl, ، كيف يمكنني تسمية وظيفة المعالج المسبق؟
  • هل يمكنني استخدام وظائف المعالج قبل القالب لقوالب العقدة ، وقوالب حقل CCK ، وقوالب العرض؟ هل لديهم طرق مختلفة لتعديل متغيرات القالب أو إضافة طرق جديدة؟
هل كانت مفيدة؟

المحلول

للحصول على نظرة عامة عامة ، يجب عليك اقرأ على معالجة المتغيرات داخل وظائف المعالجة المسبقة.


فيما يتعلق باتفاقية التسمية ، هذا عادةً ما يكون بسيطًا جدًا ، ولكن هناك صيد لمثالك الحالي (انظر أدناه):

يجب أن يكون توقيع وظائف المعالجة المسبقة

[yourModuleName|yourThemeName]_preprocess_[themeFunctionName](&$variables)

لذا فإن تنفيذ واحد لقالب الصفحة ضمن ملف tempes.php قد يؤدي إلى

themeName_preprocess_page(&$variables)

في معظم الأوقات ، سيكون اسم وظيفة السمة هو اسم ملف *.tpl.php ، دون انتهاء .tpl.php ومع السطح بدلاً من الواصلة. لكن هناك قبض إذا تم تحديد ملف القالب على قاعدة اقتراحات القالب, ، نظرًا لأن وظيفة المعالجة المسبقة لا يمكن تنفيذها إلا للاسم الأساسي ، وليس للاقتراحات الإضافية! (تتم إضافة اقتراحات ملفات القالب البديلة في وظائف المعالجة المسبقة نفسها.)

مثالك الحالي هو أحد هذه الحالات ، مثل content-field-field_transmission_make_model.tpl.php مثل هذا الاقتراح ، مع وجود الاسم الأساسي content-field.tpl.php, ، ووظيفة السمة المقابلة يجري content_field. لذلك سيكون عليك تنفيذ وظيفة معالجة مسبقة اسمها yourThemeName_preprocess_content_field(&$variables), ، وضمن ذلك ، افحص الإدخالات المتاحة في صفيف $ realbles للتحقق مما إذا كنت قد تم استدعاؤك فعليًا لـ "field_transmission_make_model" ، وليس لحقل CCK مختلف تمامًا ، على سبيل المثال:

function yourThemeName_preprocess_content_field(&$variables) {
  // Are we called for the right field?
  if ('field_transmission_make_model' == $variables['field_name']) {
    // Yes, add/manipulate entries within the variables array
    $variables['new_entry'] = 'A useless new variable';
    $variables['label'] = 'A useless change of the existing label variable';
  }
}

(ملاحظة: الرمز غير المختبر ، حذار من الأخطاء المطبعية)

بعد هذا ، يجب أن يكون هناك متغير جديد $new_entry أن تتوفر في ملف القالب الخاص بك ، ومحتوى $label يجب أن يكون المتغير قد يتغير (سيتم تحويل جميع إدخالات المستوى الأعلى ضمن صفيف $ Variables إلى متغيرات منفصلة لملف القالب ، المسمى على بعد فهرس الصفيف).


بالنسبة لسؤالك الثاني ، فإن الاستخدام الأساسي لوظائف المعالجة المسبقة هو نفسه بالنسبة لجميع ملفات القالب ، ولكن كن على دراية:

  • وظائف المعالجة المسبقة متاحة فقط لمكالمات السمات التي تستخدم *.tpl.php ملفات ، ليس لوظائف الموضوع
  • يختلف محتوى صفيف متغيرات $ بشكل كبير ، اعتمادًا على ما يحصل على موضوعه
  • قد تنفذ الوحدات الأخرى وظائف المعالجة المسبقة أيضًا ، وسيتم تسميتها واحدة تلو الأخرى ، لذلك إذا كنت تريد تغيير شيء ما يتم إضافته بواسطة وحدة أخرى ، يمكنك فقط القيام بذلك إذا تم استدعاء تطبيقك بعد ذلك (والذي سيكون لا المشكلة في حالتك ، حيث يتم استدعاء التطبيقات ضمن موضوع ما بعد جميع التطبيقات داخل الوحدات - أردت فقط أن أذكر أنه يمكن أن يكون هناك العديد من التطبيقات في وقت واحد)

نصائح أخرى

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

إليك مقطع فيديو يشرحه بالتفصيل - http://buildamodule.com/video/drupal-theming-tessentials-template-files-theme-function-dorrides-and-preprocessing-functions-how-to-simple-simplacgessing

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