it-swarm-id.com

Apakah ada fungsi Drupal API untuk mendapatkan daftar node berdasarkan jenis?

Apakah ada Drupal fungsi API seperti node_load() yang akan mengembalikan daftar node berdasarkan jenis yang diberikan?

Saya sudah mencoba $nodes = node_load(array("type" => 'student_vote')), tetapi hanya mengembalikan satu simpul.

Saya tahu saya bisa membuat kode seperti node_load(), tapi saya ingin melihat apakah mungkin sudah ada yang seperti itu di luar sana.

37
gmercer

Bergantung pada versi Drupal:

drupal 6:

$nodes = db_query('SELECT nid FROM {node} WHERE type="%s"', $type);

drupal 7:

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

drupal 8:

$nids = \Drupal::entityQuery('node')
  ->condition('type', 'NODETYPE')
  ->execute();
$nodes = \Drupal::entityTypeManager()
  ->getStorage('node')
  ->loadMultiple($nids);
47
Nikit

Tidak ada API untuk Drupal 6. Yang paling dekat yang dapat Anda lakukan adalah dengan benar meminta semua ID node untuk jenis konten kemudian memuat masing-masing menggunakan node_load () tetapi ini akan membutuhkan n + 1 pertanyaan dan sangat tidak efisien.

function node_load_by_type($type, $limit = 15, $offset = 0) {
  $nodes = array();
  $query = db_rewrite_sql("SELECT nid FROM {node} n WHERE type = '%s'", 'n');
  $results = db_query_range($query, $type, $offset, $limit);
  while($nid = db_result($results)) {
    $nodes[] = node_load($nid);
  }
  return $nodes;
}

Catatan: db_rewrite_sql akan memastikan pemeriksaan akses dan pemfilteran modul yang disediakan lainnya (seperti pemfilteran bahasa yang disediakan oleh modul i18n).

Untuk Drupal 7, Anda dapat menggunakan $nodes = node_load_multiple(array(), array('type' => $type)); tetapi argumen $conditions Dari node_load_multiple() sudah ditinggalkan. , Anda harus menggunakan EntityFieldQuery untuk meminta ID node kemudian menggunakan node_load_multiple() tetapi tanpa argumen $condition.

function node_load_by_type($type, $limit = 15, $offset = 0) {
  $query = new EntityFieldQuery();
  $query->entityCondition('entity_type', 'node')
    ->entityCondition('bundle', $type)
    ->range($offset, $limit);
  $results = $query->execute();
  return node_load_multiple(array_keys($results['node']));
}
13
Pierre Buyle

Sudah ada beberapa jawaban bagus, tetapi mereka menjawab pertanyaan itu secara harfiah dan hanya merujuk pada simpul.

Karena D6 tidak memiliki API untuk melakukan apa yang diminta, dan tidak perlu membatasi diri ke node di D7 dan meneruskan, saya merasa jawaban yang baik harus entitas generik.

function entity_load_by_type($entity_type, $bundle, $limit = 10, $offset = 0) {
  $query = new EntityFieldQuery();
  $query->entityCondition('entity_type', $entity_type)
    ->entityCondition('bundle', $bundle)
    ->range($offset, $limit);
  $results = $query->execute();
  return entity_load($entity_type, array_keys($results[$]));
}
7
Letharion

Dapatkan daftar node dari tipe konten

Drupal 6:

$nodes = db_query('SELECT nid FROM {node} WHERE type="%s"', 'student_vote');

Drupal 7:

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

Drupal 8:

$nids = \Drupal::entityQuery('node')
  ->condition('type', 'student_vote')
  ->execute();
$nodes = \Drupal::entityTypeManager()
  ->getStorage('node')
  ->loadMultiple($nids);

Semoga ini bisa membantu.

1
Nitesh Sethia

drupal 8:

$nids = \Drupal::entityQuery('node')
  ->condition('type', 'student_vote')
  ->execute();
$nodes = \Drupal::entityTypeManager()
  ->getStorage('node')
  ->loadMultiple($nids);
1
Andrea