【问题标题】:programmatically get all nodes from drupal 8以编程方式从 drupal 8 获取所有节点
【发布时间】:2018-08-10 13:43:47
【问题描述】:

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

    $nids = \Drupal::entityQuery('node')->condition('type','news')->execute();
    $nodes =  \Drupal\node\Entity\Node::loadMultiple($nids); 
  • 第一行返回一个id的对象
  • 第二行返回那些 id 的节点

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

有人可以帮忙吗,有什么问题吗?这是正确的方法吗?

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

【问题讨论】:

    标签: php drupal-modules drupal-8


    【解决方案1】:

    这实际上返回节点对象

    $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;
      //...
    }  
    

    【讨论】:

    • 谢谢,这成功了。但我可以问你,用适当的调试器检查是什么意思。我需要知道节点对象的结构,你能告诉我吗?
    • 我认为xdebug 是一个合适的调试器,但使用你最喜欢的代码编辑器(vscode、atom、netbeans、phpstorm 等)进行设置可能会让人头疼......也许是最简单的方法inspect variables 在 drupal 中使用 kint() 这可能足以满足您的目的......阅读更多 drupal.org/docs/8/theming/twig/…
    • $title = $node->title->value; 这很好,但是如何根据界面语言检索翻译
    • 实体查询服务将被弃用见:drupal.org/node/2849874
    猜你喜欢
    • 2014-08-02
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 2017-10-03
    相关资源
    最近更新 更多