it-swarm-id.com

Fungsi tema khusus tidak dipanggil?

Saya sedang membangun modul Drupal 7 untuk membuat tipe field yang dipesan lebih dahulu. Saya telah mengimplementasikan semua kait yang diperlukan. Fungsi hook_field_formatter_view() saya terlihat seperti ini:

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

Saya kemudian mendefinisikan fungsi theme() di bawah ini:

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

Tetapi ketika saya melihat halaman tidak ada output. Jika saya melihat entri log terbaru, saya melihat pesan ini:

Theme key 'test' not found.

Jika saya mengubah nilai render array # # theme MYMODULE_field_formatter_view saya menjadi fungsi tema bawaan seperti 'item_list' berfungsi. Tetapi karena alasan tertentu fungsi tema khusus saya tidak diambil.

Saya telah membangun kembali registry tema ratusan kali dan juga membersihkan cache.

8
Camsoft

Anda mungkin belum mendefinisikan kait tema Anda di hook_theme().

Bagian Menggunakan lapisan tema dari Buku Pegangan Pengembangan memiliki diskusi mendalam tentang hal ini.

12
Damien Tournoud

Anda perlu mendefinisikan fungsi tema di hook_theme lalu kosongkan cache.

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

Saya menghadapi masalah yang sama di mana fungsi tema khusus saya tidak pernah dipanggil dalam template saya, meskipun sudah terdaftar. Ketika saya beralih ke tema lain, itu berhasil.

Solusi saya adalah menamai ulang tema menjadi 'something_theme', karena saya membuat kesalahan bodoh dan sudah memiliki modul bernama 'sesuatu'.

Modul dan tema tidak boleh memiliki nama yang sama, karena mengarah ke tabrakan yang menyebabkan perilaku tak terduga dan pengait kait.

2
bpile