Jusqu'ici, je suis tombé sur ces 3 fonctions dans Drupal 7, mais je ne sais pas trop quelle est la différence entre elles et quelle est la meilleure solution pour obtenir l'ID de nœud dans une fonction de prétraitement de bloc.
Pouvez-vous me donner un aperçu?
Réponses:
menu_get_object()
l'objet retourne alors l'objet nœud du nœud dont l'ID est 1; si la page affichée est example.com/user/1,menu_get_object('user')
l'objet retourné sera alors l'utilisateur correspondant à l'utilisateur dont l'ID est 1.node_load
) à appeler pour charger un objet correspondant à une partie du chemin actueldrupal_lookup_path("homepage")
reviendra"node/1"
. Les alias de chemin peuvent être associés à n’importe quel chemin interne, pas seulement aux chemins de nœud.Si tout ce que vous voulez obtenir est l'ID de nœud du nœud actuellement affiché, il vous suffit d'utiliser le code suivant:
Si vous devez obtenir l'objet nœud, vous pouvez utiliser le code suivant:
Le deuxième est préférable, car il renvoie l'objet de nœud correct pour les chemins d'accès internes tels que nœud / 1 / revisions / 3 / view.
N'oubliez pas que certaines fonctions de prétraitement, telles que celles de la page ou du nœud, ont déjà un
$variables['node']
. Cela signifie que dans ces cas, il vous suffit d'utiliser l'extrait suivant dans votre fonction de prétraitement, sans vous soucier de la fonction à utiliser.Pour les autres fonctions de prétraitement, consultez la documentation pour voir s’il existe une variable contenant l’objet noeud. Par exemple, c’est le cas pour
template_preprocess_comment()
lequel met à la$variables['node']
disposition des fonctions de prétraitement des commentaires.la source
Comment ça se passe dans template_preprocess_page de Drupal Core :
Ligne 2267 de theme.inc et suivantes:
template_preprocess_page utilise menu_get_object . Ensuite, il suffit de vérifier si le noeud est défini et d’obtenir $ node-> nid.
la source
Une chose à laquelle vous devez faire attention est le pseudonyme de chemin.
drupal_get_normal_path($path)
pour obtenir le chemin actuel, utilisez la variable système
$_SERVER["REQUEST_URI"]
(Si vous êtes sur la page de nœud que vous pouvez appeler
$node->uri['path']
, cela renverra un chemin non alias. Si vous êtes sur la page de nœud, vous pouvez simplement utiliser$node->nid
.)cela retournera noeud / XXXX
alors essayez quelque chose comme
la source
Ce n'est pas une mauvaise façon de le faire. arg () fonctionne sur le chemin interne, il ne sera donc pas affecté par les alias de chemin.
la source
menu_get_object
(qui se contente de tournermenu_get_item
pour que ce soit tout aussi bien).if (arg(0) == 'node' && is_numeric(arg(1)))
alorsarg(1)
près de 99% vous renverront un ID de nœud. Mais un seularg(1)
pourrait également vous retourner beaucoup d'autres identifiants.Dans Drupal 8, vous pouvez obtenir des arguments d'URL basés sur le contenu du routage.
Pour obtenir l'identifiant seul:
Si vous envisagez de charger l'objet nœud, vous pouvez simplement l'obtenir de cette façon:
Pour trouver les noms de paramètres, vous pouvez utiliser:
la source