it-swarm.dev

컨텐츠 유형에서 모든 노드를 반복하는 방법

특정 콘텐츠 유형의 모든 노드 필드에서 일부 정보를 복구하고 싶습니다. db_query하고 모든 노드 ID를 가져 와서 반복합니다. 내가 알고 싶은 것은 drupal 함수를 사용 하여이 문제를 해결할 다른 방법이 있는지입니다.

22
drcelus

node_load_multiple() 을 통해 해당 정보를 직접 쿼리 할 수 ​​있습니다.

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

$conditions 원하는대로 배열 (두 번째 인수)이므로 상태, 생성 등은 공정한 게임입니다.

$conditions은 기술적으로 더 이상 사용되지 않습니다 (EntityFieldQuery를 선호한다고 생각합니다). 그러나 그 기능이 Drupal 7에서 제거 될 가능성은 기본적으로 없습니다. 너무 많이 깨질 것입니다.

28
Clive

Drupal 코어는 EntityFieldQuery() 라는 클래스를 제공합니다. 그것을 사용하기위한 handy document page 도 있으며 많은 예제가 있습니다. 가장 간단한 형태로 :

$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
  }
}

"page"유형의 게시 된 모든 노드가로드됩니다. 주기적으로 이것을 조정해야합니다.

$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
  }
}

한 번에 너무 많은로드를 피하면 메모리 문제가 발생할 수 있습니다.

34
mpdonadio