Snippets Drupal 7 - Charger des nodes
Charger des nodes facilement en utilisant EntityFieldQuery
L'API EntityFieldQuery est très utile pour charger des nodes. Ce snippet permet de l'utiliser facilement:
/**
* Charger des nodes
*
* @param string/array $type Le type de node recherché (article, document...)
* @param integer $limit Le nombre de node à charger
* @param boolean $pager Faut-il ou non afficher un pager
* @param array $conditions Un tableau de conditions à passer à EntityFieldQuery
* @return array Un tableau de nodes chargés ou un tableau vide
*
*/
function my_module_load_nodes($type, $limit = 10, $pager = FALSE, $conditions = array()) {
$query = new EntityFieldQuery();
if ($pager === true) {
$query->entityCondition('entity_type', 'node')->pager($limit);
} else {
$query->entityCondition('entity_type', 'node')->range(0, $limit);
}
if (is_string($type)) {
$query->propertyCondition('type', $type);
} elseif (is_array($type)) {
$query->propertyCondition('type', $type, 'IN');
}
if (is_array($conditions)) {
foreach ($conditions as $condition) {
if (isset($condition['method']) && isset($condition['params'])) {
call_user_func_array(array($query, $condition['method']), $condition['params']);
}
}
}
$query->propertyCondition('status', 1);
$results = $query->execute();
if (!empty($results['node'])) {
return node_load_multiple(array_keys($results['node']));
}
return array();
}
Exemple d'utilisation:
$conditions[] = array('method' => 'propertyOrderBy', 'params' => array('sticky', 'DESC'));
$conditions[] = array('method' => 'propertyOrderBy', 'params' => array('created', 'DESC'));
$conditions[] = array('method' => 'fieldCondition', 'params' => array('my_field_name', 'tid', 'my_term_id'));
$conditions[] = array('method' => 'fieldCondition', 'params' => array('my_field_name', 'value', 'my_value'));
$nodes = my_module_load_nodes('article', 30, TRUE, $conditions);
$variables['nodes'] = $nodes;
$variables['pager'] = theme('pager');
return theme('my_theme', $variables);
Charger les nodes d'une liste du module nodequeue
Le module Nodequeue permet de réaliser des listes ordonnées de nodes via l'administration Drupal. Cette fonction permet de charger une liste de nodes en indiquant son nom:
/**
* Charger les nodes d'une liste dont on connait le "machine_name"
*
* @param string $machine_name Le machine_name de la queue
* @param integer $from La node à partir de laquelle commencer
* @param integer $count Le nombre de nodes à charger
* @return array() Un tableau de nodes chargés ou un tableau vide
*
*/
function my_module_nodequeue_load_nodes($machine_name, $from = 0, $count = 10) {
$queue = nodequeue_load_queue_by_name($machine_name);
if (!empty($queue)) {
$subqueue = current(nodequeue_load_subqueues_by_queue($queue->qid));
if (!empty($subqueue->sqid)) {
$query = db_select('node', 'n')
->fields('n', array('nid'))
->condition('nn.sqid', $subqueue->sqid)
->orderBy('nn.position', 'ASC');
$query->join('nodequeue_nodes', 'nn', 'n.nid = nn.nid');
$query->condition('n.status', 1);
$result = $query->range($from, $count)->execute()->fetchCol();
$data = array();
foreach ($result as $key => $nid) {
$data[$nid] = node_load($nid);
}
return $data;
}
}
return array();
}
Exemple d'utilisation:
$nodes = my_module_nodequeue_load_nodes('my_list');