首页 > 解决方案 > 以编程方式从 drupal 8 获取所有节点

问题描述

我正在尝试从 drupal 获取 certian 类型的所有节点。我尝试了很多方法来实现这一点,但可能由于我缺乏 Drupal 自定义模块编程经验,我无法实现我的愿望。我在网上找到的最接近的方法是:

    $nids = \Drupal::entityQuery('node')->condition('type','news')->execute();
    $nodes =  \Drupal\node\Entity\Node::loadMultiple($nids); 

这看起来简单直接。但是,这是输出! { "59": { "in_preview": null }, "61": { "in_preview": null } }

有人可以帮忙吗,怎么了?这是正确的方法吗?

我想获取节点然后搜索它们中的每一个(我正在制作某种搜索引擎)所以我期待某种对象,然后我可以从中提取标题,正文......等。这是正确的方法吗?

标签: phpdrupal-modulesdrupal-8

解决方案


这实际上返回节点对象

$nodes =  \Drupal\node\Entity\Node::loadMultiple($nids); 

也许您的输出给出的结果最少,而不是对象。如果您使用适当的调试器进行检查,您将看到这些对象。

如果您希望从查询中返回太多节点,那么一次实际获取一个节点对象可能会更好

$query = \Drupal::entityQuery('node')
  ->condition('status', 1) //published or not
  ->condition('type', 'news') //content type
  ->pager(10); //specify results to return
$nids = $query->execute();

foreach ($nids as $nid) {
  $node = \Drupal\node\Entity\Node::load($nid); 
  $body = $node->body->value;
  $title = $node->title->value;
  //...
}  

推荐阅读