Űrlap értéke alapján egy másik űrlap elküldése

eFeS képe

Sziasztok,
Blokkban van egy kis űrlapom, egy szem szövegmezővel. Ez a blokk minden oldalon kint van. Ennek az űrlapnak az elküldésével kellene egy oldalba ágyazott, _másik_ űrlap mezőinek részben rögzített,részben a kapott szövegmezőből származó értéket adnom és ezt a másik űrlapot elküldenem.
Már minden félével próbálkoztam, de nem akart összejönni. Tudna valaki segíteni?
Köszönöm.

Drupal verzió: 
tatarbj képe

mikkel próbálkoztál?
esetleg a form apival létrehozott alábbi mezővel próbáld meg:

$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
'#submit' => 'formodneve_submit',
);

ezután megcsinálod a formodneve_submit nevű függvényt így:
function formodneve_submit($form, &$form_state){
// itt csinálhatsz dolgokat amit az űrlap beküldésekor akarsz.
}

valami ilyesmit csináltál eddig?
Üdv, tatarbj.
0
0

---
Tatár Balázs János

eFeS képe

Formokat gyártok,
custom submit handlereket is. Ezzel nincs bajom. A két fent vázolt űrlap is ilyen. EGY formot akárhogy kezelek, multistep-es verziókkal is dolgozok minden probléma nélkül.

A fenti példában - kérésben - KÉT DARAB form van, nem egy, nevezzük őket A és B formnak.

"A" form blokk pozícióban van, kint az oldalsávban - mint pl. a kereső textbox -, "B" űrlap meg az egyik oldalon szerepel. Értelemszerűen, "A" űrlap minden oldalbetöltődéskor látszik, mert ő fixen ki van téve az oldalsávba, de "B" csak akkor, ha egy bizonyos oldalra megy a user.

"B" form egy multistep form: az első, elküldött értéktől függnek a következő oldalon látható értékek. Itt szöveges értékek is vannak, mindenféle kiiratások - egyszóval sok látható anyag, azért van itt a középső, tartalmi részben ez az űrlap, hogy jól elférjen.

"A" form csak egy sima szövegdoboz-submit gomb páros. A feladata csak annyi, hogy bármelyik oldalról meghívható legyen.

A feladat az lenne, hogy az "A" formba beirt és elküldött érték úgy jelenjen meg, mintha a "B" első lépéseként küldték volna el. Vagyis "hajtódjon végre" "B" form első submitja IS, az "A" formba beírt értékkel.

Próbálkoztam jQuery-vel átadni az értéket a "B" formnak és szintén jQueryvel submitolni is. Próbálkoztam GET-es értékkel az adott oldalnak átadni az "A" űrlapból submitolt értéket és ezt figyelni "B" formban. Elképzelhető, hogy bármelyikkel megoldható a dolog, de nekem nem jött össze...

0
0

---------------
Tátrai József
Drupler Kft.
http://www.drupler.hu

nemethf képe

B form elemeinek értéke csak a B form submit-ja utáni http POST (vagy GET) ben fog eljutni a szerverhez. Neked egy (vagy több) hidden mezőt kell hozzáadj A form-odhoz. Ha több mezőt is akarsz küldeni, én akkor is egy hidden mezővel próbálkoznék. Javascript oldalon A form submit-jakor B mezőit összefűzném (pl.join()-nal) és feltölteném vele A hidden field-jét. PHP oldalon meg explode-dal venném ki tömbbe.

0
0
eFeS képe

"B" űrlapnak sok mezője van, "A"-nak csak 1db. Ezt igazából úgy lehet tekinteni, mint egy keresőnek két féle "nézetét": vagy egy összetett kereső - ez a "B" form, és van ennek egy nagyon-nagyon szűkített változata, ez a blokkban kintlévő "A" form, hol csak 1db textfiled van. Ezt az értéket kellene tudnom - ha submitolják "A"-t - átadnom "B"-nek ÉS még submitra is birnom...

B form elemeinek értéke csak a B form submit-ja utáni http POST (vagy GET) ben fog eljutni a szerverhez.
OK, értem. Akkor azt kérdezem, hogy ha nekem van már egy értékem, amit tudok, hogy el kellene küldenem - mert mondjuk submitolva volt az "A" form, és kinyertem a küldött értéket -, akkor HOL tudom módosítani a "B" form releváns textfiledjét ÉS submitolni is automatikusan a "B" formot?

0
0

---------------
Tátrai József
Drupler Kft.
http://www.drupler.hu

nemethf képe

Ha az egyszerű/részletes kereső példát veszem, akkor szerintem így lenne ideális:
- Ha A form keres gombjára kattintasz, akkor egyszerűen keres (submit A)
- Ha B form keres gombjára kattintasz, akkor részletesen keres (b extra mezői alapján), viszont a kereső kifejezést az A form - már kitöltött - szöveg mezőjéből veszed. (submit B)

Ebben az esetben B formon kell egy hidden mező, amit B submit-kor töltesz ki A text field-jének értékével.

0
0
eFeS képe

De mindezt HOGY csináljam? :) Bocsánat...

Ugye a folyamat _mindig_ "A" formból indul. Helyesebben: "B" meghívható természetesen magában, de "A" nem. Ha "A" meghívódik, annak igazából _mindig_ "B" hívásnak kell lennie.

Tehát "A" submit handleréből kellene rávennem a "B" űrlap "submitelődni" úgy, hogy közben még egy mező értékén és módosítok. Na, ezt nem tudom megcsinálni...

0
0

---------------
Tátrai József
Drupler Kft.
http://www.drupler.hu

tatarbj képe

lehet már idejét múlt, de engem érdekelne, hogy valójában milyen helyzetről van szó (illetve sikerült-e megcsinálnod)
szerintem alapvetően az van, hogy két különböző submit handlert használsz, holott itt inkább egyet kéne és ellenőrizni, hogy milyen értékek vannak (B esetében csak azok, amik B-ből jönnek, A esetében meg B hiddenjei és A textfieldje is) -> szóval lehet úgy kellene, hogy az A-nál is rendelkezésedre álljanak ugyanazok a mezők, mint amik benne vannak B-ben, csak itt hiddenként és megfelelő value-kkal.
De lehet nagyon elkalandoztam és tök másról beszélek, mint ami maga a probléma/megoldás :D Akkor elnézést és megyek zsebkendőt lógatni :)
Üdv, tatarbj.

0
0

---
Tatár Balázs János

nemethf képe

Nekem is az a gondom, hogy miért akarod mindkét form-ot beküldeni egyik esetben. Publikus az oldal, ahol próbálkozol ? Meg lehet nézni, hogy konkretizáljuk a feladatot ?

0
0
eFeS képe

Gondoljátok végig a logikát! Az oldalsávok MINDIG láthatók egy siteon, függetlenül attól, hogy milyen tartalmat néz a user. A dolog nagyon hasonló ahhoz, ahogy a keresés form van megoldva Drupal alatt:
- van a kis keresés box, ami BLOKK pozícióba kitehető, és MINDIG látszik
- ha itt keresek, akkor meghívódik a keresés, de - ha engedélyezve van! - a középső, TARTALMI részben megkapom az összetett kereső formját is.

A végeredmény ugyanaz, mintha a /search URL-re mentem volna el, és INNEN, a _tartalomban_ lévő űrlapból indítottam volna a keresést. Tehát a _blokkból_ indított keresés elküldte a blokkban lévő form tartalmát IS és a submitolta a tartalomban lévő űrlapot IS, lévén, hogy ugyanazt az eredményt adja, ha a /search URL-en lévő űrlapot küldöm el, mintha a blokkban lévőt. És azért kell kettő form, mert a blokkban lévő mindig látszik,egyből lehet bele irni valamit, a másik meg nem. Igy érhtető? Ezt szeretném reprodukálni (bináris CGI-ket kell hívni és a CSV válaszukat lekezelni...de ez igazából - szerintem - tökmindegy)

0
0

---------------
Tátrai József
Drupler Kft.
http://www.drupler.hu

Sk8erPeter képe

Ha már a Search modult hoztad fel példaként, gyorsan leírom, hogy működik, hátha ad egy ötletet:
1.) itt a search_box() függvény definiálja a Search modulhoz tartozó, blokkokban látható űrlapot

2.) amikor submitolod, a feldolgozás a search_box_form_submit() függvényben történik, itt van egy redirect:

$form_state['redirect'] = 'search/node/' . trim($form_state['values'][$form_id]);

Tehát pl. ha rákeresel az "asd" kulcsszóra, akkor ezen a címen landolsz:
/search/node/asd

3.) A search_menu() függvény meg is határozza, ezen a címen minek is kellene történnie:

  foreach (module_implements('search') as $name) {
    $items['search/' . $name . '/%menu_tail'] = array(
      'title callback' => 'module_invoke', 
      'title arguments' => array($name, 'search', 'name', TRUE), 
      'page callback' => 'search_view', 
      'page arguments' => array($name), 
      'access callback' => '_search_menu', 
      'access arguments' => array($name), 
      'type' => MENU_LOCAL_TASK, 
      'parent' => 'search', 
      'file' => 'search.pages.inc',
    );
  }

ha a Node modul implementálja a hook_search() függvényt, akkor annak megfelelően alakulnak a továbbiak (node-ok tartalmában, címében, stb. keres) - márpedig implementálja: node_search().

4.) Meghívódik a search_view() az előbb említett search_menu() miatt ('page callback' => 'search_view',).

5.) Meghívódik a search_form(), ami rendereli a Search-höz tartozó formot, mégpedig ezért:

$output = drupal_get_form('search_form', NULL, $keys, $type);

6.) A node_form_alter() még beszúrja az "Advanced search" formot is.

Az egészből a lényeg, ami a Te feladatodat érintheti: a Search modulban úgy van megoldva, hogy a címben adódik át a keresendő tartalom, eszerint jeleníti meg a formot, és keres rá a tartalomra.

Neked egy ilyen megoldás megfelel, amivel a modulodban a hook_menu()-t implementálod, és az említetthez hasonlóan adod át a szükséges paramétert?

4
0
eFeS képe

Igen, ez a megoldás jó lehet, köszönöm a részletes leírást a search-ről. Megnézem!

0
0

---------------
Tátrai József
Drupler Kft.
http://www.drupler.hu

eFeS képe

Ez lett a megvalósult verzió:
http://www.konyvtar.kormend.hu/

A jobb oldali fenti kereső blokk vagy az oldalon vagy a könyvtár belső katalógusban keres. A katalógus keresőnek van külön oldala is, saját formmal, de a blokkból minden oldalról meghívható.

Erről szólt az eredeti kérdés. http://drupal.hu/comment/62612#comment-62612 vitt el a jó irányba. Aztán szokás szerint végül lett belőle egy komplett, önálló modul...

0
0

---------------
Tátrai József
Drupler Kft.
http://www.drupler.hu