web-gelistirme-sc.com

Özel tema işlevi çağrılmıyor mu?

Ismarlama bir alan türü oluşturmak için bir Drupal 7 modülü inşa ediyorum. Gerekli tüm kancaları uyguladım. Benim hook_field_formatter_view() işlevi şöyle görünüyor:

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;  
}

Daha sonra aşağıdaki theme() işlevini tanımladım:

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

Ama sayfayı görüntülediğimde hiçbir şey çıkmıyor. Son günlük girişlerine bakarsam şu mesajı görüyorum:

Theme key 'test' not found.

MYMODULE_field_formatter_view render dizisi '#theme' değerini 'item_list' gibi yerleşik bir tema işlevine değiştirirsem çalışır. Ama bazı nedenlerden dolayı benim özel tema fonksiyonum alınamıyor.

Tema kaydını yüzlerce kez yeniden oluşturdum ve önbellekleri temizledim.

8
Camsoft

Muhtemelen hook_theme() içinde tema kancanızı tanımlamadınız.

Geliştirme el kitabının tema katmanını kullanma bölümünde bunun hakkında derinlemesine bir tartışma var.

12
Damien Tournoud

Tema işlevini hook_theme ve önbelleği temizleyin.

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

Özel tema işlevimin kayıtlı olmasına rağmen şablonumda hiçbir zaman çağrılmadığı aynı sorunla karşı karşıyaydım. Başka bir temaya geçince işe yaradı.

Çözümüm temayı 'bir şey_temine' olarak yeniden adlandırmaktı, çünkü aptalca bir hata yaptım ve zaten 'bir şey' adlı bir modülüm vardı.

Modül ve tema hiçbir zaman aynı ada sahip olmamalıdır, çünkü beklenmedik davranışlara ve kanca geçersiz kılmaya neden olan bir çarpışmaya yol açar.

2
bpile