drupal - 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 片段的所有节点。
解决方案
可以试试这个 - 参考 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();
}
}
推荐阅读
- c# - 为什么我的应用程序在绑定到集合时会进入中断模式?
- android - 尝试读取 zip 文件时出现 android studio 错误
- .htaccess - 更改子文件夹的名称并重定向
- python-3.x - python中的多项式乘法
- angular - Angular Elements 输出在 IE11 中不起作用
- json - 将通用伴随对象传递给超级构造函数
- java - 如何防止 Callable 对长时间运行和繁重的任务感到饥饿?
- lua - Lua / corona sdk 物理.addBody()
- azure - helm 不会为 Azure k8s 创建自定义资源定义
- c# - 在尝试设置实例之前,Entity Framework 使用了默认 DbConfiguration 实例