web-dev-qa-db-ja.com

hook_page_attachmentsでノードのビューモードを取得する方法?

ノードのビューモードをfullまたはdefaultに設定した場合、mymodule_page_attachmentsで条件付きでライブラリを追加できるように、ノードのビューモードを取得する必要があります。以下を試してみましたが、nodes view mode once I retrieve the $ node`オブジェクトを取得できませんでした。

hook_page_attachmentsでノードのビューモードを取得する方法

これが私たちが試したものです:

function mymodule_page_attachments(array &$attachments) {
  $node = \Drupal::routeMatch()->getParameter('node');
  if(is_object($node)) {
     // we tried printing but that didn't result any view_mode field. 
     ksm($node);

    // Goal
    if($node['view_mode'] == 'full' or $node['view_mode'] == 'default') {
       // proceed with my logic. 
    }
  }
}
3
usernameabc

特定のビューモードのノードが表示されているときにのみライブラリをアタッチするには、hook_entity_view/ hook_ENTITY_TYPE_view 次のように。

/**
 * Implements hook_ENTITY_TYPE_view().
 */
function MYMODULE_node_view(array &$build, \Drupal\Core\Entity\EntityInterface $entity, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display, $view_mode) {

  $node = $entity;
  if ($node->bundle() === 'page') {
    if ($view_mode === 'full') {
      $build['#attached']['library'][] = 'MYMODULE/foo';
    }
    elseif ($view_mode === 'default') {
      $build['#attached']['library'][] = 'MYMODULE/bar';
    }
  }
}
3
leymannx

Drupalは、ここでは完全とデフォルトを区別しません。特定のノードタイプに対して完全なビューモードが指定されていない場合は、デフォルトのビューモードが使用されます。したがって、次のように、特定のノードタイプが完全なビューモードを実装しているかどうかを確認し、これに基づいて条件付きロジックを適用できます。

function hook_page_attachments(array &$attachments) {
  /* @var \Drupal\node\Entity\Node $node */
  $node = \Drupal::routeMatch()->getParameter('node');
  if($node) {
    $view_modes = \Drupal::service('entity_display.repository')->getViewModeOptionsByBundle('node', $node->bundle());
    if (isset($view_modes['full'])) {
      // this is full
    }
    else {
      // this is default
    }
  }
}
0
Stefan Korn