Modul greift auf Hook->db_query aber nicht auf aktuellen Datensatz? Ab wann kann ich es erreichen?
am 28.08.2012 - 14:43 Uhr in
Hallo,
bin gerade dabei ein Modul zu schreiben welches sich ans Forum ranhängt. Und zwar möchte ich zusätliche Informationen an die Tabellen ranhängen. Vorher habe ich die Tabellen mit ALTER Table um einige Spalten erweitert.
So, jetzt möchte ich bei dem Hook zum Speichern eines neuen Nodes (Threads) diese Spalte befüllen.
Tabelle forum:
1 nid int(10)
2 vid int(10)
3 tid int(10)
4 test varchar(70) utf8_general_ci (von mir hinzugefügt)
zuerst wollte ich die Methode meinmodul_node_insert($node) umschreiben das er das direkt einfügt, aber das macht ja die orginalmethode des Forums schon. Kann ich das irgendwie umgehen das dies nur mein Modul macht??
Aber naja,
jetzt gehe ich folgenden Weg. Ich ändere in meinem Hook den aktuellen Eintrag mit db_query mit update table:
function testkanickel_node_insert($node)
{
$result = db_query("UPDATE {forum} SET test =:string WHERE nid =:wert and vid=:wert2", array(':string' => 'Jeha',':wert' => $node->nid,':wert2' => $node->vid) );
}
Und das klappt nicht!!!! Komisch ist, wenn ich für nid und vid alte Werte eintrage, also die die schon in der Datenbank da sind, dann klappts!!!
Ich vermute also das das INSERT Statement der Orginalmehtode quasi zusammen mit meiner hook Methode ausgeführt wird und das er desshalb den Eintrag nicht findet?!?!?!?!?!
Muss ich in meinem Hook vorher der Datenbank sagen das Sie erstmal das SQL Statement aus der Orginalmethode ausführen soll und dann meinen????
Dank euch für eure Hilfe.
-Patrick
- Anmelden oder Registrieren um Kommentare zu schreiben
hi patrik die module werden
am 28.08.2012 - 15:06 Uhr
hi patrik
die module werden ja der reihe nach abgearbeitet
http://www.houseofding.com/2009/06/controlling-execution-order-of-drupal...
wenn also der eintrag noch nicht da ist
bevor dein modul das update ausführt
hat das vermutlich damit zu tuen...
Muss ich in meinem Hook vorher der Datenbank sagen das Sie erstmal das SQL Statement aus der Orginalmethode ausführen soll und dann meinen????
ich wüsste spontan nicht wie man das umsetzen könnte..
hmmm...
Wenn es an der Reihenfolge
am 28.08.2012 - 19:51 Uhr
Wenn es an der Reihenfolge liegt, müsstest Du das Gewicht Deines Moduls in der System-Tabelle ändern, damit es erst nach den anderen Modulen ausgeführt wird.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Vielen Dank euch. war nen
am 29.08.2012 - 10:17 Uhr
Vielen Dank euch.
war nen super Tipp. So hats jetzt geklappt:
mysql> update system set weight=-1 where name='forum';
Das war allerdings die
am 29.08.2012 - 10:43 Uhr
Das war allerdings die falsche Änderung. Du solltest nicht das Forums-Modul ändern, sondern Dein eigenes Modul. Vermutlich war Forum auf weight = 0 und Dein Modul auch. Also hättest Du Dein Modul auf weight=1 setzen sollen. Andere Module könnten davon ausgehen, das das Gewicht von Forum nach wie vor Null ist und dann ein falsches Verhalten zeigen, das sich dann niemand erklären kann.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
mysql> update system set
am 29.08.2012 - 15:03 Uhr
mysql> update system set weight=0 where name='forum';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update system set weight=1 where name='testkanickel';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql>
:)