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?


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

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.


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
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.