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


22

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

답변:


28

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

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

원하는만큼 $conditions배열 (두 번째 인수)에 속성 조건을 추가 할 수 있으므로 상태, 생성 등도 공정한 게임입니다.

$conditions기술적으로 더 이상 사용되지 EntityFieldQuery않지만 (나는 찬성한다고 생각합니다 ) Drupal 7에서 해당 기능이 제거 될 가능성은 기본적으로 없습니다. 너무 많이 끊어 질 것입니다.


3
그러나 Drupal 8에서는 사라졌습니다.
mpdonadio

내가 찾던 것이기 때문에이 답변을 수락 할 것이지만 Drupal 8과 함께 작동하기 때문에 @MPD 솔루션을 사용할 것입니다. :)
drcelus

@drcelus 예 MPD의 방법은 가장 좋은 방법입니다. 아마 언급 했어야 할 것입니다- EntityFieldQuery모든 방법 :) 나는 이것을 다른 것보다 후손에 더 많이 넣었습니다.
Clive

1
entity_load_multipleD8에 존재합니다. 그래도 속성별로로드 할 수 없습니다.

설명해 주셔서 감사합니다. 나는 $ 8이 D8에서 사라 졌다는 것을 의미했다.
mpdonadio

34

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.