Как перебирать все узлы из типа содержимого

Я хочу восстановить некоторую информацию из поля всех узлов определенного типа контента. Я знаю, как это сделать, используя db_query и получая все ID узла, а затем перебираем их. Я хотел бы знать, есть ли другой способ обойти это, используя функции drupal.

19 голосов | спросил drcelus 28 J0000006Europe/Moscow 2013, 16:51:25

2 ответа


27

Вы можете запросить эту информацию непосредственно через node_load_multiple()

$nodes = node_load_multiple(array(), array('type' => 'my_type'));

Вы можете добавить столько свойств свойства в массив $conditions (второй аргумент), сколько хотите, так что статус, созданный и т. д. также является честной игрой.

$conditions технически не рекомендуется (я полагаю, что в пользу EntityFieldQuery)), но шансы на эту функциональность, когда-либо удаляемые с Drupal 7, в основном отсутствуют. Это сломалось бы слишком много.

ответил Clive 28 J0000006Europe/Moscow 2013, 17:09:29
31

Ядро Drupal предоставляет класс под названием EntityFieldQuery() . Существует также удобная страница документа для ее использования, в которой есть много примеров. В простейшей форме:

$query = new EntityFieldQuery();

$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'page')
  ->propertyCondition('status', 1);

$result = $query->execute();

if (!empty($result['node'])) {
  $nids = array_keys($result['node']);
  $nodes = node_load_multiple($nids);

  foreach ($nodes as $node) {
    // do something awesome
  }
}

Это загрузит все опубликованные узлы типа «страница». Вам периодически нужно настроить это на

$query = new EntityFieldQuery();

$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'page')
  ->propertyCondition('status', 1);

$result = $query->execute();

if (!empty($result['node'])) {
  $nids = array_keys($result['node']);

 foreach ($nids as $nid) {
    $node = node_load($nid, NULL, TRUE);
    // do something awesome
  }
}

, чтобы избежать слишком большой загрузки сразу, что может вызвать проблемы с памятью.

ответил mpdonadio 28 J0000006Europe/Moscow 2013, 17:08:56

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132