hook_menu wildcard alapján (edit) form meghívása

burney képe

Sziasztok!

Egy kis segítséget szeretnék kérni. Egy olyan modult készítek, amely verseny-események kiírását, módosítását teszi lehetővé. A hook_menu alkalmazásával 3 menüt hoztam létre: new, list, edit. A new és a list szépen működik, és a form-ba beírt adatokat adatbázisba mentem, ill listázom.
Viszont az edit esetében nem jutok dűlőre.

A menü item-et így hozom létre

  1. $items['mymodule/%test_event/edit'] = array(
  2. 'title' => 'Event edit',
  3. 'page callback' => 'drupal_get_form',
  4. 'page arguments' => array('mymodule_test_event_edit_form'),
  5. 'access arguments' => array('access content'),
  6. );

Azt kiderítettem, hogy a wildcard (%test_event) értékének megszerzéséhez test_event_load($id) függvényt kell készítenem, viszont amit nem tudok, hogy a form-nak hogyan tudom átadni az értéket, mert ott a mezők default értékeinek be kell állítanom az aktuális id-hez tartozókat.

Esetleg teljesen rosszul közelítem meg? :S Sajnos eléggé elbizonytalanodtam.

Ha valaki egy pársorban segítene, nagyon hálás lennék!
(drupal.org-on keresgéltem, de nem jöttem rá sajnos)

Köszönöm előre is!

Drupal verzió: 
szantog képe

Eddig nem rossz, amit csináltál. A formnak nem kell feltétlenül hook_menuben odaadni az értéket, bőven ráérsz a form képzésekor. Ha szépen megírtad a loadered, akkor menu_get_object('test_event')-el tudod bárhonnan elérni. Hogy szépen tudj (és más modul is tudjon) vele játszani, érdemes $form_state['test_event']-ben eltárolni a betöltött értéket a form függvényedben. Egyébként nézz szét a node.pages.inc fáljban a node modulban, sok okosság van benne.

1
0

----
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.

burney képe

A menu_get_object('test_event') -el szépen visszakapom a %test_event -et. :)
Megnézegettem a node.pages.inc -et és a node.module -t is, viszont sajnos még nem világos, hogy milyen műveletet (vagy ellenőrzést) kellene végrehajtanom a test_event_load fv-ben.

Most így működik:

  1. function test_event_load($test_event_id) {
  2. return is_numeric($test_event_id) ? $test_event_id : FALSE;
  3. }

Ezt követően a form default értékeinek visszaadására egy külön fv-t írtam, melynek paramétere: menu_get_object('test_event')
és ez a fv. visszaadja a db-ből a megfelelő default értéket a form adott mezőjének.

Ezzel kapcsolatban kérdésem, hogy a test_event_load fv. művelete megfelelő, elegendő?
Valamint az egész leírt megvalósítás elfogadható megoldásnak tűnik?
Továbbá, hogy megtehetem-e azt, hogy azonos form-ot alkalmazok a new-ra és az edit-re?

Hálás köszönet! :)

0
0
burney képe

Rájöttem, hogy ez azért nem elégséges, mert a rendszer így nem tudja, hogy valóban létezik-e ahhoz az X/edit oldalhoz tartozó rekord az adatbázisban. Ezért a test_event_load fv-ben ezt vizsgálni kell. Ezt egy külön (más célra is alkalmazott fv-ben már vizsgálom, amit itt is meghívok), így azokon az oldalakon amelyekhez nem tartozik rekord a db-ben "Page not found" látszik.

0
0