ノードのビューモードを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.
}
}
}
特定のビューモードのノードが表示されているときにのみライブラリをアタッチするには、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';
}
}
}
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
}
}
}