사전 프로세스 후크에서 노드의 컨텐츠 유형 확인


12

특정 콘텐츠 템플릿의 나뭇 가지 템플릿에서 사용할 수 있도록 일련의 변수가 있습니다.

에서 MYTHEME.themeI 있습니다 :

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

이 날 사용할 수 있습니다 {{ headertext }}{{ mycustomblock }}같은 콘텐츠 형식의 템플릿에 node--contenttype1.html.twignode--contenttype2.html.twig. 그러나 하나의 콘텐츠 유형마다 하나만 필요할 때 모든 단일 노드 유형에 대해 'headertext''mycustomblock'변수를 작성 하지는 않습니다 . 블록이있는 변수를 생성하기 전에 어떤 내용 유형을 확인하는 스위치 또는 if 문을 갖는 것이 좋습니다.

노드의 컨텐츠 유형을 확인할 수있는 방법이 있습니까?

난 노력 했어

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

그러나 그것은 효과가 없었습니다.

답변:


15

노드의 컨텐츠 유형을 얻으려면 $variables['node']->getType()또는을 사용하십시오 $variables['node']->bundle(). 첫 번째 방법은 두 번째 방법 만 호출하므로 하나 또는 다른 방법을 호출해도 큰 차이가 없습니다.

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

유일한 차이점은 bundle()번들 개념이 모든 엔티티에 공통이므로 컨텐츠 유형은 Drupal 코어 모듈이 구현 한 엔티티 중 하나에서 노드를 변경하기 전에 노드에 사용되는 특성 인 Drupal입니다. 를 사용 bundle()하면 다른 엔티티 유형에 코드를 쉽게 적용 할 수 있지만 사용중인 코드의 경우는 아닙니다.


5

을 사용해야 $variables['node']->getType()합니다. 또한 일부보기 모드에서만 필요한 경우이를 확인하십시오.$variables['view_mode']


2

후크 함수 이름에 노드 (및 뷰 유형)를 추가 할 수 있습니다.

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

예를 들어, 모드 의 page노드 유형은 full다음과 같습니다.

function MYTHEME/MYMODULE_preprocess_node__page__full(&$variables) {
  // ...
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.