Question

Je crée une importation personnalisée et à l'exportation, au moment comme un script externe (via bootstrap), je prévois de créer un module d'une manière plus générique lateron.

Je construis un frontend pour Nagios et pour la gestion de notre hôte et la configuration Nagios btw. Peut-être qu'il pourrait être utile pour d'autres environnements (networkmanagement)

Maintenant, je dois savoir comment obtenir la liste de tous les nœuds de type x?

Je veux éviter SQL directe.

Une suggestion que je suis arrivé était de faire un flux et l'analyser mais j'Acess le db une douzaine drupal fois pour extraire divers nœuds, il est étrange de faire une demande de web pour une chose

Alors, que je cherche comme débutant dev est juste drupal un pointeur vers api module de recherche de base pour cette tâche

TIA florian

Était-ce utile?

La solution

Pourquoi voulez-vous éviter d'utiliser SQL?

Si vous souhaitez obtenir des informations sur ce qui est dans votre base de données, comme tous les nœuds de type x, la seule façon de l'obtenir est par le biais d'une requête SQL, sauf si vous avez les données extraites déjà.

Une requête comme

db_query("SELECT title, nid FROM {node} WHERE type = 'x';");

ne devrait pas être la chose qui ruine votre performance.

Edit: Le lien fourni est un de Drupal 7, vous devez être soyez prudent de lire ceci. La raison est que dans Drupal 7, il est non seulement possible d'utiliser db_query qui est essentiellement wrapper pour les fonctions php mysql_query, pg_query. Il est un peu différent et l'utiliser, vous avez l'habitude d'utiliser le code db_specific. Quoi qu'il en soit nouveau dans Drupal 7 est quelque chose qui est un peu comme un ORM. Je ne l'ai pas lu dans le détail, mais l'idée est que vous pouvez construire une requête à l'aide des commandes sur un objet. Ceci est probablement ce que vous recherchez. Cependant, Drupal 7 n'est pas prêt du tout pour les sites de production. Il y a encore beaucoup de questions critiques et les questions de sécurité. Donc, ce ne sera pas en une possibilité pour un certain temps.

Edit 2: Si vous voulez obtenir le titre de noeud et le corps, c'est ce que vous devez faire:

$type = 'x';
$query = db_query("SELECT r.nid, r.title, r.body FROM {node} AS n 
                  LEFT JOIN {node_revisions} AS r ON r.nid = n.nid
                  WHERE type = '%s';", array($type));
$nodes = array();
while ($node = db_fetch_object($query)) {
    $nodes[$node->nid] = $node;
}

Vous pouvez utiliser db_fetch_array au lieu de db_fetch_object` si vous voulez extraire des tableaux au lieu d'objets à partir du db.

Autres conseils

Ceci est une question assez vieux, mais pour tous ceux qui viennent dans cette page maintenant, dans Drupal 7.x meilleures pratiques est d'utiliser des requêtes dynamiques.

Donc, si vous voulez sélectionner tous les nœuds de type x, vous pouvez faire ce qui suit:

$articles = db_select('node')
->fields('node', array('nid', 'title'))
->condition('type', 'x', '=')
->execute()
->fetchAllKeyed();

La variable $ articles devrait alors être un tableau de tous les nœuds de type x, par calée JNV avec les tableaux de valeur mentionnée au titre de noeud. L'espoir qui peut aider.

Vues est généralement comment créer des requêtes de base de données sans les écrire dans Drupal, mais cette requête est donc simple, je ne suis pas sûr que ça vaut les frais généraux de vue d'apprentissage, à peine 5 lignes après que vous avez Drupal bootstrap de:

$nodes = array();
$results = db_query("SELECT nid FROM {node} WHERE type = '%s'", $type);
while ($result = db_fetch_object($result)) {
  $nodes[] = node_load($result->nid);
}

Je dois utiliser SQL faire à ce sujet.

http://api.drupal.org/api/function/node_get_types/6

= nœud comptages

$node_types = node_get_types();

$type_count = array();

foreach ($node_types as $type) {
   $result = db_fetch_object(db_query('SELECT count(nid) AS node_count FROM {node} WHERE type = "%s"'), $type);
   $type_count[$type] = $result['count(nid)'];
}

print_r($type_count);

Les nœuds et leur type:

$node_types = node_get_types();

$nodes = array();

foreach ($node_types as $type) {
   $result = db_query('SELECT nid, title FROM {node} WHERE type = "%s"'), $type);

   while ($node = db_fetch_object($result)) {
      $nodes[] = array('Type' => $type, 'Title' => $node->title);
   }
}

print_r($nodes);

Quelque chose comme ça. Je mange le déjeuner, donc je n'ai pas testé, mais je l'ai fait avant, donc cela devrait fonctionner. Drupal 6.

Le migrer le module peut être vous intéresser. Il soutient également drush de sorte que vous pouvez écrire des scripts choses assez facilement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top