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.

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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.