web-dev-qa-db-fra.com

Chargement de nœuds d'un utilisateur spécifique et d'un type de nœud spécifique

J'ai écrit cette fonction pour le faire, mais il se comporte étrangement, je me demande si j'ai la bonne approche

function getNodes($type,$userID){
        $where = array();   
        $nodes = array();
        $where[':type'] = $type;
        $where[':uid'] = $userID;
        $result = db_query('SELECT nid FROM {node} WHERE uid = :uid AND type = :type', $where);
        if($result){
            foreach($result as $o){
                $nodes = node_load($o->nid);
            }
        }
    return $nodes;
}

N'y a-t-il pas un drupal API chargé du nœud de la DB en le transmettant un UID et Node = type?

3
silkAdmin

Dans d6, vous pourriez passer des critères à node_load () , afin que vous puissiez faire

 $criteria = array(
   'uid' => $userID,
   'type' => $type,
 );

 $nodes = node_load($criteria);

ferait le travail.

Dans D7, vous n'avez pas cette option avec node_load car il ne s'agit que d'un wrapper pour entité_load . Cela a un argument dédépudé qui vous permet de charger des nœuds de la même manière

 $criteria = array(
   'uid' => $userID,
   'type' => $type,
 );

 $nodes = entity_load('node',FALSE,$criteria);

Remarque non testée

Cela peut fonctionner, mais n'est pas garanti.

Le moyen approuvé de le faire dans D7 est d'utiliser EntityfieldQuery

  $query = new EntityFieldQuery();
  $entities = $query->entityCondition('entity_type', 'node')
    ->entityCondition('bundle', $type)
    ->propertyCondition('uid', $userID)
    ->execute();        
  $nodes = node_load_multiple(array_keys($entities['node']));   

Remarque non testée

8
Jeremy French