كيف يمكنني استخدام وظائف المعالج المسبق للموضوع لقوالب بلدي؟
-
24-09-2019 - |
سؤال
لدي العديد من ملفات .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