it-swarm.asia

لا يتم استدعاء وظيفة السمة المخصصة؟

أنا أقوم بإنشاء وحدة Drupal 7 لإنشاء نوع حقل مفصل. لقد قمت بتطبيق جميع السنانير المطلوبة. تبدو دالة hook_field_formatter_view() كما يلي:

function MYMODULE_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $element = array();

  switch ($display['type']) {
    case 'default':
      foreach ($items as $delta => $item) {
                $element[$delta] = array(
                  '#theme' => 'test',
                  '#item' => $item,
                );
      }
      break;
  }

  return $element;  
}

ثم قمت بتعريف الوظيفة theme() أدناه:

function theme_test($variables) {
    return '<h1>Hello World</h1>';
}

ولكن عندما أعرض الصفحة لا يوجد شيء الإخراج. إذا نظرت إلى إدخالات السجل الأخيرة أرى هذه الرسالة:

Theme key 'test' not found.

إذا قمت بتغيير قيمة مصفوفة تجسيد MYMODULE_field_formatter_view '#theme' إلى وظيفة سمة مضمنة مثل 'item_list' ، فإنها تعمل. ولكن لسبب ما ، لا يتم التقاط وظيفة السمة المخصصة الخاصة بي.

لقد قمت بإعادة إنشاء تسجيل السمة مئات المرات وكذلك قمت بمسح ذاكرة التخزين المؤقت.

8
Camsoft

من المحتمل أنك لم تحدد ربط السمة في hook_theme().

يحتوي قسم باستخدام طبقة السمة من كتيب التطوير على مناقشة معمقة حول هذا الموضوع.

12
Damien Tournoud

تحتاج إلى تحديد وظيفة السمة في hook_theme ثم امسح ذاكرة التخزين المؤقت.

 function MYMODULE_theme() {
   return array(
     'test' => array (
       'render element' => 'element',
     ),
   );
 }
10
googletorp

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

كان الحل الذي قدمته هو إعادة تسمية السمة إلى "something_theme" ، لأنني ارتكبت خطأ غبيًا ولدي بالفعل وحدة باسم "شيء".

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

2
bpile