Frage

ich erstellen Sie einen benutzerdefinierten Import und Export, zur Zeit als externes Skript (über Bootstrap), ich plane lateron ein Modul in einer generischen Art und Weise zu erstellen.

Ich baue ein Frontend für nagios und für unsere Hostverwaltung und nagios btw Konfiguration. Vielleicht könnte es auch für andere Umgebungen nützlich werden (Netzwerkmanagement)

Jetzt muss ich wissen, wie die Liste aller Knoten des Typs erhalten x?

Ich möchte direkte SQL vermeiden.

Ein Vorschlag, den ich bekam, war ein RSS-zu machen und analysieren aber ich Acess Drupal db ein Dutzend Mal verschiedene Knoten zu extrahieren, so fühlt es sich seltsam, eine Web-Anfrage für eine Sache zu tun

Also, was ich suche als Neuling Drupal Entwickler sind nur ein Zeiger auf grundlegende Suchmodul api für diese Aufgabe

TIA florian

War es hilfreich?

Lösung

Warum wollen Sie mit SQL vermeiden wollen?

Wenn Sie Informationen über erhalten mögen, was in Ihrem db ist, wie alle Knoten vom Typ x, der einzige Weg, um es zu bekommen, eine SQL-Abfrage ist durch, es sei denn, Sie die Daten bereits extrahiert haben.

Eine Abfrage wie

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

sollte nicht die Sache, die Ihre Leistung ruiniert.

Bearbeiten
Der Link, den Sie wird auch ein von Drupal 7, so dass Sie vorsichtig sein, sein müssen, die dies lesen. Der Grund dafür ist, dass in Drupal 7 es nicht nur möglich ist db_query zu verwenden, die im Grunde Wrapper für die PHP-Funktionen mysql_query ist, pg_query. Es ist ein bisschen anders und verwendet es, pflegen Sie db_specific Code verwenden. Auch immer neu in Drupal 7 ist etwas, das ein bisschen wie ein ORM ist. Ich habe nicht darüber im Detail zu lesen, aber die Idee ist, dass Sie eine Abfrage unter Verwendung von Befehlen auf einem Objekt zu bauen. Dies ist wahrscheinlich, was Sie nach. Allerdings Drupal 7 ist auf allen für Produktionsstätten nicht bereit. Es gibt immer noch viele kritische Fragen und Sicherheitsfragen. So ist dies eine Möglichkeit für einige Zeit sein würde nicht.

Edit 2:
Wenn Sie den Knoten Titel und Körper erhalten möchten, das ist, was Sie tun sollten:

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

Sie können statt db_fetch_object` verwenden db_fetch_array wenn Sie Arrays extrahieren möchten anstelle von Objekten aus der db.

Andere Tipps

Dies ist eine ziemlich alte Frage, aber für alle, jetzt über diese Seite kommen, in Drupal 7.x Best Practice ist dynamische Abfragen zu verwenden.

Wenn Sie also alle Knoten des Typs x auswählen möchten, können Sie wie folgt vor:

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

Die Variable $ Artikel sollten dann ein Array von allen x-Typ-Knoten sein, getastet durch nid mit den Arrays Wertemenge mit dem Knotentitel entspricht. Hoffnung, dass die helfen können.

Ansichten im Allgemeinen ist, wie Sie Datenbankabfragen erstellen, ohne dass sie in Drupal zu schreiben, aber diese Abfrage ist so einfach ich bin es wert ist der Aufwand für das Lernen Ansichten nicht sicher, kaum 5 Zeilen, nachdem Sie haben Drupal Bootstrap:

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

Erhält Verwendung SQL tut dies.

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

Node Zählungen =

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

Knoten und dessen Typ:

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

So ähnlich. Ich esse Mittagessen, damit ich nicht Test tat, aber ich dies getan haben, bevor, so dass es funktionieren sollte. Drupal 6.

Die Migrate Modul können Sie von Interesse sein. Es unterstützt auch drush so können Sie Skript Dinge ziemlich leicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top