Fungsi tema khusus tidak dipanggil?

8

Saya sedang membangun modul Drupal 7 untuk membuat jenis bidang yang dipesan lebih dahulu. Saya sudah menerapkan semua kait yang diperlukan. hook_field_formatter_view()Fungsi 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 theme()fungsi 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.

Camsoft
sumber

Jawaban:

12

Anda mungkin belum menentukan kaitan tema Anda hook_theme().

Bagian Menggunakan lapisan tema dari buku pegangan Pengembangan memiliki diskusi mendalam tentang hal ini.

Damien Tournoud
sumber
Tepat, saya terus terjebak oleh perubahan kecil ini dari Drupal 6 ke Drupal 7!
Camsoft
4
Fungsi tema juga harus terdaftar di Drupal 6.
Berdir
10

Anda perlu mendefinisikan fungsi tema hook_themedan kemudian menghapus cache.

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

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.

bpile
sumber