Verificar o tipo de conteúdo do nó no gancho de pré-processo

12

Eu tenho uma série de variáveis ​​que quero disponibilizar em modelos de galho para modelos de conteúdo específicos.

Em MYTHEME.themeeu tenho:

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

Isso me permite usar {{ headertext }}e {{ mycustomblock }}em modelos de tipo de conteúdo como node--contenttype1.html.twige node--contenttype2.html.twig. Mas prefiro não criar as variáveis 'headertext'e 'mycustomblock'para cada tipo de nó quando precisar apenas de um para um tipo de conteúdo. Seria bom ter uma opção switch ou if que verifique qual é o tipo de conteúdo antes de gerar uma variável com um bloco.

Existe uma maneira de verificar o tipo de conteúdo do nó?

eu tentei

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

Mas isso não funcionou.

Matt
fonte

Respostas:

15

Para obter o tipo de conteúdo de um nó, basta usar $variables['node']->getType()ou $variables['node']->bundle(). O primeiro método chama apenas o segundo, portanto, chamar um ou outro não faz muita diferença.

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

A única diferença é que bundle()é definida para cada entidade, pois o conceito de pacote configurável é comum a todas as entidades, enquanto o tipo de conteúdo é a propriedade que o Drupal usou para os nós antes de alterá-los em uma das entidades que os módulos principais do Drupal implementam; O uso bundle()facilita a adaptação do código para outros tipos de entidade, mas acho que não é o caso do código que você está usando.

kiamlaluno
fonte
5

Você tem que usar $variables['node']->getType(). Além disso, se você precisar apenas de alguns modos de exibição, considere também verificar isso, com$variables['view_mode']

yvan
fonte
2

Você pode adicionar o nó (e o tipo de exibição) ao nome da função do gancho:

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

Por exemplo, para o pagenó, digite no fullmodo:

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