Sziasztok!
Úgy adódott, hogy el kellene készítenem egy saját formot. Elkészítettem hozzá a saját modult, de valamit nem sikerült jól összeraknom, mert a az eredmény oldalon hibaüzenetet kapok. Biztos valami tök egyszerű hiba van benne.
Az űrlap egyszerű (nyilván a végleges ennél bővebb lesz): két fieldset van, az elsőben egy textfield, a másodikban két checkbox.
Az űrlap rendben megjelenik, kitöltés után megnyílik kért eredményoldal.
Az eredményoldalon PHP-kódban van jelenleg a $result= function urlap_submit() utasítás.
<?php function urlap_menu() { 'title' => t('Test'), 'page callback' => 'urlap-test', 'access callback' => TRUE, 'type' => MENU_CALLBACK, ); return $items; } function urlap_page() { $output = drupal_render(drupal_get_form('urlap_my_form')); return $output; } function urlap_my_form() { '#action' => 'urlap-eredmeny', ); '#type' => 'fieldset', '#prefix' => '<div id="elso-mezo">', '#suffix' => '</div>' ); '#type' => 'textfield', '#title' => t('Title'), '#size' => 15, '#maxlength' => 20 ); '#type' => 'fieldset', '#prefix' => '<div id="masodik-mezo">', '#suffix' => '</div>' ); '#title' => t('Checkbox-1'), '#type' => 'checkbox', '#return_value' => 1, '#default_value' => 0 ); '#title' => t('Checkbox-2'), '#type' => 'checkbox', '#return_value' => 2, '#default_value' => 0 ); '#type' => 'submit', '#value' => t('Text'), '#submit' => 'urlap_submit', ); return $form; } function urlap_validate($element, &$form_state) { } } } function urlap_submit($form, &$form_state) { $azonosito = urlap_validate($form_state['values']['elso_mezo']['azonosito'], &$form_state); $ch_valasztott[] = $form_state['values']['"masodik_mezo']['chbox_1']; $ch_valasztott[] = $form_state['values']['"masodik_mezo']['chbox_2']; return($result); }
A hibaüzenet pedig:
Warning: Missing argument 1 for urlap_submit(), called in /modules/php/php.module(80) : eval()'d code on line 3 and defined urlap_submit() függvényben (/sites/all/modules/urlap/urlap.module 90 sor). Warning: Missing argument 2 for urlap_submit(), called in /modules/php/php.module(80) : eval()'d code on line 3 and defined urlap_submit() függvényben (/sites/all/modules/urlap/urlap.module 90 sor). Notice: Undefined variable: form_state urlap_submit() függvényben (/sites/all/modules/urlap/urlap.module 94 sor). Notice: Undefined variable: form_state urlap_submit() függvényben (/sites/all/modules/urlap/urlap.module 95 sor). Notice: Undefined variable: form_state urlap_submit() függvényben (/sites/all/modules/urlap/urlap.module 96 sor). Notice: Undefined variable: result urlap_submit() függvényben (/sites/all/modules/urlap/urlap.module 98 sor).
Mit kellene az űrlap eredményeinek fogadásánál másképp írni?
Előre is köszönöm!
Drupal verzió:
Fórum:
mezo
Ez pl. biztos nem helyes:
['"masodik_mezo'] nem ['masodik_mezo'] akart lenni?
Elírás esetleg?
Mindkét sorban ez az extra macskaköröm: '"masodik_mezo'
Köszi, ez a szintaktikai hiba
Köszi, ez a szintaktikai hiba valóban benne maradt, de nem oldotta meg a problémát a javítása.
Magát $form_state változót nem akarja felismerni a hibakód szerint a három kapott adatnál, illetve a függvény argumentumok hiányoznak
A hibakód sorszámai és az itt beillesztett kód sorszámok nem azonosak:
90. sor - a function sor
94,95,96 - az $azonosito és a két $ch_valasztott kezdetű sorok.
Csökönyi Ferenc
submit
Nem a submit-nál van valami hiányérzete?
Sajnos, ezzel sem megy.
Sajnos, ezzel sem megy. Szerintem rosszul hívom meg az urlap_submit() függvényt.
Mindent igyekeztem átnézni, amit a neten találtam, de valószínűleg az egésznek a logikájára nem érzek rá. :(
A form elkészítéséről, összeállításáról találtam egy csomó mindent (Google izzadt rendesen), szépen össze is áll az űrlap, a Form Builder modul már csak hab a tortán, csak az eredményeket nem tudom kinyerni további feldolgozásra. :(
Csökönyi Ferenc
submit default
Próbáld meg az "alapértelmezett" módszert:
Így működik?
Ezzel is próbálkoztam, most
Ezzel is próbálkoztam, most újra ismét.
Milyen php-kóddal hívnád meg a urlap_my_form_submit() függvényt? Milyen paramétereket kell beírni a $form és a &$form_state átadáshoz? Mert egyértelmű a hibaüzenetből, hogy ezeket nem kapja meg a függvény. A &$form_state egy üres tömb.
Ha nem paraméterezem a függvényt, akkor az argumentumokat hiányolja.
Köszi a segítő szándékot.
Csökönyi Ferenc
Nem látom a hibát sajnos,
de ezeket érdemes tudni:
"Milyen php-kóddal hívnád meg a urlap_my_form_submit() függvényt?"
Semmilyen php kóddal sem hívod meg az urlap_my_form_submit() függvényt, ezt a drupal hívja meg a formfeldolgozás megfelelő fázisában és átadja neki a form definícóját tartalmazó tömböt és a kitöltött form-ot (ez nálad speciel nem így van valamiért...).
"Milyen paramétereket kell beírni a $form és a &$form_state átadáshoz?"
Nincs ilyen "lehetőség". A form definícióban ahol a form tömböt definiálod, nem lehet szabályozni, hogy a drupal rendszer hány paraméterrel hívja meg a formhoz tartozó _validate() és _submit() függvényeket. Ez kötött, ezért van ez is így, nagyon helyesen: "Ha nem paraméterezem a függvényt, akkor az argumentumokat hiányolja."
---------------------------
Amit én csinálnék ilyen esetekben. Készítenék egy teljesen minimál modult a három függvénnyel (form definíció, validate és submit), lehetőleg egy működő példa kód átmásolásával. Ha ez megy, akkor ezt bővíteném, több form elemmel és egyedi form feldolgozással apróbb lépésekkel folyamatosan ellenőrízve, hogy megy-e még a kód.
A fordított megközelítés kezdőknek nehezebb, vagyis amikor megírod az egész kódot és csak a legvégén futtatod és kezded javítani a hibákat.
drupal_get_form
Ezt még próbáld meg:
Köszi, megpróbálom majd.
Köszi, megpróbálom majd.
Csökönyi Ferenc
Köszi, nyilván megint elölről
Köszi, nyilván megint elölről fogom kezdeni az építkezést. A form nem bonyolult - direkt -, a végső verzió összetettebb lesz, de ahogy írtad, egyszerűn akarok működőképes verziót összehozni. Rengeteg mintakódot átnéztem, azokból raktam össze, ezért maga a form megjelenik és elvileg működik. Csak a finálé marad el. :)
Mivel másoknak sikerült már, előbb vagy utóbb összehozom. :)
Köszi a tanácsokat.
Csökönyi Ferenc
Űrlap
Szia. Hasznos a saját fejlesztés.
A webform modul mit nem tud ami neked kell egyedi dolog?
tamoca
Szia!
Szia!
Nem akarom elmenteni az adatokat. A beküldött adatokat kell majd bizonyos szempontok szerint feldolgozni, kiértékelni és végül ezek alapján bizonyos node-k szűrt listáját visszaadni. Végül is egy speciális keresőnek nevezném.
De utána az eredmények nem kellenek, jelenleg legalábbis nem cél a keresések tárolása.
Ha webformmal csinálnám, akkor feleslegesen lenne egy mentés az adatbázisba, majd onnan kellene az eredményeket visszahívni, feldolgozni, végül törölni.
Webformmal már megoldottam volna, de ez egy jó alkalom és indok, hogy ezt a területet is megismerjem a Drupalban. :)
Csökönyi Ferenc
Form api-t kellene nézegetni
A menüben létrehozod a két URL-t, a formot meghívod. Onnantól kezdve a form api dogozik helyetted. Ha implementálsz form_neve_validate és/vagy form_neve_submit függvényeket akkor azt hívja a submit gomb megnyomásakor.
Ilyenkor, ha másik URL-en jeleníted meg az eredményt akkor a form_neve_submit függvényben tudod átirányítani az oldalt:
Megoldható ugyanazon az oldalon is az eredmény kiíratása:
Üdv!
Dudás József
Köszönöm!
Köszönöm!
Ma már nem, de holnap nekiesek ezt átnézni és kipróbálni.
Kezdem kapisgálni a működést.
Csökönyi Ferenc
Az első mintakódodat egy-az
Az első mintakódodat egy-az egyben áthelyezve tökéletesen működik (nekem az új oldalon való eredmény megjelenítés kell).
Úgyhogy most jön ennek a tökéletes alapnak továbbépítése. Nagyon köszönöm a segítséget!
Csökönyi Ferenc
Egy kis visszajelzés, hogy mi
Egy kis visszajelzés, hogy mi is lehetett a hiba az én változatomban. Két lehetséges okot találtam:
- a MENU_CALLBACK részben megadott útvonalhoz tartozó node-t előzetesen létrehoztam. Ez feltehetően felülírta megjelenítéskor a form létrehozását. Ezért nem jelent meg eleinte semmi
- később én a drupal_get_form(urlap_my_form()) függvényt írtam be a drupal_get_form('urlap_my_form') helyett, így érthető, hogy miért volt mindenféle paraméterhiba.
Most már sikerült a működő űrlapot blokkban is megjeleníteni, ami szintén cél volt.
Köszönöm mindenkinek a segítséget!
Csökönyi Ferenc
Sziasztok,
Sziasztok,
Az itteni instrukciók alapján készített form tökéletesen működik 5.2 PHP-n. Most költöztetem az odalt egy 5.3-as verziójú PHP-ra és ott az alábbi hibaüzenet jelenik meg:
Strict warning: Only variables should be passed by reference eval() függvényben (modules/php/php.module(80) : eval()'d code 3 sor).
A 3. sor pedig ez (tehát maga a function urlap_menu() ):
Tudom, hogy az 5.3-as php verzió okozza, de mi a megoldás?
Előre is köszönöm!
Csökönyi Ferenc
hova?
Ezt a kódot hova illesztetted be? Hogy jön ehhez a PHP modul? Ugye nem egy tartalomba akartad tenni, PHP beviteli formával?
Választ szeretnél? - Új kérdés, új téma - Tesztoldal - Trollkezelés - Frissítés
Nem. Tehát ez egy komplett
Nem. Tehát ez egy komplett modul, a fentebbi mintakód továbbfejlesztésével let véglegesítve és tökéletesen működik egy 5.3-es php-t futtató szerveren (tévesen 5.2-est írtam az előbb).
Most az oldal áttelepítés alatt van egy másik szerverre, ahol 5.4-es php verzió van és ott ugyanez a modul már ezt a hibakódot adja.
Viszont közben rájöttem, hogy nem ez a baj, hanem a függvény meghívása:
Ez generálja a hibakódot.
Így viszont már jó:
Csökönyi Ferenc
megfejtés, lécci!
Ezt a
Only variables should be passed by reference eval() függvényben (modules/php/php.module(80) : eval()'d code 3 sor
sanszosan Mulder & Scully debugolhatja, lécci mondd már el, hogy ezt a 'komplett modulból' hogy sikerül előhozni!
----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.
erre utaltam
Igen, erre utaltam én is.
Választ szeretnél? - Új kérdés, új téma - Tesztoldal - Trollkezelés - Frissítés
Mint írtam, közben kiderült,
Mint írtam, közben kiderült, hogy nem a modulban van a "hiba", hanem a
formátum nem megfelelő, noha működik. Az űrlapot egy blokkban jelenítem meg, abban szerepel php-kódban.
Ezt kellett átalakítanom. De a PHP 5.3-as verziójánál ez nem generált hibaüzenetet, az 5.4-esnél igen.
A megoldást itt találtam meg.
http://drupal.stackexchange.com/questions/6322/strict-warning-only-varia...
Csökönyi Ferenc
„komplett modul”
Szia!
Attól tartok, a „komplett modul” kifejezés számodra mást jelent, mint nekünk. Mindenesetre örülök, hogy megoldódott a problémád.
Választ szeretnél? - Új kérdés, új téma - Tesztoldal - Trollkezelés - Frissítés
Lehet, hogy rosszul fejezem
Lehet, hogy rosszul fejezem ki magam, elnézést. Ez a modul egy saját űrlap megjelenítéséhez és feldolgozásához tartozó összes függvényt tartalmazza (sajat_urlap.module).
Az űrlapot egy blokkban jelenítem meg és ebben a blokkban PHP kódként csak az $output = drupal_render(....) függvénymeghívás és a print($output) található, ami megjelenítette az űrlapot. Lehet, hogy más módon is meg lehet oldani a megjelenítést egy blokkban, de én nem hiszem, hogy hibás lenne ez a megoldás. Ha mégis, szívesen veszem a javaslatokat.
Ott tévedtem, hogy azt hittem, magában a modulban lévő függvények egyike generálja a hibaüzenetet, holott a megjelenítő függvénymeghívás lett helytelen az új tárhelyen, míg a régin ez hibaüzenet nélkül működik most is. A két hely között a különbség a PHP verziója.
Most teljesen igaz volt az a helyzet, hogy korábban kérdeztem, mint kellett volna (vagy 5 perccel később jöttem rá a megoldásra, mint kellett volna? :) )
Csökönyi Ferenc
Ha már van egy saját modul,
akkor kár elspórolni a hook_block_info és hook_block_view függvények implementálását, hogy ne kelljen php kód az adatbázisba. Ha sok ez a két függvény akkor még szóba jöhet a hook_block_view_alter is, hogy kiváltsad a szerkesztő felületi php kódot.
Üdv!
Dudás József
Köszi, át fogom ezeket
Köszi, át fogom ezeket tanulmányozni.
Csökönyi Ferenc