Программно получить все узлы из drupal 8

Я пытаюсь получить все узлы типа certian из drupal. Я пробовал много способов добиться этого, но, возможно, из-за отсутствия у меня опыта программирования пользовательских модулей Drupal я не смог реализовать свое желание. Ближайший способ, который я нашел в сети, таков:

    $nids = \Drupal::entityQuery('node')->condition('type','news')->execute();
    $nodes =  \Drupal\node\Entity\Node::loadMultiple($nids); 
  • первая строка возвращает объект с идентификатором
  • вторая строка возвращает узлы этих идентификаторов

это выглядит легко и просто. но это результат! { "59": { "in_preview": null }, "61": { "in_preview": null } }

может кто-нибудь помочь, что не так? и правильно ли это сделать?

Я хочу взять узлы, а затем выполнить поиск в каждом из них (я создаю своего рода поисковую систему), поэтому я ожидаю какой-то объект, из которого я затем могу извлечь заголовок, тело ... и т. д. это правильный путь?

2
0
10 061
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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;
  //...
}  

Спасибо, это помогло. но могу я вас спросить, что вы имеете в виду, говоря о проверке с помощью подходящего отладчика. мне нужно знать структуру объекта узла, вы можете мне сказать?

khaled 13.08.2018 17:50

Я считаю xdebug ПРАВИЛЬНЫМ отладчиком, но это может быть головной болью для настройки с вашим любимым редактором кода (vscode, atom, netbeans, phpstorm и т. д.) ... Возможно, самый простой способ проверить переменные в drupal - использовать kint(), который, вероятно, достаточно хорош для ваших целей ... подробнее drupal.org/docs/8/theming/twig/…

GiorgosK 13.08.2018 17:59
$title = $node->title->value; это здорово, но как получить перевод в зависимости от языка интерфейса
Saf 30.01.2020 03:53

Служба запросов сущностей будет устаревшей, см .: drupal.org/node/2849874

wranvaud 04.10.2020 17:51

Другие вопросы по теме