Az 5.1-es Drupal alá szeretnék importálni dolgokat (HTML táblázatból adatok), amelyeket már az alábbi formára hoztam (XSL-lel):
AddNewNode("node title","field1","field2","tax1","tax2","taxn");
Már "csak" a fenti fv-t kellene megírnom ;-) Ennek az lenne a feladata, hogy egy új node-t rögzítsen a rendszerbe (ami egy saját típus, tehát csak azt kell kezelnie) a megadott névvel és mezőkkel, valamint a felsorolt taxonomy termeket is hozzárendeli, ha nincs még ilyen term, akkor létrehozza. A termek egy taxvoc-ban vannak. Ehhez keresgéltem példakódot a drupal.org-on, még nem találtam. Van valakinek vmi kis példakódja? Hogy tudok node-t kódból felvinni ill hogy tudom megnézni van-e már egy term, ill hogy tudok termet felvinni?
Máshogy megfogalmazva, hogy tudom kódból szimulálni a kitöltött node készítő formot és az elküldését?
Köszi!
node_save
Ajánlom a node_save függvényt kiindulásnak.
pont ma
Pont ma néztem ezt a kis drágát (node_save), de nem tudtam rajta kiigazodni. Végül egy sima php szkripttel rámoltam be az "esemény" rekordokat az adatbázisba: node, event, node_comment_statistics, node_revision, term_node és a sequences tábla nid értékének korrigálása. Remélem, nem hagytam ki semmit...:)
Mindenesetre ha valaki talál gyakorlati példát node_save alkalmazására, legyen szíves ossza meg velünk.
4.7-ben kb így
4.7-ben kb így volt.
nem próbáltam, de kb jó ;)
Palócz István
https://palocz.hu | https://tanarurkerem.hu
Ez nagyon jó volt,
Ez nagyon jó volt, köszi!
Kéne még sok ilyen.
blast
eddig rendben
MrPrise-nak valami CCK-s színezetű problémája van, nekem Event-es volt. Az a $node->nemtudommi lehet contrib modul által meghatározott mező is? Nekem úgy tűnt, hogy nem, de lehet, hogy nem látok a szememtől...
Már nem először néztem ezt a node_save()-et, de pár perc után mindig feladtam és maradtam a sima mysql_query() megoldásnál, mert olyan még sose volt, hogy valami zűr ne lett volna. Például most amerikai szerveren közép-európai időre beállított Drupal — Amerikában a nyári időszámítás eddig április első vasárnapjától október utolsó vasárnapjáig tartott, 2007-től március második vasárnapjától november első vasárnapjáig, Európában március utolsó vasárnapjától október utolsó vasárnapjáig — ettől az Event modul kissé kiakadt :) meg én is :), és nagyon figyelni kellett, hogy mikor mit csinál a ciklus. A Drupal függvények használata (számomra) teljesen áttekinthetetlenné tette volna a programot.
pedig elvileg ezzel egyszerűbb ;)
A node_save szépen végighívja az összes nodeapi hook-ot, a form_alter-es megoldásokkal nem tudom mit csinál. gyanítom ott elhasal. Tehát ha a modul nodeapi-n keresztül működik akkor ez a megoldás jó, ha form alterrel akkor nem.
Sem a cck, sem az event modult nem ismerem ilyen mélységig. Eddig csak saját moduloknál/tartalom típusoknál volt szükségem erre, főleg előző adatok migrációja miatt.
a nemtudommi azért nem tudom mi, mert ott az egyes tartalom típusoknál jellemző adat kell, hogy belekerüljön. (valamikor majd belekukkantok az eventbe, de az se ma lesz...)
pp
(bocs, de a második mondatod nem tudtam feldolgozni, a szemantikus értelmezőm kiakadt.) ;)
Palócz István
https://palocz.hu | https://tanarurkerem.hu
második mondat
Erre a mondatra gondoltál? Az Event modul event táblájának event_start, event_end, timezone mezőjére vonatkozott. Mert ha ez menne, az szuper lenne:
De szerintem nem megy.
P.s.: Pedig nodeapi.
P.p.s.: Úgy tűnik, bug volt. Frissítettem a legfrissebb verzióra és most ha jól látom megy.
időzavarra gondoltam
nem mondat, hanem bekezdés...
Palócz István
https://palocz.hu | https://tanarurkerem.hu
mysql_query
Nekem is hasonlo gondom van és mar teljesen gubanc a kod (es persze nem azt csinalja amit szeretnek), lehetne egy egyszeru peldat erre a mysql_query megoldasra? JS-ben benne vagyok de nem ismerem a PHP-t, meg hogy mit hova kell menteni a Drupal adatbazisban. Köszi.
tömb...
A tartalmat tömbbe rendezed, megnyitsz egy kapcsolatot az adatbázis felé, foreach ciklussal végiglépegetsz a tömbön, és beírod az értékeket az adatbázis táblákba:
Tömbbe rendezés, adatbázis kapcsolat megnyitása, (karakter-kódolási problémák), foreach ciklus, időbélyeg ($most) lekérdezése : Weblabor fórum.
Ezt ne!
Bocs Edit, de ezt inkább ne javasoljuk egy kezdőnek ;)
- a node-ot így nem lehet felvenni, mert a sequences tábla nem frissül.
- nem hajtódnak végre a bekapcsolt modulok spec funkciói amiben ugye van node-api
- Nem alapértelmezett node típust így nem lehet létrehozni
- mi van, ha tábla prefixet használ? akkor ez a kód nem fog működni
- nem véletlenül van db_query ha már hekkerkedünk ;)
- mi van akkor ha a $cim így néz ki: I'm ready -> megfekszik a legkérdezés http://hu.php.net/mysql_real_escape_string
- nem véletlenül van db_query ha már hekkerkedünk ;)
Mivel itt arról van szó, hogy emberünk instant megoldást keres és nem szeretné (most) megtanulni a PHP-t ezért bátorkodom szólni, hogy az én általam javasolt megoldást használja, bár tudom, hogy isszonyú bonyolultnak tűnik. (nekem is kerekedett a szemem amikor megláttam, elkellene rá egy kódszépítő ;))
Amennyiben tanulásról lenne szó természetesen jó megoldás lenne. Többek között én is így tanítok, hogy olyan kóddal kezdünk ami működik és sorra fedezzük fel benne a hibákat. (önállóan vagy kis segítséggel) Mivel a tanulás folyamata az első, ezeket a hibás kódokat aztán szépen kikukázzuk és mosolygunk egyet rajta közösen, hogy hát igen... a kedző szerencséje, hogy működtek egyáltalán. Belátjuk mennyire nem érdemes ilyen úton elindulni egy fejlesztés során.
Kezdetben én is adatbázisba nyúlkáltam közvetlenül, aztán rájöttem, hogy mennyire nem jó szemlélettel közelítettem meg a dolgot. A Drupal-nak van egy csodálatos API felülete ami nem utolsó sorban nagyon szépen van dokumentálva.
Viszonylag könnyen lehet benne keresni, hisz az adott modulhoz kapcsolódó fügvények mindig az adott modul nevével kezdődnek(node_, taxonomy_), a drupal core függvények pedig.. na gyerekek ki tudja megmondani? .. igen, igen "drupal_" szóval kezdődnek.
Talán nem tűnik önfényezésnek, hogy a fent vázolt feladatból a kategória létrehozását még sose csináltam, kizárólag a kézikönyv alapján írtam a kódot mindenfajta tesztelés nélkül. Most vagy én vagyok király vagy a leírás nagyon jó. ;)
pp
Palócz István
https://palocz.hu | https://tanarurkerem.hu
mi volt a kérdés
A kérdés azza kezdődött, hogy mi van akkor, ha nem akarja az API-t használni. Hogy miért nem, az az ő dolga (lentebb meg is indokolja).
Pont azért nem másoltam be teljes működő kódot, hogy ne lehessen ész/gondolkodás nélkül ráereszteni az adatbázisra.
megvan
Koszi sikerult. 9015 node megvan :))
@pp:
Csak egy kis utjelzot akartam hogy megis merre induljak, erre jo volt.
Edit korabban irta, hogy a sequencest javitani kell. Csak nid-et irta de magamtol is rajottem hogy a revision_videt is kell.
A foreachen belul 14 helyen kellett if-et, belso fort vagy foreachet hasznalni. Az API biztos szep es jo de olyan gubanc lett belole hogy a vegen nem tudtam a sajat kodomban kiigazodni.
Koszi mindenkinek megegyszer.
baangyuri
Ez nagyon jó!
Na, most jutottam idáig, hogy ezt kipróbáljam. Örömmel tapasztaltam, hogy működik 5.1-gyel is! Köszönöm szépen!
Szerk. Most próbáltam a taxonomy részt is. A fenti példában engem félrevezetett a taxonomy_name változó. Pontosabban a megjegyzés felette, miszerint az a szótár neve, pedig az maga a term.
Több taxonomy term egy node-hoz?
Több termet is szeretnék megadni egy-egy node-hoz. A fenti kódból kiszedtem a term megadása részt, viszont ha ezt többször hajtom végre, akkor mindig csak az utolsó term marad meg a node-nál. Hogy tudom ezt megoldani?
Megoldás?
Közben úgy néz ki megtaláltam a megoldást:
Használata (a node_save() után kell hívni):