Adott egy űrlap, rajta több azonos feliratú gomb (az űrlap generálásakor derül ki, hogy egy, kettő, vagy akár ötven), de természetesen különböző azonosítóval - azaz a #value egyforma, az #id különböző. JavaScript és gombonként különböző #submit használata nélkül (hogy ne kelljen előre lekódolni az ötven függvényt, hanem csak egyet) hogyan lehet megtudni a _submit() függvényben, melyik gombot nyomták meg?
Segítség:
1. Mivel a gombok felirata a #value alapján kerül megjelenítésre (lévén HTML-ben is így van), ezért nem lehetnek különböző #value értékek az egyes gombokhoz.
2. Ha mégis, és csak a theme_...() függvényben hozom egyforma alakra (azaz a drupal_render() hívása előtt állítom be a #value értékét egyformára), természetesen akkor is ugyanazt kapom vissza, lévén a HTML-ben ugyanaz lesz a type="submit" value-ja.
3. Volt olyan megjegyzés, miszerint nem szerencsés egy űrlapon belül több gombnak ugyanazt a feliratot adni - azonban ez kifejezetten a megrendelő igénye volt, így nem szabad máshogy megközelíteni.
4. JS használata az általános ok miatt van kizárva: nem biztos, hogy az ügyfél böngészőjében van JS támogatás. Ezért aztán az az út sem járható, hogy az űrlap megjelenésekor, kliensoldali jQuery-vel állítom egyformára a gombok feliratát, sőt az sem, hogy a gombok megnyomásakor az űrlap elküldése előtt állítok be valami rejtett űrlapelem-értéket.
Van-e erre bármiféle megoldás, vagy el kell hajtani a megrendelőt, hogy ezt így lehetetlen megcsinálni, és radio, checkbox vagy bármi egyébbel lehet csak?
ezt keresed?
patch:
Sajnos nem
Bármelyik gombot nyomom is meg, az űrlapon belül az első id-jét kapom így vissza.
Ebben az esetben...
...én úgy vettem észre hogy az utolsót, de a lényegen nem változtat
hmm
bemasolod a formot es a submit codot? mert ennek mukodnie kellene. nem tudok rola, hogy bug lenne a ['clicked_button'] hasznalataban.. ket modulnak is bekuldtem ezt a patchet..
az image button-nal volt regebben gond, de azt is javitottak mar. http://drupal.org/node/209574
nem ez az id
Azért nem megy mert a feltétel nem teljesül, mivel nem "edit-submit" lesz az azonosító, legalábbis jó esetben nem.
igen ez így van
tehát a [clicked_button][#id]-nak vagy ezt edit-g1-btn-1 vagy ezt edit-btn-2 kéne tartalmaznia. De az én tapasztalataim szerint minden esetben az edit-btn-2 értéket veszi fel.
nekem működik
Én szépen visszakapom az általam módosított kódban az edit-proba-btn-1 vagy edit-proba-btn-2 azonosítókat az űrlap elküldésénél.
Talán így
saját id lenne a jó
Ez működhet, de az attribútumok közé benyomni nem biztos, hogy jó ötlet. Legalábbis valid nem lesz az biztos. Lehet a gombnak saját azonosítója, azt kéne használni szerintem.
Egyébként miért kell ugyanaz a value? Ezt a részt nem igazán értem...
Nem kell, az csak próbálkozás
Nem kell, az csak próbálkozás volt, de ott maradt
boobaatól kérdezném
Bocsi, ezt a kérdést a téma indítónak címeztem.
Attól lesz egyforma a felirat
...legalábbis tudomásom szerint.
Persze ez lehet, hogy öt percen belül megváltozhat, mire a végére érek ezen topic értő olvasásának...
ezzel mi a gond egyébként
<?php $form_state['clicked_button']['#id'] ?>
Szerintem gyönyörűen működik.
valóban jó így
Nem kell az #atrributes-t használni elég a #name. Nem értem miért nem vettem észre hogy jó is, mert ezt próbáltam elsőnek, aztán az #attributes-t
Sőt, csak a #name kell
Már a postán sorbanállás közben gyanús volt, hogy ezt anno Drupal előtt az input type="button" value="foo" name="foo-1" alapján csináltuk (csak hogy hivatkozzak a HTML-re).
Ennek megfelelően nincs szükség sem a #tree-re (csak bonyolítja a feldolgozó kódot), sem az #attributesra (meg ugye ettől invalid is lesz a HTML), sem a #title-re (felesleges, úgysem használatos) - bőven elég, ha az ugyanolyan #value-val és #submittel bíró, de különböző #id-jú (ezt is felesleges saját modulban kódolni, a FAPI gondoskodik az egyediségéről is) #type='button' vezérlők egyedi #name-et kapnak a saját modulban. A $form_state['clicked_button']['#id'] viszont nem a #name, hanem továbbra is az #id alapján kerül kitöltésre - azaz ha ettől függ az elágazásom, akkor illik azt is kitölteni (legalábbis IMHO).
Köszönöm szépen a segítséget - erre igazán illett volna magam rájönnöm/emlékeznem... :S