A minap a webform2pdf drupal 6-os modulom drupal 5-ös átiratát készítettem, amikor belefutottam az állomány feltöltés problémájába, hogy is kell állományt feltölteni drupal 5-tel?
Az ötös Drupal kimaradt az életemből, így nem sok tapasztalatom van vele, valahogy úgy alakult, hogy a 4.7.x után nekem a 6-os Drupal jött.
Következzen akkor egy kis leírás arról, hogy töltünk fel állományt drupal 5-tel, majd nézzük meg, hogy változott meg ez drupal 6-ra.
Form függvényünkben most csak egy állományt fogunk feltölteni:
123456789101112131415161718
functionmymodule_upload_form(){// Ezt a sort ne felejtsük el megadni, mert ennek hiányában nem töltődik fel az állomány$form['#attributes']=array('enctype'=>"multipart/form-data");$form['file_upload']=array('#type'=>'file','#title'=>t('Filename'),);$form['submit']=array('#type'=>'submit','#value'=>t('Upload file'),);return$form;}
Tároljuk le a feltöltött állományt a form submit kampójában (hook):
12345678
functionmymodule_upload_form_submit($form_id,$form_values){// Itt ellenőrizzük le, hogy sikeres volt-e a feltöltés $file=file_check_upload('file_upload');if($file){// Ha sikeres volt elmentjük az állományt a megadott könyvtárba$file=file_save_upload($file,'cél_könyvtár_útvonala');}}
Eddig sétagalopp, a neheze akkor jön amikor valamilyen feltételnek megfelelő állományt szeretnénk, ha feltöltene a felhasználó. A példában várjunk egy képet, ami nem nagyobb mint 100x100 pixel, ha nagyobb méretezzük át.
A validációban megvizsgáljuk, hogy kép típusú-e az állomány, az átméretezést pedig megcsináljuk a sumbitkor.
A form előállítása változatlan. Az feltöltött állomány vizsgálatát a form validate függvényben végezzük el. A submit függvényben a képet átméretezzük, ha nagyobb mint a megengedett, majd elmentjük a megadott könyvtárba.
Validate függvény:
123456789101112
functionmymodule_upload_form_validate($form_id,$form_values){// Itt ellenőrizzük le, hogy sikeres volt-e a feltöltés $file=file_check_upload('file_upload');// Létezik-e a feltöltött állományif(isset($file->filepath)){// Megnézzük, hogy kép-e$info=image_get_info($file->filepath);if(!$info||!$info['extension']){form_set_error('file_upload',t('The uploaded file was not an image.'));}}
Submit függvény:
12345678910111213141516171819
functionmymodule_upload_form_submit($form_id,$form_values){// Ellenőrizzük le, hogy sikeres volt-e a feltöltés $file=file_check_upload('file_upload');// Létezik-e a feltöltött állományif(isset($file->filepath)){// Kép méret ellenőrzéselist($maxwidth,$maxheight)=explode('x','100x100');if($info['width']>$maxwidth||$info['height']>$maxheight){// Átméretezésimage_scale($file->filepath,$file->filepath,$maxwidth,$maxheight);// Informáljuk a felhasználót az eseményről.drupal_set_message(t('The image was resized to fit within the maximum allowed dimensions of %dimensions pixels.',array('%dimensions'=>'100x100'));}// Állomány elmentése a megadott helyre.$file=file_save_upload($file,'cél_könyvtár_útvonala');}}
Aki ismeri a drupal 6 állomány kezelését az tudja, hogy ott már adatbázisban tárolja le az állományok adatait. Adatbázis drupal 5-ben is rendelkezésre áll csak kicsit más a szerkezete, és picit más célokra szolgál. Mi magunk is írhatunk az adatbázisba, ha szeretnénk ott is tárolni az állományaink adatait. Arra azonban figyeljünk, hogy az ötös verzióban magunknak kell gondoskodni az állományok törléséről mind a lemezről mind az adatbázisból (ha használjuk).
Nézzük, hogy kell állományt feltölteni drupal 6 alatt.
Hozzuk létre a form függvényünket a következőképp:
123456789101112131415161718
functionmymodule_upload_form(){// Ezt a sort ne felejtsük el megadni, mert ennek hiányában nem töltődik fel az állomány$form['#attributes']=array('enctype'=>"multipart/form-data");$form['file_upload']=array('#type'=>'file','#title'=>t('Filename'),);$form['submit']=array('#type'=>'submit','#value'=>t('Upload file'),);return$form;}
Tároljuk le a feltöltött állományt a form submit kampójában (hook):
1234567
functionmymodule_upload_form_submit($form_id,$form_values){//Állomány feltöltéseif($file=file_save_upload('file_upload',array(),'cél_könyvtár_útvonala')){//Státusz beállítása véglegesre, ha nem tesszük meg akkor egy idő után törli a drupal az állományunk.file_set_status($file,FILE_STATUS_PERMANENT);}}
Készítsük el a fenti példa drupal 6-os változatát. A feladat várjunk egy képet, ami nem nagyobb mint 100x100 pixel, ha nagyobb méretezzük át.
Ebben az esetben nem kell validate függvényt írnunk, mert egy lépésben megtehetjük a submit részben.
12345678910111213
functionmymodule_upload_form_submit($form_id,$form_values){//Az feltöltött állomány validációs feltételei. $validators=array('file_validate_is_image'=>array(),'file_validate_image_resolution'=>array('100x100'),);//Állomány feltöltése, validációvalif($file=file_save_upload('file_upload',$validators,'cél_könyvtár_útvonala')){//Státusz beállítása véglegesre, ha nem tesszük meg akkor egy idő után törli a drupal az állományunk.file_set_status($file,FILE_STATUS_PERMANENT);}}