Űrlap modul létrehozása szobafoglaláshoz

kkwx képe

Hellósztok
Le kéne programoznom egy modulban egy űrlapot (szobafoglalási modul), úgy hogy bizonyos mezők, csak bizonyos felhasználótípusok láthassanak (vagyis több / más értékek jelenjenek meg a be és a be nem jelentkezett felhasználóknak). Utána pedig majd egy felület kell ahol a saját foglalásokat kezelhetik a felhasználók, és egy ahol az admin/moderátorok kezelhetik a beküldött foglalásokat.
Nagyjából ennyi lenne a feladatom összefoglalva, de még elég amatőr vagyok így nem egyszerű. Ott tartok, hogy megcsináltam az installálást, és a MODULE fájlban elkezdtem megvalósítani az űrlapot:

function reserve_init() {
	// drupal_set_message(t('Drupal modulom.'));
}
function reserve_myform() {
  $form['firstname'] = array(
    '#type'=> 'textfield',
    '#title' => t('First name'),
    '#required' => TRUE,
  );
  $form['lastname'] = array(
    '#type'=> 'textfield',
    '#title' => t('Last name'),
    '#required' => TRUE,
  );
  $form['radio'] = array(
    '#type' => 'radio',
    '#title' => t('Sex'),
    '#default_value' => 'Male',
    '#options' => array(
      1 => 'Male',
      2 => 'Female',
    ),
    '#description' => t('Please choose an option.'),
  );
  return $form;
}

Csak itt nem tudom, hogyan tovább. Mit kell ahhoz csinálni, hogy meg is jelenjen a weblapon az űrlap? Milyen függvényeket kell még ehhez írni a modulba, és utána, hogyan jelenítem meg a weboldalon, akár tartalomtípusként vagy bárhogy? Nincs esetleg véletlenül egy magyar nyelvű leírás erről, hogyan hozzunk létre űrlapot? Valami hasonló, mint a "Drupal Modul készítése egyszerű" leírás, mert az valami nagyon hasznos volt :).

Előre is kösz minden segítséget :)

Drupal verzió: 
Lavjaman képe

A megírt form-odat valahol meg kell jelenítened.
Pl: csinálsz egy hook_menu()-t az alábbi struktúrával:

/**
 * Implementation of hook_menu().
 */
function reserve_menu() {
  $items = array();
 
  $items['reservation'] = array(
    'title' => 'Foglalás',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('reserve_myform'),
    'type' => MENU_NORMAL_ITEM,
    'access arguments' => array('access content'),
  );
 
  return $item;
}

Ahhoz, hogy működjön a frissen létrehozott menü, látogasd meg mentés után az admin/build/modules oldalt.

btw: sok lehetőséged van a form-ok kezelésére. Pl: system_settings_form függvény, bár esetedben érdemes saját submit függvényt írni hozzá.

a jogosultságkezeléssel kapcsolatban, pedig olvass utánna a hook_access függvénynek.

0
0

*----*----*

$node ? 'alma' : 'bor'

*----*----*

kkwx képe

kösz, utánanézek a hook_access-nek, és már aktiváltam a modult a modulok között, csak az érdekelne, hogy utána, hogyan tovább? nincs valami magyar nyelvű leírás a system_settings_form-hoz vagy a submit függvényhez? vagy elmagyarázná valaki? vagy ami talán legegyszerűbb lenne: nincs véletlenül egy ehhez hasonló modul, amiből tudnék puskázni? :)

0
0
Lavjaman képe

nem a hook_access-t akartam írni, hanem a hook_perm-et.
bocs még egyszer.

Magyar tutorialokat nem tudok, szóval ebben nem tudok segíteni :/

0
0

*----*----*

$node ? 'alma' : 'bor'

*----*----*

kkwx képe

semmi gond, akkor a hook_perm-nek nézek utána :)

0
0
kkwx képe

és arról nincs valami leírás (akár angol), hogyan kell a submit függvényt írni? vagy valami ilyesmi? és hogyan hívom meg utána a függvényt / űrlapot, vagy ágyazom bele egy oldalba, esetleg tartalomtípussá kéne alakítanom?

0
0
Paal képe

Nem válasz a kérdésedre, csak egy tipp. Szerintem létezik már az (bár igaz, hogy még csak béta), amit meg szeretnél valósítani:

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

kkwx képe

ez nagyon jól jön, tudok belőle puskázni és ötleteket meríteni :)
kösz :)

0
0
kkwx képe

ú, mégse :(, ez nagyon jó kis modul és hasznos. fel is használnám ezt a weblapon ha nem az lenne a feladatom, hogy írjak egy modult :(, így még mindig az űrlap megjelenítésével bajlódok :(...

megírtam a modult (remélem jól), majd aktiváltam a modult a weblapon, de megjeleníteni nem tudom :(. olvastam neten, hogy a "drupal_get_form()"-al vagy a "drupal_execute()" funkciókkal lehet csinálni, de nem teljesen értem a működésüket, hogy ezeket hova írjam, miket kell meadni paramétereknek ($form_id, &$form_state...) és utána hol jelenik meg az űrlap?

Bocs ha nagyon idióta dolgokat kérdezek, csak sajnos nem nagyon találtam használható magyar leírást, pedig hasznos lenne a modulírás / űrlapcsinálásról valami ami elmagyarázná a dolgokat :( (vagy lenne egy sima űrlap modulra példám :) ), persze tudok angolul, de olyan szinten nem, hogy teljes mértékben megértsem a leírásokat...
Szóval kösz előre is minden segítséget :)

ez a kódom a modul fájlban:

function room_reserver_init() {
	// drupal_set_message(t('Drupal modulom.'));
}
function room_reserver_myform() {
  $form['firstname'] = array(
    '#type'=> 'textfield',
    '#title' => t('First name'),
    '#required' => TRUE,
  );
  $form['lastname'] = array(
    '#type'=> 'textfield',
    '#title' => t('Last name'),
    '#required' => TRUE,
  );
  $form['radio'] = array(
    '#type' => 'radio',
    '#title' => t('Sex'),
    '#default_value' => 'Male',
    '#options' => array(
      1 => 'Male',
      2 => 'Female',
    ),
    '#description' => t('Please choose an option.'),
  );
$form['submit'] = array(
  '#type' => 'submit',
  '#value' => t('Elküldés'),
);
  return $form;
}
function room_reserver_menu() {
  $items = array(); 
  $items['reservation'] = array(
    'title' => 'Foglalás',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('room_reserver_myform'),
    'type' => MENU_NORMAL_ITEM,
    'access arguments' => array('access content'),
  ); 
  return $item;
}
function room_reserver_page() {
  return drupal_get_form('room_reserver_myform');
}
0
0
Lavjaman képe

A hook_menu-ben a page callbacked egy függvény, a drupal_get_form, az argumentuma pedig a room_reserver_myform.

Tehát a formodat a hook_menu-ben definiált útvonalon láthatod: reservation. A drupal ezeket alapból a navigation menübe helyezi.

A beküldés kezeléséhez pedig tudsz megadni függvényt a következő formában:

$form['#submit'] = array('mymodule_form_submit_handler');

utánna csinálsz egy függvényt a #submitban megadott névvel, a paraméterei a $form, &$form_state

a room_reserver_page függvényedet pedig sehol se hívod meg :)

0
0

*----*----*

$node ? 'alma' : 'bor'

*----*----*

kkwx képe

nagyon jó leírás :), csak valami gond volt először mert ezt írta ki:

warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'room_reserver' was given in C:\wamp\www\site\includes\form.inc on line 372.

de csak először írta ki, most már nem, aztán beírtam a "function room_reserver_myform() {}"-ba egy "$form['#submit'] = array('room_reserver_form_submit_handler');" sort, végül beírtam egy oldalba, hogy:

$output = drupal_get_form('room_reserver_myform');

hibát nem jelez, de nem is jelenik meg semmi, és a navigation-ben sem jelenik meg semmi új :(, mondjuk ez a rész kimaradt: "utánna csinálsz egy függvényt a #submitban megadott névvel, a paraméterei a $form, &$form_state", konkrétan nem tudom, hogy kéne csinálni :(, elég béna vagyok :(

0
0
Lavjaman képe

gondolom azt a hook_menu-t egy az egybe bemásoltad. Lemaradt a végén egy 's' a return-nél :)

/**
  * Implementation of hook_perm().
  */
function reserve_perm() {
  return array('access reservation form');
}
 
 
/**
  * Implementation of hook_menu().
  */
function reserve_menu() {
  $items = array();
 
  $items['reservation'] = array(
    'title' => 'Foglalás',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('room_reserver_myform'),
    'type' => MENU_NORMAL_ITEM,
    'access arguments' => array('access reservation form'), //így csak az fér hozzá, aki benne van abban a csoportban, amelyikre engedélyezed ezt a hozzáférést
  );
 
  return $items;
}
 
 
function room_reserver_myform() {
  $form = array();
  $form['#submit'] = array('room_reserver_myform_submit');
 
  $form['firstname'] = array(
    '#type'=> 'textfield',
    '#title' => t('First name'),
    '#required' => TRUE,
  );
  $form['lastname'] = array(
    '#type'=> 'textfield',
    '#title' => t('Last name'),
    '#required' => TRUE,
  );
  $form['radio'] = array(
    '#type' => 'radio',
    '#title' => t('Sex'),
    '#default_value' => 'Male',
    '#options' => array(
      1 => 'Male',
      2 => 'Female',
    ),
    '#description' => t('Please choose an option.'),
  );
 
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Elküldés'),
  );
  return $form;
}
 
function room_reserver_myform_submit($form, &$form_state) {
  //a form state-ben találhatóak az POST-olt adatok
  $values = $form_state['values'];
  //itt pedig elmendheted, ahogy kedved tartja.
  //viszont ha saját táblákkal dolgozol, akkor írj egy .install file-t is.
}
0
0

*----*----*

$node ? 'alma' : 'bor'

*----*----*

kkwx képe

valamit megint elcsesztem :(, bemásoltam ezt az egészet és így se jelenít meg semmit...
Elég ennyit írni a weblapon egy oldalra:

$output = drupal_get_form('room_reserver_myform');

és így elvileg mennie kéne? vagy kéne még valami más is? mondjuk a navigációnál sincs benne, és a jogosultságoknál se jelenik meg ez a modul, pedig be van kapcsolva, vagy a változtatásoknál ki és be kell kapcsolni újra?... tök gáz már amennyit bénázok :)

0
0
sgabe képe

Nem követtem teljesen ezt a szálat, de gyanítom, hogy nem adtál meg visszatérési értéket.

$output = drupal_get_form('room_reserver_myform');
return $output;
0
0
kkwx képe

tudtam, hogy valami ilyen apróság lesz a gond :), de így végre működik :).
Ezer köszönet mindent, a korábbi részletes leírásokat és a válaszokat a leghülyébb kérdéseimre :) (lesznek még szerintem :) ).

0
0
Paal képe

...ha már egyszer van ilyen? Hidd el, hogy ami energiát belefektetsz a sajátodba, azt jobban tudnád hasznosítani a meglévő beüzemelésére, testreszabására.

De te tudod... :)

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

kkwx képe

tudom, hogy jobb lenne az, de nem tehetek mást, ilyen az oktatási rendszer színvonala :S... el vannak szállva, hogy mennyire lemodellezik a cégek munkáját pedig fogalmuk sincs hogyan működik egy cég... az meg a másik, hogy kiadnak egy olyan feladatot, amihez senki sem ért ott (még a konzulensem se) így dolgozhatok egy ismeretlen technológiával minden segítség és magyar leírás nélkül :S...

0
0
tamoca képe

Jó reggelt!
Egy két morzsát küldök ami hasznos lehet.
http://drupal.hu/forum/egyedi-regisztr%C3%A1ci%C3%B3s-%C5%B1rlap-l%C3%A9...
Aztán: naptár a foglaláshoz
http://www.drupaltherapy.com/node/76
Aztán:a webform ami űrlapbeküldésre szolgál
http://drupal.org/project/modules?filters=drupal_core%3A87&solrsort=sis_...
Vannak szobafoglalási modulok is
http://drupal.org/project/modules?filters=drupal_core%3A87&solrsort=sort...
Ezzel pedig lefordíthatod a webhelyeket magyarra
http://translate.google.com/#

0
0

tamoca