Domanda

creo un importazione personalizzata ed esportazione, al momento come uno script esterno (via bootstrap), ho intenzione di creare un modulo in un modo più generico lateron.

Sto costruendo un frontend per Nagios e per la nostra configurazione di gestione host e Nagios btw. Forse potrebbe diventare utile per altri ambienti (networkmanagement)

Ora ho bisogno di sapere come ottenere l'elenco di tutti i nodi di tipo x?

Voglio evitare SQL diretta.

Un suggerimento che ho ottenuto è stato quello di fare un RSS e analizzarlo ma io Acess Drupal db una dozzina di volte per estrarre vari nodi, così ci si sente strano di fare una richiesta Web per una cosa

Quindi, quello che sto cercando a newbie drupal dev è solo un puntatore a base api modulo di ricerca per questo compito

TIA Florian

È stato utile?

Soluzione

Perché vuoi evitare di utilizzare SQL?

Se si desidera ottenere informazioni su ciò che è nel vostro db, come tutti i nodi di tipo x, l'unico modo per farlo, è attraverso una query SQL, a meno che non si hanno i dati già estratto.

Una query come

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

non dovrebbe essere la cosa che rovina le prestazioni.

Modifica
Il link che hai fornito è una da Drupal 7, quindi bisogna essere stare attenti la lettura di questo. La ragione è che in Drupal 7 non solo è possibile utilizzare db_query che fondamentalmente è involucro per le funzioni php mysql_query, pg_query. E 'un po' diverso e di utilizzarlo, non dovrete usare il codice db_specific. In ogni modo nuovo in Drupal 7 è qualcosa che è un po 'come un ORM. Non ho letto su di esso in dettaglio, ma l'idea è che si può costruire una query utilizzando i comandi su un oggetto. Questo è probabilmente quello che cercate. Tuttavia, Drupal 7 non è pronto a tutto per i siti produttivi. Ci sono ancora un sacco di criticità e problemi di sicurezza. Quindi questa non sarà una possibilità per un bel po 'di tempo.

Modifica 2:
Se si desidera ottenere il titolo nodo e corpo, questo è ciò che si dovrebbe fare:

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

È possibile utilizzare db_fetch_array invece di db_fetch_object` se si desidera estrarre le matrici invece di oggetti dal db.

Altri suggerimenti

Questa è una domanda piuttosto vecchio, ma per chiunque imbattersi in questa pagina ora, in Drupal 7.x migliori prassi è quella di utilizzare query dinamiche.

Quindi, se si voleva selezionare tutti i nodi di tipo x, si potrebbe procedere come segue:

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

La variabile $ articoli dovrebbe quindi essere un array di tutti i nodi di tipo x, calettato dai nid con matrici valore impostato al titolo nodo corrispondente. Speranza che può aiutare.

Visualizzazioni è in genere il modo di creare query di database senza scrivere in Drupal, ma questa query è così semplice non sono sicuro che ne vale la pena il sovraccarico di vista di apprendimento, a mala pena 5 linee dopo aver bootstrap Drupal:

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

Devo utilizzare SQL fare per questo.

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

conta Nodo =

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

I nodi e le loro tipo:

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

Qualcosa del genere. Sto mangiando il pranzo e quindi non ho la prova che, ma ho fatto questo prima così dovrebbe funzionare. Drupal 6.

Il href="http://drupal.org/project/migrate" rel="nofollow migrare modulo potrebbero interessare. Supporta anche Drush in modo da poter cose di script abbastanza facilmente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top