Form paraméter

krampi képe

Sziasztok!

Meg szeretném oldalni, hogy egy táblázatban egyik oszlopban generált url vagy gomb alapján
egy uj formon adatokat jelenitsen meg az adott tábla sorról részletesen, és ehhez át kellene adni a paramétert a másik form-ra, hogy az alapján a részleteket megjelenitse. jelen esetben a sor id-je lenne.

Sajnos csak 4.7 drupalhoz találtam példát, ami alapján a callback argumentel operálnak.

$items['valami/form/reszletek'] = array(
    'title' => t('részletek'),
    'page callback' => 'valami_form_reszletek',
    'callback arguments' => $id, 
    'access arguments' => array('access content'),
    'description' => t('Reszletek'),
    'type' => MENU_CALLBACK,
  );

a táblázatban generált mezők:

'<a href="http://server2/portal/?q=valami/form/reszletek/'$id'">'.link szovege.'</a>'

a funkcio:

function valami_form_reszletek_form($id="") {
  drupal_set_message($id);
  return $form;
}

(Drupal 6.2)

Egyáltalán jó fele indultam el?
köszi.

krampi képe

function valami_form_reszletek() {
  return drupal_get_form('valami_form_reszletek_form');
}
0
0
Pasqualle képe

a megoldas rendben van, jo uton vagy

itt talalsz egy peldat drupal 6ra:
http://drupal.hu/node/4079

a /lista/edit linket nezd hogyan van megoldva

0
0
krampi képe

Köszi, este megnézem.

0
0
krampi képe

az én menü részeletem:

$items['valami/reszletek/%'] = array(
    'title' => t('részletek'),
    'page callback' => 'drupal_get_form',
    'page arguments' => array('valami_reszletek', 2),
    'access arguments' => array('access content'),
    'description' => t('Reszletek'),
    'type' => MENU_CALLBACK,
  );

A link form eleme:

  $reszletek_link = (0) ? '' : l(t($valami->id), 'valami/reszletek/'. $valami->id);
  $form['reszletek'] = array(
  '#type' => 'markup',
  '#value' => $reszletek_link,
  );

ezt nem tettem bele, mert nem tudom mire jó:
'access callback' => 'user_access',

ebben a sorban mi a végén at a 2-es?
'page arguments' => array('valami_reszletek', 2),

A válasz a generált linkre, hogy az oldal nem található.

function valami_reszletek($id) {
 
  drupal_set_message($id);
  return $form;
}

köszi

0
0
Pasqualle képe

1. mire jo az 'access callback'
menu elem jogosultsag ellenorzese
acces callback = jogosultsag ellenorzo fuggveny neve
access argument = parameter

tehat a jogosultsag ellenorzes a user_access('access content') fuggvenyhivassal fog tortenni. Igy gondolom erted miert kapsz "oldal nem talalhato" valaszt ha nem toltod ki az 'access callback' reszt..

2. page arguments-ben mit jelent a 2
a menu elem utvonalanak 2. resze
tehat konkret pelda

'valami/reszletek/%'
0 = valami
1 = reszletek
2 = %

az a szoveg lesz a fuggveny parametere amit a % helyebe irsz
tehat pl valami/reszletek/115 bol drupal_get_form('valami_reszletek', 115) lesz ami a valami_reszletek(115) fuggvenyt fogja meghivni
0
0
Pasqualle képe

a hook_menu modositasa utan ujra kell generalni a menut, amit a modul ki es bekapcsolasaval el tudsz erni..

0
0
krampi képe

Nem tudom elérni a paramétert:

function valami_reszletek($id) {
  drupal_set_message($id);
  return $form;
}

Erre csak ezt irja ki:
array

egyik se jó:
$id[0]
$id->valami_resztletek
$id['valami_reszletek']

nagyon köszi

0
0
Pasqualle képe

milyen cimmel probaltad?
pl: /valami/reszletek/116-ra megjelenik a 116?

az "egyik se jo" reszt abszolut nem ertem. milyen peldak ezek?

0
0
Pasqualle képe

az kell megertened, hogy honnan jon oda az a 116 resz, melyik kodreszletbol, es akkor rajosz hol a hiba

0
0
Sweetchuck képe

1.) A drupal_set_message() string-et vár te pedig tömböt adsz. Ezért írja azt hogy: array (Lásd 2. pont)
Barba trükk:
 drupal_set_message('<pre>$varname = '.htmlentities(print_r($varname, true)).'</pre>');
(A devel modulban is van valami eszköz ilyenre)

2.)
A drupal_get_form() hívja meg a te űrlapépítő függvényedet - valami_reszletek() - ezáltal kötött az argumentum lista.

function valami_reszletek($form_state) {
  drupal_set_message('<pre>$form_state = '.htmlentities(print_r($form_state, true)).'</pre>');
  return array();
}

Fejből nem tudom, de lehet hogy a #parameters fogja tartalmazni a drupal_get_form() számára átadott változókat.

ui.:
Érdemes elolvasni a menu wildcard-okról szóló doksikat.
$item['mymodule/%mymodule_id'] = array(...)

function mymodule_id_load($path_part) {

}

function mymodule_id_to_arg($path_part, &$map, $index) {

}

0
0
krampi képe

Pár hónap kihagyás után ismét folytatni szeretném a progimat. Addig eljutottam, hogy a modulban generált link pl.:
http://server2/portal/?q=valami/reszletek/60
végére odateszi a paramétert, amit át szeretnék adni a meghivott valami_reszletek függvégynek.

Sajnos még nem jöttem rá, hogyan nyerhetem ki a paramétert a meghivott függvényben.

menü részlet:

  $items['valami/reszletek/%'] = array(
    'title' => t('részletek'),
    'page callback' => 'drupal_get_form',
    'page arguments' => array('valami_reszletek', 2),
	'access callback' => 'user_access',
    'access arguments' => array('access content'),
    'description' => t('Reszletek'),
    'type' => MENU_CALLBACK,
  );

a függvény

function valami_reszletek($valtozo) {
   drupal_set_message('<pre>$valtozo = '.htmlentities(print_r($valtozo,true)).'</pre>');
   return $form;
}

a függvény eredménye:
$form_state = Array
(
[storage] =>
[submitted] =>
[post] => Array
(
)

)

Ebből nem tudom még hogy hol a paraméter.

Lécci adjon valaki konkrét választ mert ez a rávezetős dolog nem jött be :-)
köszi

0
0
Pasqualle képe

function enmodulom_menu() {
  $items['valami/reszletek/%'] = array(
    'title' => 'Details',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('valami_reszletek_form', 2),
    'access callback' => 'user_access',
    'access arguments' => array('access content'),
    'description' => 'Details',
    'type' => MENU_CALLBACK,
  );
 
  return $items;
}
 
function valami_reszletek_form(&$form_state, $valtozo) {
  drupal_set_message($valtozo);
}
0
0
krampi képe

Nagyon köszi, működik.

Örök hála.

0
0
Sweetchuck képe

Érdemes használni a D6 menü rendszerének szolgáltatását, a kapott azonosítóval kapcsolatban.

jelen esetben a sor id-je lenne.

function enmodulom_menu() {
  //ez a sor változott
  $items['valami/reszletek/%enmodulom_valami'] = array(
    'title' => 'Details',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('enmodulom_valami_reszletek_form', 2),
    'access callback' => 'user_access',
    'access arguments' => array('access content'),
    'description' => 'Details',
    'type' => MENU_CALLBACK,
  );
 
  return $items;
}
 
/**
 * Ezt a függvényt a menü rendszer fogja meghívni.
 * Amennyiben a visszatérési érték FALSE akkor "Page Not Found" lesz.
 * Azért ez a neve, mert a hook_menu()-ben a % utáni rész +" _load" utótag.
 * Létezik egy "_to_arg" is.
 */
function enmodulom_valami_load($id) {
  return db_fetch_object(db_query("SELECT * FROM {enmodulom_valamik} WHERE id = '%d'", $id));
}
 
function enmodulom_valami_reszletek_form(&$form_state, $valami) {
  //Ilyenkor a $valami nem az URL második indexén lévő értéket kapja, hanem az enmodulom_valami_load() által visszaadottat.
  //Az űrlapépítésnél már nem kell foglalkozni az ellenőrzéssel.
  drupal_set_message('<pre>$valami = '. htmlentities(print_r($valami, TRUE)) .'</pre>');
}
0
0