Periksa tipe konten dari simpul dalam kait praproses

12

Saya memiliki serangkaian variabel yang ingin saya buat di templat ranting untuk templat konten tertentu.

Dalam MYTHEME.themeaku punya:

function MYTHEME_preprocess_node(&$variables) {

  if (isset($variables['node'])) {

    $mycustomblock = \Drupal::service('plugin.manager.block')
      ->createInstance('myblock', []);

    $variables['mycustomblock'] = $mycustomblock->build();

    $headertext = \Drupal::service('plugin.manager.block')
      ->createInstance('headertext',
        [
          'text-align-submit'  => 'right',
          'uppercase-submit'   => TRUE,
          'header_size'        => 'h4',
          'header-size-submit' => 'h4',
          'grid-size-submit'   => 6,
          'header-title'       => 'This is a test',
        ]
      );

    $variables['headertext'] = $headertext->build();
  }
}

Ini memungkinkan saya untuk menggunakan {{ headertext }}dan {{ mycustomblock }}dalam templat tipe konten seperti node--contenttype1.html.twigdan node--contenttype2.html.twig. Tapi saya lebih suka tidak membangun 'headertext'dan 'mycustomblock'variabel untuk setiap jenis node tunggal ketika saya hanya perlu masing-masing untuk satu jenis konten. Akan lebih baik untuk memiliki saklar atau jika pernyataan yang memeriksa jenis konten yang mana itu sebelum menghasilkan variabel dengan blok.

Apakah ada cara agar saya dapat memeriksa jenis konten dari simpul?

Saya sudah mencoba

$type = $variables['node']->type;

Tetapi itu tidak berhasil.

Mat
sumber

Jawaban:

15

Untuk mendapatkan tipe konten dari sebuah simpul, Anda cukup menggunakan $variables['node']->getType()atau $variables['node']->bundle(). Metode pertama hanya memanggil yang kedua, jadi memanggil satu atau yang lain tidak banyak bedanya.

public function getType() {
  return $this->bundle();
}

Satu-satunya perbedaan adalah yang bundle()didefinisikan untuk setiap entitas, karena konsep bundel adalah umum untuk semua entitas, sedangkan tipe konten adalah properti yang digunakan Drupal untuk node sebelum mengubahnya di salah satu entitas yang diterapkan modul inti Drupal; menggunakan bundle()membuat lebih mudah untuk mengadaptasi kode untuk jenis entitas lain, tetapi saya tidak berpikir itu adalah kasus untuk kode yang Anda gunakan.

kiamlaluno
sumber
5

Anda harus menggunakan $variables['node']->getType(). Juga jika Anda memerlukannya pada beberapa mode tampilan saja, pertimbangkan untuk melakukan pemeriksaan juga$variables['view_mode']

yvan
sumber
2

Anda dapat menambahkan node (dan tipe tampilan) ke nama fungsi hook Anda:

function MYTHEME/MYMODULE_preprocess_node__nodetype__display(&$variables) {
  // ...
}

Misalnya, untuk pagejenis simpul dalam fullmode:

function MYTHEME/MYMODULE_preprocess_node__page__full(&$variables) {
  // ...
}
Tim
sumber