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ó:
Fórum:
mikkel próbálkoztál?
mikkel próbálkoztál?
esetleg a form apival létrehozott alábbi mezővel próbáld meg:
ezután megcsinálod a formodneve_submit nevű függvényt így:
valami ilyesmit csináltál eddig?
Üdv, tatarbj.
---
Tatár Balázs János
Formokat gyártok,
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...
---------------
Tátrai József
Drupler Kft.
http://www.drupler.hu
hidden field
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.
Alakul...
"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?
---------------
Tátrai József
Drupler Kft.
http://www.drupler.hu
hidden mező B form-on
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.
OK, értem
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...
---------------
Tátrai József
Drupler Kft.
http://www.drupler.hu
lehet már idejét múlt, de
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.
---
Tatár Balázs János
Nekem is az a gondom, hogy
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 ?
Sidebar != tartalom
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)
---------------
Tátrai József
Drupler Kft.
http://www.drupler.hu
Ha már Search modul
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:
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:
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:
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?
OK, köszönöm
Igen, ez a megoldás jó lehet, köszönöm a részletes leírást a search-ről. Megnézem!
---------------
Tátrai József
Drupler Kft.
http://www.drupler.hu
A teljesség kedvéért...
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...
---------------
Tátrai József
Drupler Kft.
http://www.drupler.hu