首页 > 解决方案 > Drupal 8 - 获取具有部分 URL 别名的所有节点

问题描述

我试图找到一种方法来通过节点中的 url 别名的一部分来获取所有节点。我知道我通过完整的 url 别名获得了一个特定的节点。例如:

$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]);
}

而且我知道我可以通过实体查询找到多个节点:

$nids = \Drupal::entityQuery('node')
            ->condition('type','page')
            ->condition('status',1)
            ->sort('created', 'DESC')
            ->range(0, 20)
            ->execute();

但我想知道如何实现一个附加条件,以通过 URL 别名的一部分过滤节点,例如“/news/*”。我需要具有此 url 片段的所有节点。

标签: drupaldrupal-8

解决方案


可以试试这个 - 参考 https://www.jonkamke.com/blog/2019/5/load-a-node-via-url-alias

  <?php
    /** @var Drupal\Core\Url $url */
    $url = $variables['url'];
    if ($url instanceof Drupal\Core\Url) {
      $nid = $url->getRouteParameters()['node'];
      /** @var \Drupal\node\Entity\Node $node */
      $node = Node::load($nid);
      if ($node instanceof Node) {
        $type = $node->getType();
      }
    }

推荐阅读