Bagaimana cara mengubah mode tampilan secara terprogram?

11

Saya ingin mengubah mode tampilan simpul secara terprogram. Saya menggunakan hook_preprocess_node(&$vars)dan mengatur mode tampilan:

function moduleName_preprocess_node(&$vars) {
      // if conditions to apply particular view mode
      $vars['view_mode'] = 'teaser';
      $vars['elements']['#view_mode'] = 'teaser';
}

Tapi ini tidak berfungsi seperti yang diharapkan. Apakah saya melewatkan sesuatu di sini?

cissharp
sumber
Apakah Anda mencoba meninjau ini? drupal.org/node/1334206
chrisjlee

Jawaban:

13

Mengubah mode tampilan dalam fungsi preprocess melakukannya terlambat.
Cara yang benar untuk mengubah modul tampilan adalah menerapkan hook_entity_view_mode_alter () , yang dipanggil sebelum konten entitas dirender. Misalnya, dalam node_view () , kait itu dipanggil dari node_build_content () , yang merupakan fungsi pertama yang dipanggil dari node_view().

  if (!isset($langcode)) {
    $langcode = $GLOBALS['language_content']->language;
  }

  // Populate $node->content with a render() array.
  node_build_content($node, $view_mode, $langcode);
kiamlaluno
sumber
4
Terima kasih. Harap dicatat bahwa pengait ini memerlukan drupal> = 7.17
cissharp
6

Jika Anda hanya perlu mengubahnya untuk halaman tertentu, saya sarankan Lihat Mode Halaman . Ini cukup praktis dan mudah digunakan.

Kyletaylored
sumber
Terima kasih. Tapi saya punya skenario berbeda. Saya ingin menggunakan mode tampilan berbeda untuk node dengan tipe konten yang sama. Saya ingin mengubah mode tampilan pada taksonomi yang saya gunakan di node. Maksud saya node akan memiliki pola URL yang sama.
cissharp