Sziasztok!
Szeretnék egy olyan modult csinálni, ami egy csv fájl mezőit betölti egy adott tartalom típus megfelelő mezőibe. A node_import modul pont ezt csinálja, csak új node-okat hoz létre. Picit átrtam, a node-ot megcsinálja szépen, de a node_save() nem csinál semmit. A CCK mező nem mentődik el.
Gondoltam megpróbálom direktbe:
$nid = 10;
$node = node_load($nid);
$node->cck_mezo_neve[0]['value'] = 'teszt';
node_save($node);
node_load($nid); // és itt már a régi node-ot adja vissza
Keresgéltem, de nem találom, hogy hogy kéne működnie a CCK save-nek.
Tud valaki segíteni?
Melyik modulhoz, modulokhoz kapcsolódik a téma?:
Drupal verzió:
Fórum:
nem értem a kérdést
Mit kellene visszaadnia? Ha megcsinálja a node-ot akkor miből gondolod, hogy a node_save() nem csinál semmit? Nekem nem világos a kérdés, lépésenként írd le, hogy mit csinálsz, milyen eredményt vársz, helyette mi történik.
Tényleg félreérthető volt. A
Tényleg félreérthető volt. A "node-ot megcsinálja szépen" alatt azt értettem, hogy a node_save() előtti sorban a $node objektum tartalmazza a csv-ből kiszedett értéket a megfelelő CCK mezőben.
Aztán jön a node_save($node) amitől azt várnám, hogy mentse is el az értéket, tehát az utánna következő node_load() az elmentett node-omat adja vissza.
Viszont a node_load() a változtatás előtti node-ot adja vissza. Odáig eljutottam, hogy a cck text mező text_field() függvényébe az 'update' lefutása után még a helyes node érték van, szóval valahol később kell megváltoznia.
cache
Van egy ilyen okosság a Drupalban, hogy betárazza a node-okat, tehát ha egy oldalon többször hívod be ugyanazt a node-ot, akkor csak először jön az adatbázis node, stb. táblájából, a második és minden további hívás már a gyorstárból keresi elő a lementett értéket. Ezért van az, hogy a második node_load() is az első értéket adja neked vissza. Ki kell lépned a programból a második node_load() előtt ahhoz, hogy friss $node példányt kapj.
Esetleg a második betöltéskor
Esetleg a második betöltéskor a $revision és a $reset paraméterekkel lehet játszadozni, így már az új példányt kapja vissza.
Üdv: Zoli
Nincs valami parancs, amivel
Nincs valami parancs, amivel törölni lehet a cache-t?
devel
Használd a devel modult, sok hasznos dolgot tud, többek között a menüjében van egy "Empty cache" pont is.
http://drupal.org/project/devel
- - -
Juhász Márton
http://juhaszmarton.hu
megnézem, köszi!
megnézem, köszi!
reset
crt-nél van a jó megoldás, használd a második híváskor a $reset-et. A Devel modulban az Empty cache link nem erre való.
Drupal 6-ban így
Lehet hogy D5-ben is így volt
igen, elvileg 5-ben is így van
Az alábbi teszt kódot készítettem: (a d() debug fv. kiírja az objektumok értékét)
A node_load() utáni és a node_save() előtt $node objektumok ennyiben különböznek:
$ diff -u a b
--- a 2008-11-23 22:55:28.000000000 +0100
+++ b 2008-11-23 22:55:41.000000000 +0100
@@ -34,7 +34,7 @@
(
[0] => Array
(
- [value] => 11111
+ [value] => 12345
)
[label] => Ár:
tehát csak a value értéke változott, semmi más.
Miután lefut a node_save() a teszt node minden mezőjének értéke törlődik és a mező nevek kezdőbetűjét tartalmazza, tehát valamit elment, csak rosszul.
sőt
$node = node_load(63);
$node = node_submit($node);
node_save($node);
és kitörli a mezőket a node-ból :(
node_submit minek?
Minek kell a node_submit(), ha úgyis te állítod össze a $node tartalmát? Csak mentsd le node_save()-vel és jó lesz.
Sajnos nem működik úgy sem.
Sajnos nem működik úgy sem. Megcsinálom sima SQL-el. Gány megoldás lesz, de legalább működő.
revision?
ha beállítod a $node->revision értékét TRUE -ra (ezt hogy ragozzuk? truera vagy truere?:) akkor készül csak új verzió. volt nemrég egy téma ezzel kapcsolatban, most nem találom hirtelen.
ha beállítod azt, hogy új verzió jöjjön létre, akkor se ok?
-
clear: both;
Már nem emlékszem hogy miért
... de kell a node_submit().
Én is csináltam olyat, hogy programból node létrehozás, és node_submit() nélkül nem működött. (Erre viszont emlékszem, mert szívtam vele sokat)
A drupal_execute() is használható, de nekem nem volt jó mert batch process-en belül kellett a node létrehozás.
működik
Pár százezer node-ot létrehoztam már CSV-ből ezzel a módszerrel.