如何从路径别名获取节点ID?


Answers:


25

我不确定是否有直接功能,但是一种方法是使用路径别名管理器服务查找内部路径,然后对其进行正则表达式以获取有效的节点ID,以在其上执行对象加载:

$path = \Drupal::service('path.alias_manager')->getPathByAlias('/this-is-the-alias');
if(preg_match('/node\/(\d+)/', $path, $matches)) {
  $node = \Drupal\node\Entity\Node::load($matches[1]);
}

4
由于某些原因,$path有时等于/this-is-the-alias。曾经是根路径(node/{id})是另一个别名#migrationstruggles的时候,但是它也与其他别名一起出现。
克里斯·

7

您可以使用以下代码获取和加载实体,并可以访问其值。

  use \Drupal\Core\Url;

  $alias = \Drupal::service('path.alias_manager')->getPathByAlias('/etapes-de-la-vie');

  $params = Url::fromUri("internal:" . $alias)->getRouteParameters();
  $entity_type = key($params);
  $node = \Drupal::entityTypeManager()->getStorage($entity_type)->load($params[$entity_type]);
  //to use dpm you need the devel module
  dpm($node->nid->value);

参考文献


1

安装devel模块,然后使用devel工具栏项“ 当前路线信息”

这将产生此URL,您可以直接输入该URL,并提供drupal安装已知的任何路径作为查询参数:

/devel/routes/item?path=alias

如果是节点,则在列出的路由变量末尾的原始参数中找到节点ID。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.