it-swarm-tr.com

Düğümlerin türüne göre listesini almak için bir Drupal API işlevi var mı?

Belirli bir türe göre düğümlerin listesini döndürecek olan node_load() gibi bir Drupal API işlevi var mı?

Ben $nodes = node_load(array("type" => 'student_vote')) denedim, ama sadece bir düğüm döndürür.

Ben node_load() gibi bir şey kodlayabilir biliyorum, ama orada zaten böyle bir şey olup olmadığını görmek istedim.

37
gmercer

Drupal sürümüne bağlı olarak:

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

Drupal 6. için böyle bir API yok. Yapabileceğiniz en yakın şey, içerik türü için tüm düğüm kimliğini düzgün bir şekilde sorgulamak ve ardından her birini node_load () kullanarak yüklemek, ancak bu n + 1 gerektirecektir sorgular ve çok verimli değildir.

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

Not: _db_rewrite_sql_ erişim kontrolü ve diğer modüllerin filtrelenmesini sağlayacaktır (i18n modülü tarafından sağlanan dil filtreleme gibi).

Drupal 7 için, $nodes = node_load_multiple(array(), array('type' => $type)); kullanabilirsiniz, ancak _$conditions_ argümanı node_load_multiple() kullanımdan kaldırılmıştır. düğüm kimliklerini sorgulamak için EntityFieldQuery kullanmalı, sonra node_load_multiple() kullanmalı, ancak _$condition_ s bağımsız değişkeni olmadan kullanılmalıdır.

_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

Zaten birkaç iyi cevap var, ama soruyu tam anlamıyla alıyorlar ve sadece düğümlere atıfta bulunuyorlar.

D6'nın istendiği şeyi yapmak için bir API'si olmadığından ve kendini D7 ve ileri düzeydeki düğümlerle sınırlamak gerekli olmadığından, iyi bir cevabın genel bir varlık olması gerektiğini hissediyorum.

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

Bir içerik türünden düğümlerin listesini alın

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);

Umarım bu yardımcı olur.

1
Nitesh Sethia

drupal 8:

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