Bagaimana cara menyediakan templat untuk mode tampilan tertentu?


46

Saya ingin tema mode tampilan hasil pencarian dengan templat.

Dalam benak saya, penamaan node file template - artikel - search-result.tpl.php akan melakukan trik, tapi saya jelas salah tentang itu.

Saya sadar saya bisa melakukan node - article.tpl.php dan dalam pemeriksaan ini $ view_mode, tapi ini aneh dengan semua mode tampilan lain yang tidak ingin saya templat.

Ide ide?

Jawaban:


45

Menambahkan saran tema kait dalam fungsi preprocess node harus melakukan trik:

function MYMODULE_preprocess_node(&$vars) {
  if ($vars['node']->type == 'article' && $vars['view_mode'] == 'search_result') {
    $vars['theme_hook_suggestions'][] = 'node__article__search_result';
  }
}

Setelah menghapus cache, Anda harus dapat menggunakan simpul - artikel - search-result.tpl.php untuk nama file templat Anda.

NB. Anda juga bisa melakukan ini di file template.php tema Anda dengan memanggil fungsi MYTHEME_preprocess_node()sebagai gantinya.


2
Cemerlang! Terima kasih. Baru saja akan menambahkan tautan ke saran yang sama di sini: mearra.com/blogs/juha-niemi/drupal-7-custom-node-view-modes
artfulrobot

1
Tidak masalah :) Hanya FYI, search_resultsudah dinyatakan sebagai mode tampilan sehingga Anda tidak perlu menerapkan hook_entity_info_alter()dalam kasus Anda
Clive

3

The Entity tampilan mode modul menambahkan saran Template ini secara otomatis

Penerus Drupal 7 untuk membangun mode yang akan memungkinkan administrator untuk menentukan mode tampilan kustom untuk entitas. Entitas kustom ditambahkan ke registri entitas melalui hook_entity_info_alter () sehingga mereka tersedia untuk kode apa pun yang menggunakan entitas_get_info () untuk memberikan daftar mode tampilan untuk suatu entitas. Ini termasuk simpul dan bidang referensi pengguna, Tampilan, dll.


2

Berikut adalah fungsi yang memungkinkan Anda untuk menambahkan yang baru secara dinamis. Itu juga memanggil fungsi preprocess yang sesuai jika Anda memiliki satu dinyatakan.

Kemudian telepon drush cache-clear theme-registryuntuk membuatnya berfungsi.

Untuk menggunakannya ganti TEMA dengan nama tema Anda, dan tempatkan di file themes.php tema Anda.

mis. Untuk tema bernama Droid Anda akan menyebutnya droid_preprocess_node(&$variables, $hook) {...

function THEME_preprocess_node(&$variables, $hook) {
  $view_mode = $variables['view_mode'];
  $content_type = $variables['type'];
  $variables['theme_hook_suggestions'][] = 'node__' . $view_mode;
  $variables['theme_hook_suggestions'][] = 'node__' . $view_mode . '_' . $content_type;

  $view_mode_preprocess = 'THEME_preprocess_node_' . $view_mode . '_' . $content_type;
  if (function_exists($view_mode_preprocess)) {
    $view_mode_preprocess($variables, $hook);
  }

  $view_mode_preprocess = 'THEME_preprocess_node_' . $view_mode;
  if (function_exists($view_mode_preprocess)) {
    $view_mode_preprocess($variables, $hook);
  }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.