Form kezelés

fox mulder képe

Sziasztok!

Saját modulban a hook_view() függvényt használom arra, hogy egy bizonyos tartalomtípusba tartozó node megjelenítésekor megjelenjen egy űrlap, ami a node->content['akármi']['#value'] értékeként van megadva HTML kódként. Hogyan tudom megkapni/kiértékelni az űrlap által elküldött adatokat, ha a form action attributumaként ugyanezt az oldalt adtam meg?

Köszönettel:

Drupal verzió: 
pp képe

de használd inkább a FORM API-t

pp

0
0
medwex képe

node->content['akármi']['#value'] = drupal_get_form('example_embed_form')

majd..

function example_embed_form_submit($form, &$form_state) {
//$form_state['values']['mezo'] = t('Ezt kerestem');
}

0
0
fox mulder képe

Mindkét javaslatot megfogadtam. Most már csak az a kérdésem, hogy a formkreátor_submit() függvényben kiokoskodott eredmény(eke)t hogyan jeleníthetném meg ugyanezen az oldalon.

0
0

Fox Mulder

pp képe

Két teljesen külön dologról beszész, akár új témát is indíthatnál neki. :D

Az űrlap adatait elmented aztán ezeket az elmentett adatokat jeleníted meg. Vagy nem mented el az adatokat?? Akkor mit csinálsz velük?

Valahova el kell mentened mert a web így működik. Az, hogy ez adatbázis, egy fájl vagy munkamenet az tök mindegy de el kell mentened. A kérdésedre csak utána tudunk válaszolni, de akkor már Te is tudni fogod a választ.

Jó lenne a teljes problémát felvázolnád - persze csak akkor ha nem szupertitkos, mert ugye 5000 felhasználót nem kéne megölni... - és akkor lehet érdembe tudnánk segíteni és egy összegányolt, magába zuhanó, karbantarthatatlan drupalos oldallal ismét kevesebb lenne. ;)

pp

0
0
fox mulder képe

Dióhéjban ezt szeretném:
A formon kiválasztható egy bizonyos szótár összes kifejezéséből valamennyi (mindegy, mennyi, nem kell az összes). Eredményként azon node-ok listáját szeretném megjeleníteni (a form alatt, ugyanezen a lapon), amelyek a kiválasztott kifejezések mindegyikébe beletartoznak. Azt hittem, hogy ha a ..._submit() függvényben csinálok egy adatbázislekérdezést és az eredményt (mondjuk a kapott node-ok listáját tömbként) berakom a $form_state-be, akkor elérhetővé válik a formot definiáló függvényben és megjeleníthető egy markup típusú form elemben.

0
0

Fox Mulder

medwex képe

nem tudom, h azóta megoldottad-e, de jó irányba keresgélsz, csak ahhoz hogy működjön szükséges néhány lépés.

Első, hogy a formodnak fogadnia kell a $form_state változót első paraméterként:

function pelda_szuro_form(&$form_state = NULL) {
  //form definíció...
}

A következő lépés, hogy meg kell kérned a FAPI-t, hogy építse újra a formodat beküldés után. Erre két lehetőséged van: vagy a $form_state['rebuild']-et állítod TRUE-ra, vagy a $form_state['storage']-ba teszel valamit:
hivatalos:

function pelda_szuro_form_submit($form, &$form_state) {
  //eredémyek összegyűjtése $eredmenyek-be....
 
  //küldjük vissza magunknak
  $form_state['storage']['pelda_eredmenyek'] = $eredmenyek;
}

de ez is működik:

function pelda_szuro_form_submit($form, &$form_state) {
  //eredémyek összegyűjtése $eredmenyek-be....
 
  //küldjük vissza magunknak
  $form_state['pelda_eredmenyek'] = $eredmenyek;
  $form_state['rebuild'] = TRUE;
}

Bármelyket választod a _submit() után a FAPI újra meghívja a formod, csak mostmár nem egy "üres" $form_state-el, hanem azzal, amit a _submit() "visszaadott":

function pelda_szuro_form(&$form_state = NULL) {
  //rövidítsünk:
  $values = &$form_state['values'];
 
  $form['szuro_elem'] = array(
    '#type' => 'textfield',
    '#title' => t('Example filter'),//hogy fordítható legyen
    //ez azért kell, hogy beküldés után megjelenjen a beküldött érték
    '#default_value' => isset($values['szuro_elem']) ? $values['szuro_elem'] : '',
  );
 
  //feltéve hogy a storage-ot használtad és $eredmenyek egy link lista
  $storage = &$form_state['storage'];
  if (isset($storage['pelda_eredmenyek']) && !empty($storage['pelda_eredmenyek'])) {
    $form['eredmenyek'] = array(
      '#type' => 'markup',
      '#value' => theme('item_list', $storage['pelda_eredmenyek']),
    );
  }
 
  return $form;
}

Egyébként ugyan ezzel a megoldással működnek a többoldalas űrlapok is, csak akkor küldönböző form definíciót adsz vissza a $form_state állapotának függvényében, bár ha úgy vesszük, akkor ez is egy többoldalas űrlap: az első oldalon nincs eredmény, a másodikon pedig van.

SEO: remélem ez így most elég aboros barát. :D

0
0
fox mulder képe

Örök hálám! Megvilágosodtam...

0
0

Fox Mulder

aboros képe

nekem már az előző is jó volt, nem tudom miért érezted, hogy cinkellek, komolyan gondoltam amit írtam. rövid volt tömör, de volt benne mit keresni. bejött.

0
0

-
clear: both;

medwex képe

hook_view():
"első" sor: $dummy = drupal_get_form('...');

"második" sor: ebben a sorban már hozzáférsz az adatokhoz, akár az adatbázisba mentetted akár $_SESSION-ben tároltad.

"harmadik" sor: node->content['akármi']['#value'] = $dummy;

Konkrét példát a watchdog.module-ban találsz.

0
0
aboros képe

segíteni! szuper ez, tele van keresőszavakkal, szép segítség! elolvasva egy nagy semmi, utánagondolva viszont máris tudom mit keressek. szép!

0
0

-
clear: both;

medwex képe

bár alapvetően "kódolt" kiegészítésnek szántam pp megjegyzéséhez, a SE-k meg eszembe se jutottak.... bocsi.

Ráadásul el is írtam, mert D6-ban már dblog-nak hívják a modult. Egész pontosan a dblog.admin.inc dblog_overview() fv-re gondoltam. Legalábbis szerintem az egy nagyon jó alap példa a "Hogyan tegyünk szűrő form-ot és eredményeket egy lapra" probléma megoldására.

0
0
fox mulder képe

Szerintem aboros abszolút dicséretnek szánta :) Nekem legalábbis nagyon hasznos volt.

0
0

Fox Mulder

lovranits képe

Sziasztok, az lenne a kérdésem, hogyha van egy formom akkor annak egy adott mezőjét, hogy tudom lekérdezni, hogy mi az értéke. Például a nyelv mező értéket.

Előre is köszönöm a segítséget

0
0
sgabe képe

kérlek nyiss új témát a kérdésednek

0
0