form használata

tibi képe

Sziasztok!

Eljutottam odáig, hogy van a modulomban egy form. Csak azzal nem vagyok tisztában, hogy ezt hogy tudom feldolgoztatni a drupallal. Nézegettem más modulok forrását de nem tudtam belőle kitalálni. Ha valaki esetleg le tudná nekem írni, hogy mi ennek a folyamata és e modulom_form kampón kívűl még mire van szükségem egy form elküldéséhez akkor azért nagyon hálás lennék, mert ez elakasztott.
Előre is köszönöm!

Üdv:
Tibi

tibi képe

A modulom_form kampó úgy tudom csak akkor kell ha saját tartalom típust definiálok. Én egy olyan formot csináltam ahol egy nevet egy helyet a könyvtár rendszerben kell megadni és ezt elküldve létrehoz egy könyvtárat az adott néven és adott helyen. A callback-ben megkapja a formot, de innen nem tudom, hogy action-t hogy kell neki adni vagy kell-e. Vagy ezt a drupal_get_form elintézi helyettem és csak paramétereznem kell a formot?

0
0
Sweetchuck képe

Szia

Ha modulod definiál egy új tartalom típust, akkor azt a hook_node_info() segítségével teszi.
A module kulcsnál lehet megadni, hogy mi az előtagja a tartalom típust kezelő függvényeknek.
...
'module' => 'modulom_tipusom'
...

Ilyenkor a modulom_tipusom_form() függvény által visszaadott űrlapot fogja használni a rendszer az add/edit műveletekhez.

A mennyiben a modulod egyéb ürlapokat (is) definiál akkor azt a hook_forms() kampóval teheti meg.
Itt nem konkrétan az űrlapokat kell megadni, hanem függvény neveket (callback) ahonnan meglehet szerezni magát az űrlapot.

Ami számodra a lényeg lesz az a

xxx_validate($form_id, $edit, $form)
xxx_submit($form_id, $edit)

modulom_forms()
{
  $forms['modulom_make_dir_form']['callback'] = 'modulom_make_dir_form';
  return $forms;
}
 
modulom_make_dir_form()
{
  $form = array();
  //itt kell megadni a form elemeket.
  return $form
}
 
modulom_make_dir_form_validate($form_id, $edit, $form)
{
  //Itt lehet leellenőrizni a felhasználó által beirt adatokat.
  //ha gond van akkor http://api.drupal.org/api/HEAD/function/form_set_error
}
 
modulom_make_dir_form_submit($form_id, $edit)
{
  //Itt lehet feldolgozni a kapott adatokat.
}

használat:

$output = drupal_get_form('modulom_make_dir_form');

0
0
tibi képe

Szia,

köszönöm a válaszodat. Nos akkor ha egy egyszerű formot szeretnék feldolgozni akkor ezek a lehetőségeim vannak? A hook_menu() kampóval létrehozott item[] menüponthoz callback arguments paramétereként tudom meghívni a formot?

pl.:

 
.....
$items[] = array('path' => 'admin/content/modulom/form', 'title' => t('konyvtar letrehozasa'), 
      'callback' => 'drupal_get_form',
      'callback arguments' => array('modulom_make_dir_form'),
      'description' => t('konyvtar letrehozasa'),
      'access' => user_access('acces konyvtar letrehozasa'),
      'type' => MENU_LOCAL_TASK,
      'weight' => -9);
.....

Én így tudom elképzeli a működését. A $form_id és a $edit itt mit jelől(az általad írt forrásban)?
Köszönöm válaszodat.

0
0
pp képe

a hook_menu-ben csak azt modnod meg, hogy melyik útvonalhoz melyik függvény fog tartozni, vagyis melyik függvény fogja feldolgozni az adott kérést.

a hook_menu-ben oldalakat (page) hozhatsz létre. Ez a feldolgozó függvény fogja kiíratni a formot, a többit a Drupal elintézi neked. Nem kell semmit tenned, csak ha a feldolgozás után másik oldalra akarsz eljutni.

No nézzük hogyan indulj el: (mégquickstartabb gájd)

fogd meg a quickstart-ban található függvényeket(csak a függvényeket a többi kódot hagyd ki!) és tedd bele egy modul fájlba!

Plusz még tegyél bele egy modulneve_menu függvényt:

function modulneve_menu($mc){
$items[] = array(
      'path' => 'test', 
      'title' => t('Ez egy teszt'),
      'callback' => 'test_page',
      'access' => user_access('acces konyvtar letrehozasa'),
      'type' => MENU_CALLBACK,
      );
return $items;
}

Ha minden igaz ez megjelenít neked egy formot, ha a test útvonalat nézed ;)
Nempróbáltam, az rád vár ;)

pp

0
0
tibi képe

Szia,

ezt a Forms API Quickstart Guide oldalt nem találtam egész eddig, köszönöm a linket és sz instrukciókat, azt hiszem ennyi elég lesz. De még az érdekelne hogy "a Drupal elintézi neked", hogy ezt hogyan intézi el?

Tibi

0
0
pp képe

Az "elintézi neked" azt jelenti, hogy meghívja a megfelelő validate függvényt amiben már csak a plusz validálásokat kell végrehajtanod (a szükséges mezők meglétét ellenőrzi a Drupal) valamint a megfelelő submit függvényt is. Mindeközben lehetőséget biztosít más moduloknak, hogy beépüljenek a te formod feldolgozó mechanizmusába. ;)
Pontosan hogyan történik ez megnézheted az include/form.inc fájlban, nagyon szépen kommentezett kód.

pp

0
0
tibi képe

Még azt szeretném megkérdezni, hogy ha több form van egy modulon belül akkor azokat hogy tudom megkülömböztetni?

$form[1]
$form[2]

Vagy valami más módja van ennek?

0
0
pp képe

form_id ugye benne van a függvény nevekben...szerinted? ;)

A lényeg az, hogy egy modulon belül több form is lehet a lényeg a form_id, mert ez azonosítja a függvényeket is. PL. ha modulneve_formneve a form_id képzése. akkor a modul nevével kezdődik a függvényed, és a formokat is meg tudod különböztetni.

pp

0
0
tibi képe

Nem teljesen értem, csak addig, hogy a függvény nevében szerepeljen a $form_id, de nézegettem a

function hook_forms() {
  $forms['mymodule_first_form'] = array(
    'callback' => 'mymodule_form_builder',
    'callback arguments' => array('some parameter'),
  );
  $forms['mymodule_second_form'] = array(
    'callback' => 'mymodule_form_builder',
  );
  return $forms;
} 

kódot és ezzel is meg lehet külömböztetni a formokat egy modulon belül nem?

0
0
tibi képe

Sziasztok!

Mióta kaptam tőletek pár tippet a drupal form kezelésével kapcsolatban, beleástam magamat a dokumentációkba. A drupal.org-on találtam a következőt:

function mymodule_forms() {
  $forms['mymodule_first_form'] = array(
    'callback' => 'mymodule_form_builder',
    'callback arguments' => array('some parameter'),
  );
  $forms['mymodule_second_form'] = array(
    'callback' => 'mymodule_form_builder',
    'callback arguments' => array('a different parameter'),
  );
  return $forms;
}
 
function mymodule_first_page() {
  return drupal_get_form('mymodule_first_form');
}
 
function mymodule_second_page() {
  return drupal_get_form('mymodule_second_form');
}
 
function mymodule_form_builder($param) {
  $form = array()
  // build the form here
 
  if ($param == 'some parameter') {
    // Add another field, change a default value...
  }
 
  // This is used the way $callback was in 4.7.x Forms API: it is used as the prefix for
  // _submit() and _validate() functions to process the form.
  $form['#base'] = 'mymodule_form';
 
  return $form;
}

Ennek a forrásnak az elejét már említettem korábban, csak a :

function mymodule_form_builder($param) {
  $form = array()
  // build the form here
 
  if ($param == 'some parameter') {
    // Add another field, change a default value...
  }
 
  // This is used the way $callback was in 4.7.x Forms API: it is used as the prefix for
  // _submit() and _validate() functions to process the form.
  $form['#base'] = 'mymodule_form';
 
  return $form;
}

függvény nem egészen világos számomra, ha jól gondolom akkor ezzel a szerkezettel megoldható egy modulon belül több form kezelése. Ha lennétek olyan kedvesek megerősíteni ezt a gondolatomat.

T.

0
0
pp képe

A hook_forms a 5-ös Drupal egyik újdonsága. Lehetővé teszi, hogy ha van több formod, akkor azokat 1 függvénnyel állítsd elő, egy másikkal validáld, és egy harmadikkal dolgozd fel. Tehát nem kell minden formhoz modulnév_(form_id), modulnév_(form_id)_validate, modulnév_(form_id)_submit függvényeket megvalósítanod, hanem elég csak 1 hármas.

pp

0
0
tibi képe

Szia PP,

érdeklődni szeretnék az általad említett Drupal 5 újdonságia felől. A formkezelés területén, a változatosság kedvéért :)
Ezt a hármast, hogy érted, egy függvényen belűl form, validate, submit? Mert próbálkoztam vele de nem jött össze. Végső kétségbeesésem miatt fordulok hozzád :)

function konyvtar_ad() {
  return drupal_get_form('konyvtar_add_form');
}
 
function konyvtar_torol() {
  return drupal_get_form('konyvtar_torol_form');
}

Így hoztam létre a formokat amikre egyenlőre szükségem van. De a submit és validate rész nem egészen világos. Mi alapján választja ki a saját submit és valid függvényét? Köszönöm a válaszodat.

T.

0
0
pp képe

mindegyik form-hoz 3 függvényed van:
1. a form generáló. Ennek a neve megegyezik a form_id-vel (konyvtar_add_form, konytar_torol_form)
2. a validáló függvényé, ha hiba van a form_set_error függvénnyel tudod jelezni. Ennek neve mint az előbbi, de _validate a vége. (konyvtar_add_form_validate($form_id,$form_values), konytar_torol_form_validate($form_id,$form_values))
3. a feldolgozást végző függvényé, mely validate helyett submit-ra végződik.(konyvtar_add_form_submit($form_id,$form_values), konytar_torol_form_submit($form_id,$form_values))

de ez már elég régóta a rendelkezésünkre áll(legalább is a 4.7-ben már volt)
pp

0
0
fmagnucz képe

Szia pp!

Korábban azt írtad, hogy az 5-ös Drupalnál elég 1*3 függvény. Eme hozzászólásod alapján viszont n*3 függvény kell. Akkor most hogy is van ez?

Böngésztem a drupal.org-ot, de csak a hook_forms()-ot találtam meg. Sehol sem találtam hook_forms_validate, illetve hook_forms_submit függvényekre utalást.

Üdv: Feri

0
0