[gelöst]Wo wird die Node gespeichert ?
Eingetragen von 1000 (764)
am 16.10.2010 - 14:01 Uhr in
am 16.10.2010 - 14:01 Uhr in
Drupal legt für einzelne Node Felder einzelne Tabellen an. Dies ist sicherlich aus Performace Gründen richtig. Ich möchte allerdings eine Volltextsuche benutzen. Dann müsste ich mit inner join mehrere Tabellen abfragen. Dies ist bei ca. 5000 Einträgen sicher nicht mehr schnell genug. Deshalb will ich diese bestimmte Node nocheinmal clonen in eine extra Tabelle. In dem Ordner node habe ich nichts finden können. Wo werden den die Node Inhalte gespeichert, so dass ich eine extra Tabelle anlegen kann??
- Anmelden oder Registrieren um Kommentare zu schreiben
Hallo Tausend, wo Drupal die
am 16.10.2010 - 14:24 Uhr
Hallo Tausend,
wo Drupal die Inhalte der CCK-Felder (ich denke du meinst die CCK-Felder) hängt auch von der Feldeinatellung ab.
Kann dieses Feld mehrfach vorkommen, ist die Struktur anders als wenn es nur einmal vorkommen kann.
Ohne Mehrfachmöglichkeit sind die Daten beim Content-Type: Tabelle content_type_deinTyp
Mit Mehrfachmöglichkeit sind die Daten beim Feld: Tabelle content_field_deinFeld
Wenn Du CCK Felder nicht
am 16.10.2010 - 14:26 Uhr
Wenn Du CCK Felder nicht doppelt verwendest ist für jeden Inhaltstyp eine eigene Tabelle vorhanden, solltest Du aber ein Feld mehrfach verwenden werden diese in die entsprechenden Einzelfelder aufgeteilt und Du brauchst viele Joins um Dir deine Inhalte zusammenzusuchen,
Hi Sense, ich war schneller
am 16.10.2010 - 14:36 Uhr
Hi Sense,
ich war schneller !!! LOL !
Ja das ist wohl so. Ich
am 16.10.2010 - 14:38 Uhr
Ja das ist wohl so. Ich meinte aber den Ort im Script. Wahrscheinlich dann in dem Ordner cck. Danke für den Hinweis !
Hehe, 2 Blöde aber der selbe
am 16.10.2010 - 14:39 Uhr
Hehe, 2 Blöde aber der selbe Gedanke ... und die richtige Antwort ... so muss das sein
Hab mir das mal angeschaut.
am 16.10.2010 - 16:21 Uhr
Und nicht zu vergessen der, der mit der richtigen Antwort nichts anfangen kann. Aber ich habe nun in einer anderen Datei webform.module die Inserts für den clone der Datenbank gemacht, um die fulltextsuche etwas zu beschleunigen. Das wird wohl funktionieren. Vielen Dank nocheinmal !
Das ist aber arg
am 16.10.2010 - 16:28 Uhr
Das ist aber arg zurechtgebogen.
Erstens: nie im Code von Modulen etwas ändern.
Zweitens: was hat das Webforms Modul mit deinem Problem zu tun?
Also ich protokolliere die
am 16.10.2010 - 16:59 Uhr
Also ich protokolliere die Änderungen in den Modulen, so dass es bei Updates eigendlich keine Probleme gibt. Das Webform Modul legt beim erstellen von Nodes bestimmter Contetnttypes automatisch webforms an. Der Trigger ist also genau der gleiche, den ich benötige. Beim Erstellen einer neuen Node soll ein Clone der Felder gemacht werden, die bei der Suche durchsucht werden. Es geht nur um die Suche. Das Logo z.b. werde ich einfach per select aus der bestehenden Datenbank holen. Der Vorteil ist, dass es ein mehrfaches an Suchanfragen gibt im Verhältniss zu den inserts. Da ich dann bei dem Suchalgorithmus auf etwas umfangreichere joins verzichten kann wird die Suche schnell. Das wird auf jeden Fall so funktionieren. Ansonsten hätte ich 5 Tabellen per join vereinen müssen. Dann ist das ganze einfach zu langsam.
Shit, der Fall in dem die Node geupdateted wird habe ich leider nicht bedacht. Muss es wohl doch anders machen.
Das Problem ist ich möchte mehrere Felder durchsuchen (bestimmter contnent types) mal als volltext mal nicht. Das kann ich meines wissens nach so individuell nicht mit der bestehenden drupal Suche umsetzten.
Wird die node denn in der cck.module gespeichert und geupdated? Dann könnte ich den Code da reinschreiben. Ich steig da nur teilweise durch.
Seit wann legt das Modul
am 16.10.2010 - 17:05 Uhr
Seit wann legt das Modul webform - http://drupal.org/project/webform - beim Erstellen von Nodes bestimmter Inhaltstypen, Formulare an?
Und wenn es dir nur um einen Trigger geht, den du benötigst, um bestimmte Dinge aufzurufen wie z.B. eigene Funktionen, dafür gibt es hooks.
Ich denke dein Problem löst du am Besten mit eigener Programmierung unter zuhilfenahme des hooks hook_nodeapi.
Ich habe es ein wenig
am 16.10.2010 - 17:35 Uhr
Ich habe es ein wenig modifiziert. Bei mir werden automatisch webforms angelegt. Da habe ich nun den Code versucht hinzuzufügen. Leider funktioniert es nur im Falle der erstmaligen Speicherung. Die hook_nodeapi könnte da vielleicht helfen. Ich schau mir das mal an. Vielen Dank für den Hinweis.
Scheint wirklich eine Schlüsselfunktion von Drupal zu sein. Ich verstehe es noch nicht so ganz. Aber kann ich damit einen Abfrage machen wie:
if (hook_nodeapi == update)...
Das würde das Programmieren echt beschleunigen und wirklich vereinfachen.Nein! Ein Hook ist eine
am 16.10.2010 - 18:14 Uhr
Nein! Ein Hook ist eine PHP-Funktion, die einer definierten Namenkonvention folgen muß. Dabei wird der "hook" durch den Namen des Moduls ersetzt, das den Hook implementiert (Ein Hook entspricht einem Interface bei Java). Wenn Du ein Modul namens "mein_modul" schreibst, ergibt sich beim hook_nodeapi damit "mein_modul_nodeapi" als Funktion, die Du programmieren mußt.
Drupal prüft bei allen installierten Modulen, ob eine solche Funktion existiert und ruft sie beim Zusammenbau des Node-Objektes auf. In der API Dokumentation auf drupal.org kannst Du nachlesen, mit welchen Parametern Drupal diese Funktion aufruft, und was von dieser Funktion als Rückgabewert erwartet wird. Du kannst damit eigene Information in das Node-Objekt einbauen.
Für die intensive Einarbeitung in solche Sachverhalte empfehle ich das Buch "Pro Drupal Development".
Beste Grüße
Werner
Werde mich damit mal etwas
am 16.10.2010 - 18:54 Uhr
Werde mich damit mal etwas intensiver beschäftigen. Vielen Dnak für die Tipps !
Also, ich habe es geschaftt
am 17.10.2010 - 14:25 Uhr
Also, ich habe es geschaftt den hook_nodeapi dazu verwenden, um beim Insert oder beim Update Daten in die Datenbank zu schreiben. Das funktioniert schoneinmal ganz gut bei
$node->nid
$node->created
$node->title
Nun möchte ich aber auch andere Felder einfügen. Das funktioniert leider nicht.Wenn ich z.b:
$firma=print $node->field_firmainstitution[0]['view'];
setzte um den Inhalt in die neue Datenbank einzufügen, dann wird dort lediglich eine 1 reingeschrieben. Ich bekomme die Werte für den Body und den anderen angelegten Feldern einfach nicht in die Datenbank Kopiert, da ich nicht weiss wie die Variablen zu beziffern sind.
Ok, habe es nun geschafft.
am 17.10.2010 - 14:43 Uhr
Ok, habe es nun geschafft. Habe die Variablen nochmal mit Hilfe des Moduls Content Template ausgelesen. Jetz funktioniert es. Dank nochmals !!!
1000 schrieb $firma=print
am 17.10.2010 - 14:48 Uhr
$firma=print $node->field_firmainstitution[0]['view'];
kann nicht gehen da ist $firma der Rückgabewert der Funktion "print"
$firma = $node->field_firmainstitution[0]['view'];
//oder
$firma = $node->field_firmainstitution[0]['value'];
sollte gehen
Alles ist soweit gelöst. Ich
am 17.10.2010 - 17:25 Uhr
Die anderen Variablen konnte ich mittels:
$searchwords= $node->body;
$company= $node->field_a100[0]['value'];
$einsatzort= $node->field_einsatzwort[0]['value'];
speichern
Im Location-Modul giubt den
am 17.10.2010 - 17:26 Uhr
Im Location-Modul giubt den Hook locationapi:
<?php
function location_locationapi(&$obj, $op, $a3 = NULL, $a4 = NULL, $a5 = NULL)
?>
damit solltest du wie mit Node-Api deine Sachen auslesen können