Node per Skirpt bearbeiten, seltsamer Seiteneffekt!?
am 26.07.2008 - 02:14 Uhr in
Hallo,
ich bin gerade dabei für ein Import-Skript eine Möglichkeit zu finden, Werte in einem Node zu aktualisieren, bzw einen neuen Node anzulegen.
An sich dachte ich ich hätte es soweit zusammen bekommen das ich der meinung war : Hey ich habs in ner einfachen Version so wie ichs brauche ...
Aber irgendwie hab ich nen Seiteneffekt, den mir mal jemand erklären könnte.
Also ich hab nen Inhaltstyp 'tester', was nix anderes is als ne Page + CCK Textfeld namens field_testfield.
nun suche ich mir einen passenden Node mittels suche, schnapp mir den Node, ändere das Feld und speicher den Kram (siehe Code unten).. wieso verändern sich nun werte wie body; content:body:value ; content:body:children ?
Dort steht quasi sowas wie ne historie drinne, die aber auch auf der Seite (offensichtlich unsichtbar) ausgegeben wird...
Was mach ich da falsch?
Anbei der Code .. nein kein Produktiv-Code, is nur um zu erfahren tuts oder tuts nicht :
<pre>
<?php
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$results = module_invoke('node', 'search', 'search', 'Test');
$node = $results[0]['node'];
$node->field_testfield[0]['value']='Test1';
node_save($node);
?>
</pre>
Über den Tipp wo ich da noch nen anfänger-denk-fehler hab würde ich mich freuen.
- Anmelden oder Registrieren um Kommentare zu schreiben
Also $node->content wird von
am 26.07.2008 - 09:50 Uhr
Also $node->content wird von CCK generiert um den Inhalt samt Felder anzuzeigen, das sind dann meistens schon die formatierten Angaben.
Du musst aber eigentlich den Umweg gar nicht über module_invoke gehen. Stattdessen kannst du node_load() nutzen, somit bekommst Du ein node-Object, dass so direkt auch wieder abgespeichert werden könnte.
Also kann ich die
am 26.07.2008 - 15:14 Uhr
Also kann ich die Veränderungen im $node->content an sich ignorieren, sofern ich die Ausgaben gar nicht dadrüber mache, sondern über selbst gethemete Listen / Node-Seiten!?
ok.. ich hab jetzt auch nochmal in die node_load() Api-doku reingeguckt ... da wäre ich ja mein lebtag nicht drauf gekommen das ich da ne Suche drüber laufen lassen kann..
Stellen sich mir spontan 2 Frage :
1. wie muss der $params Parameter bei einem CCK-Feld gebaut sein
2. (für hier nciht relevant, aber der Neugierde wegen).. was macht node_load wenn es mehr als einen Treffer liefern müßte?
Und noch ne performance Frage hinten dran..
Mit meinem module_invoke Aufruf greife ich ja auf das search module zu... Da das Modul ja indexe benutz, ist das nicht dennoch schneller als ne normale DB-Abfrage gegen die nodes Tabelle abzusetzen?
Ich kann mir Szenarien vorstellen wo die Prüfabfragen in die 10.000e gehen.. da wäre es schon relevant was auf Dauer besser wäre als Weg.