URLをチェックせずに、現在のページがノードページであるかどうかを知りたいのですが。URLエイリアスの使用を計画しているため、「/ node / *」構造に依存しないようにします。
ノードページを示すページ変数または何かがありますか?
URLをチェックせずに、現在のページがノードページであるかどうかを知りたいのですが。URLエイリアスの使用を計画しているため、「/ node / *」構造に依存しないようにします。
ノードページを示すページ変数または何かがありますか?
回答:
\Drupal::request()->attributes->get('node');
ここから取得:https ://api.drupal.org/api/drupal/core!lib!Drupal.php/function/Drupal%3A%3Arequest /8
今、ドキュメントはこの関数を決して使用しないと言っていますが、私はこれを使用して、自分がどのようなページにいるかを判断しました。
別の関数がありますが、それがあなたの場合に適用されるかどうかはわかりません:
https://api.drupal.org/api/drupal/core%21modules%21node%21node.module/function/node_is_page/8
少なくとも、エンティティがない場合は、コードでそれを模倣できます。
$route_match = \Drupal::routeMatch();
if ($route_match->getRouteName() == 'entity.node.canonical') {
return true;
}
$route_match->getRouteName() == 'entity.node.revision'
リビジョンの作業にもこのプラスが必要でした。
ページテンプレートでは、ノードの変数が既に利用可能であり、twigで使用できます。
現在のページがノードであるかどうかを確認するには、node
存在するかどうかを確認できます。
page.html.twig
{% if node %}
<h1>This is a node</h1>
{% endif %}
このコードはコアにあるため、これは可能です。
core/includes/theme.inc:
function template_preprocess_page(&$variables) {
...
if ($node = \Drupal::routeMatch()->getParameter('node')) {
$variables['node'] = $node;
}
}
これは/ node / [id]とurlエイリアスで機能します。
core/includes/theme.inc
。を参照してください。
現在の回答は、プレビューまたはリビジョンでは機能しません。しかし、通常は、そのロジックの一部をプレビューまたはリビジョンでも起動する必要があります。特に、保存または公開された後のノードがどのように見えるかをよく理解する必要があるテーマレベルで。
したがって、次のスニペットは、ノード全体、そのプレビュー、またはそのリビジョンを表示しても、現在のノードを取得します。これは、ヘルパー関数内に配置して、MYMODULE/src/Utils
そのままアクセスするか、サービスにすることができます。
$node = FALSE;
$route_match = \Drupal::routeMatch();
if ($route_match->getRouteName() == 'entity.node.canonical') {
$node = $route_match->getParameter('node');
}
elseif ($route_match->getRouteName() == 'entity.node.revision') {
$revision_id = $route_match->getParameter('node_revision');
$node = node_revision_load($revision_id);
}
elseif ($route_match->getRouteName() == 'entity.node.preview') {
$node = $route_match->getParameter('node_preview');
}
return $node;
ところで、同じnode_is_page()
ことが現在リビジョンやプレビューで機能しない機能にも当てはまります。私はすでに問題を開いており、https://www.drupal.org/project/drupal/issues/3005029にパッチを提供しました。