web-dev-qa-db-fra.com

Existe-t-il un moyen de savoir si la page actuelle est un nœud?

Sans vérifier l'URL, je voudrais savoir si la page actuelle est une page de nœud. Nous prévoyons d'utiliser des alias d'URL, nous aimerions donc ne pas compter sur la structure '/ node/*'.

Y a-t-il une variable de page ou quelque chose qui indiquera une page de nœud?

7
BrandenB171
\Drupal::request()->attributes->get('node');

Extrait d'ici: https://api.drupal.org/api/drupal/core!lib!Drupal.php/function/Drupal%3A%3Arequest/8

Maintenant, les docs disent de ne jamais utiliser cette fonction, mais je l'ai utilisé pour déterminer sur quel type de page je suis.

Il existe une autre fonction, mais je ne suis pas sûr qu'elle s'applique dans votre cas:

https://api.drupal.org/api/drupal/core%21modules%21node%21node.module/function/node_is_page/8

À tout le moins, si vous n'avez pas d'entité, vous pouvez imiter cela dans votre code:

  $route_match = \Drupal::routeMatch();

  if ($route_match->getRouteName() == 'entity.node.canonical') {
    return true;
  }
14
Kevin

Dans votre propre module, je pense que la méthode recommandée est

$node = \Drupal::routeMatch()->getParameter('node');
if ($node instanceof \Drupal\node\NodeInterface) {
  // It's a node!
}
6
GiorgosK

Dans le modèle de page, une variable pour le nœud est déjà disponible, que vous pouvez utiliser dans twig.

Pour dire, si la page courante est un nœud, vous pouvez vérifier si node existe:

page.html.twig

{% if node %}
  <h1>This is a node</h1>
{% endif %}

C'est possible, car ce code est dans le noyau:

core/includes/theme.inc:
function template_preprocess_page(&$variables) {
  ...
  if ($node = \Drupal::routeMatch()->getParameter('node')) {
    $variables['node'] = $node;
  }
}

Cela fonctionnera sur/node/[id] et les alias d'url.

5
4k4

Les réponses actuelles ne fonctionnent pas pour les aperçus ou les révisions. Mais normalement, vous aimeriez que ce morceau de logique soit déclenché sur les aperçus ou les révisions. Surtout au niveau des thèmes où vous devriez au mieux voir à quoi ressemblera le nœud après avoir été enregistré et/ou publié.

Voici donc un extrait qui obtient le nœud actuel, peu importe si vous affichez le nœud complet ou son aperçu ou sa révision. Celui-ci peut être placé dans une fonction d'aide sous MYMODULE/src/Utils Pour être accessible tel quel ou pour en faire un service.

$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;

BTW la même chose s'applique pour la fonction node_is_page() qui ne fonctionne pas actuellement sur les révisions ou les aperçus. J'ai déjà ouvert un problème et fourni un correctif sur https://www.drupal.org/project/drupal/issues/3005029 .

0
leymannx