hook_noodapi validate és insert/update

k.dani képe

Hello!

Egy olyan modult fejlesztek, amelyhez kell fájlfeltöltés, és annak ellenörzése, hogy a fájl megfelelő tartalommal rendelkezik-e. Ezt úgy oldottam meg, hogy validáláskor feltöltöm a fájlt, megnyitom, és végigmegyek a tartalmán. Ha nem megfelelő, törlöm a fájlt(adatbázisból, meg ideiglenens mappából is), ha viszont megfelelő, akkor továbblépnék az létrehozás/módosítás esetre, de itt kezdődnek a problémák...sajnos nem érem el azokat a változókat, amikre szükségem lehet...mivel validáláskor nem írok semmit adatbázisba, így az insert/update esetben csak a $node-ot érem el és nem tudom, hogy melyik a hozzákapcsolódó fájl...
Esetleg a validáláskor is írjak már az adatbázisba? Vagy van valami szebb megoldás?

Drupal verzió: 
k.dani képe

Validáláskor még nem tudom az újonan létrehozott node azonosítóját, szóval, az ötlet, hogy validáláskor mentsek el néhány adatot az adatbázisba, az nem jó megoldás...próbálom vizsgálni, hogy milyen változókat érek el egyes régiókban, de nem sikerült még megoldanom a problémát! Esetleg valami javaslat?

0
0
Gonda János képe

Az előnézet kötelező tételével meg lehet oldani szerintem.

0
0

Gonda János

k.dani képe

Nálam azért nincs előnézet, mert az adatbázisból jelenítem meg a node-omat, márpedig akkor előtte fel kéne töltenem azt...vagy a presave-re gondolsz? ott meg az a baj, hogy még nincs node azonosító, ha egy új node-ot hozok létre...
A lényeg az lenne, hogy van egy fájl, aminek a tartalmát átvizsgálom(feltöltöm, megnyitom olvasásra). Eddig nincs is probléma. Ha nem jó, hibaüzenetet küldök, és törlöm a fájlt, ha viszont jó, akkor jönne az 'insert' v. 'update' opció, elmenteni a fájl tartalmát az adatbázisba(ez még nem működik, mert nem tudom, melyik fájl tartozik a node-omhoz)
Igaziból annyit szeretnék elérni, hogy valamilyen változóban el tudjam menteni a feltöltött fájl azonosítóját a 'validate' opció alatt úgy, hogy azt el tudjam érni majd az 'insert' opció alatt a hook_nodeapi-ban. A $form_state-tel próbálkozom ezt megoldani, de nem akarja az igazságot...:S

0
0
Gonda János képe

oda feltölteném az ellenőrizni kivánt tartalmat. Átvizsgálva vagy beküldöd vagy törlöd.
Az is lehet, hogy nagyon nem értem a problémát:)

0
0

Gonda János

k.dani képe

Az első modulom, úgyhogy valószínűleg az én készülékemben van a probléma :)
Ha lehet, kihagynám az előnézetet, persze azt nem tudom, hogy enélkül megoldható-e a problémám, csak nekem kézenfekvőbbnek tűnik az, hogy valahogy átpasszoljam egy változóban a szükséges adatot. Nem tudok nodeapi-n belül valami változót létrehozni, aminek a 'validate'-ban adok értéket, és az 'insert'-ben olvasom ki?
Gondoltam arra, hogy esetleg a $form_state-be mentem el, és majd onnan elérem, de mintha a $form-state se lenne elérhető...
A neten se találok rá megoldást, vagy csak nem látom a fától az erdőt...:)

0
0
k.dani képe

Természetesen az én figyelmetlenségemnek köszönhető, de az upload modul-t használtam a fájl feltöltésere, de létrehoztam egy külön form-ot erre a célra(fájl feltöltésére), ami viszont nem mentett el semmit az upload táblába, így onnan nem tudtam kinyerni az információkat!
De hiba javítva, és mostmár műxik:)

0
0
york képe

Eleg zavaros amit irsz.
En mar hanyagolnam az upload modult (d7 mar nem is lesz).
Miert nem irtal egy filefiled alapu file feltoltest?

0
0
k.dani képe

Azért az upload modult használtam, mert a core-hoz tartozik, úgy gondoltam, hogy ez lesz a megfelelő a számomra. De utánanézek, amit irtál és meglátjuk:)
Amúgy bocs, ha zavaros, még nekem sem teljesen tiszta, hogy melyik függvényből milyen változokat lehet elérni.

0
0
k.dani képe

Most megpróbálom összeszedni a gondolataimat és értelmesen leírni a problémámat.
Tehát kell egy form, amivel feltöltöm a fájlt:

...
$form['#attributes'] = array('enctype' => 'multipart/form-data');
$form['file'] = array (
  '#type' => 'file',
  '#title' => 'upload'
);
...

aztán a hook_nodeapi-ban a validate-ben feltöltöm a fájlt:
...
$result = file_save_upload('file','',file_directory_temp());
...

ellenörzöm a fájl tartalmát, ha nem megfelelő, törlöm azt, ha megfelelő, akkor
szeretném elérni a fájlt a hook_nodeapi insert-ből, de nem tudom, hogy honnan kaphatnám meg a fájl azonosítóját. A $result->fid-re lenne szükségem, de sajnos az insert-ből már nem érem el a változót. A lényeg, hogy olvasásra nyitnám meg újra a fájlt, hogy fel tudjam tölteni a tartalmát az adatbázisba. Honnan tudnám megszerezni ezt az értéket?
(ez most független az upload modultól, csak magát a problémát próbáltam leírni)
0
0
pp képe

Én az Upload element modult szoktam erre használni. http://drupal.org/project/upload_element

Picit gyorsabb vele a fejlesztés, de ha igazi kihívásra vársz akkor hajrá.
a $_FILES tömbben lehet elérni sok adatot az adott fájlról.

0
0
k.dani képe

köszi a segítséget! Mivel nem akarok semmilyen contrib modult felhasználni a modulomhoz, ezért nekiesek inkább a $_FILES tömbnek:)

0
0
york képe

k.dani képe

Sikerült kinyernem a fájl nevét a $_FILES['files']['name']['form_neve']-ből, ahol a form_neve annak a formnak a neve, ahol a fájlt feltöltjük.

0
0