it-swarm.it

Esiste una Drupal per ottenere l'elenco dei nodi per tipo?

Esiste un Drupal API API come node_load() che restituirà un elenco di nodi di un determinato tipo?

Ho provato $nodes = node_load(array("type" => 'student_vote')), ma restituisce solo un nodo.

So che potrei codificare qualcosa come node_load(), ma volevo vedere se potrebbe esserci già qualcosa del genere.

37
gmercer

A seconda della versione di 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

Non esiste una API di questo tipo per Drupal 6. Il più vicino che puoi fare è eseguire una query corretta per tutti gli ID nodo per il tipo di contenuto, quindi caricarli ciascuno usando node_load () ma ciò richiederà n + 1 interroga e non è molto efficiente.

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

Nota: db_rewrite_sql assicurerà il controllo dell'accesso e altri filtri forniti dal modulo (come il filtro della lingua fornito dal modulo i18n).

Per Drupal 7, puoi usare $nodes = node_load_multiple(array(), array('type' => $type)); ma l'argomento $conditions Di node_load_multiple() è deprecato. Invece , è necessario utilizzare EntityFieldQuery per eseguire una query per gli ID nodo quindi utilizzare node_load_multiple() ma senza un argomento di $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

Esistono già molte risposte valide, ma prendono la domanda alla lettera e si riferiscono solo ai nodi.

Dal momento che D6 non ha un'API per fare ciò che viene richiesto e non è necessario limitarsi ai nodi in D7 e inoltro, ritengo che una buona risposta dovrebbe essere un'entità generica.

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

Ottieni l'elenco dei nodi da un tipo di contenuto

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

Spero che questo sia utile.

1
Nitesh Sethia

drupal 8:

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