Je veux récupérer des informations à partir d'un champ de tous les nœuds d'un type de contenu spécifique. Je sais comment faire en utilisant un db_query
et en obtenant tous les ID de nœud, puis parcourez-les. Ce que je voudrais savoir, c'est s'il existe un autre moyen de contourner cela en utilisant les fonctions drupal.
Vous pouvez interroger ces informations directement via node_load_multiple()
$nodes = node_load_multiple(array(), array('type' => 'my_type'));
Vous pouvez ajouter autant de conditions de propriété à $conditions
array (second argument) comme vous le souhaitez, donc le statut, créé, etc. est également un jeu équitable.
$conditions
est techniquement obsolète (j'imagine en faveur de EntityFieldQuery
) mais les chances que cette fonctionnalité soit supprimée de Drupal 7 sont pratiquement nulles. Cela casserait trop.
Le noyau Drupal fournit une classe appelée EntityFieldQuery()
. Il y a aussi une page de document pratique pour l'utiliser, qui a beaucoup d'exemples. Dans sa forme la plus simple:
$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
}
}
Cela chargera tous les nœuds publiés de type "page". Vous devez périodiquement l'ajuster à
$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
}
}
pour éviter de charger trop à la fois, ce qui peut entraîner des problèmes de mémoire.