Cara mengulangi semua node dari tipe konten

22

Saya ingin memulihkan beberapa info dari bidang semua node dari jenis konten tertentu. Saya tahu bagaimana melakukannya menggunakan db_querydan mendapatkan semua ID node kemudian beralihi mereka. Yang ingin saya ketahui adalah apakah ada cara lain untuk menggunakan fungsi drupal ini.

drcelus
sumber

Jawaban:

28

Anda dapat menanyakan informasi itu secara langsung node_load_multiple()

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

Anda dapat menambahkan sebanyak mungkin kondisi properti ke $conditionsarray (argumen kedua) sesuka Anda, jadi status, dibuat, dll juga merupakan permainan yang adil.

$conditionssecara teknis sudah usang (saya bayangkan mendukung EntityFieldQuery) tetapi kemungkinan fungsi yang pernah dihapus dari Drupal 7 pada dasarnya tidak ada. Itu akan terlalu banyak pecah.

Clive
sumber
3
Itu hilang di Drupal 8, meskipun.
mpdonadio
Saya akan menerima jawaban ini karena itu persis apa yang saya cari, tetapi akan menggunakan solusi @MPD karena itu juga akan bekerja dengan Drupal 8 :)
drcelus
@drcelus Ya metode MPD jelas merupakan cara terbaik untuk pergi, saya mungkin seharusnya menyebutkan bahwa - EntityFieldQuerysepanjang jalan :) Saya menempatkan ini lebih untuk anak cucu daripada yang lain
Clive
1
entity_load_multipleada di D8. Anda tidak dapat memuat berdasarkan properti.
Terimakasih atas klarifikasinya. Maksud saya $ condition hilang dari D8.
mpdonadio
34

Inti Drupal menyediakan kelas yang disebut EntityFieldQuery(). Ada juga halaman dokumen yang berguna untuk menggunakannya, yang memiliki banyak contoh. Dalam bentuknya yang paling sederhana:

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

Ini akan memuat semua node tipe "halaman" yang diterbitkan. Anda perlu menyesuaikan ini secara berkala

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

untuk menghindari memuat terlalu banyak sekaligus, yang dapat menyebabkan masalah memori.

mpdonadio
sumber