hook_menu tab url

Anonymous képe

Sziasztok!

Van egy aloldal, amit a /admin/valami/edit/[id] címen lehet elérni, ahol az [id] egy szám.
Amikor megnyitom a lapot az "a" nevű függvény szépen megkapja paraméterben az [id] -t.
Viszont ha egy másik fület nyitok meg, akkor az [id] elvész. Hogy tudom megcsinálni, hogy ha a második fülre kattintok, akkor a "b" függvény megkapja paraméterként?

    $items[] = array(
      'path' => 'admin/valami/edit',
      'callback' => 'drupal_get_form',
      'callback arguments' => array('a'),
      'type' => MENU_CALLBACK,
    );
    $items[] = array(
      'path' => 'admin/valami/edit/ful1',
      'type' => MENU_DEFAULT_LOCAL_TASK,
      'title' => t('1'),
      'callback' => 'drupal_get_form',
      'callback arguments' => array('a'),
    );
    $items[] = array(
      'path' => 'admin/valami/edit/ful2',
      'type' => MENU_LOCAL_TASK,
      'title' => t('2'),
      'callback' => 'drupal_get_form',
      'callback arguments' => array('b'),
    );
    $items[] = array(
      'path' => 'admin/valami/edit/ful3',
      'type' => MENU_LOCAL_TASK,
      'title' => t('3'),
      'callback' => 'drupal_get_form',
      'callback arguments' => array('c'),
    );
Sweetchuck képe

Szia!

Nem lehet, hogy az eredeti kód az egy kicsit más milyen? Csak a fórum kedvéért egy kicsit átírtad.

Első ránézésre azt mondanám hogy az admin/valami/edit útvonal típusa legyen inkább MENU_NORMAL_ITEM. (kicsi az esély hogy segít.)

Amit inkább furcsának látok az a drupal_get_form() függvénynek átadott paraméterek.
Ezt érdemes megnézni hook_forms().
Ez alapján így kéne kinéznie:

function mymodule_forms()
{
  $forms['mymodule_a_form'] = array(
    'callback' => 'mymodule_a_form',
  );
  $forms['mymodule_b_form'] = array(
    'callback' => 'mymodule_b_form',
  );
  $forms['mymodule_c_form'] = array(
    'callback' => 'mymodule_c_form',
  );
  return $forms;
}
function mymodule_a_form()
{
 
}
function mymodule_a_form_validate($form_id, $edit, $form)
{
 
}
function mymodule_a_form_submit($form_id, $edit)
{
 
}
 
function mymodule_b_form()
{
 
}
function mymodule_b_form_validate($form_id, $edit, $form)
{
 
}
function mymodule_b_form_submit($form_id, $edit)
{
 
}
 
function mymodule_c_form()
{
 
}
function mymodule_c_form_validate($form_id, $edit, $form)
{
 
}
function mymodule_c_form_submit($form_id, $edit)
{
 
}

A fentiek tükrében a hook_menu()-t is módosítani kell.
function mymodule_menu($may_cache)
{
  //...
  $items[] = array(
      'path' => 'admin/valami/edit/ful3',
      'type' => MENU_LOCAL_TASK,
      'title' => t('3'),
      'callback' => 'drupal_get_form',
      'callback arguments' => array('mymodule_c_form'),
    );
  //...
}

Eddig ugyan az mint a te kódod csak más nevekkel.

/admin/valami/edit/[id] címen lehet elérni, ahol az [id] egy szám.

Hiányzik az azonosítók kezelése.

Például az admin/valami/edit/51 útvonal kezelése ugyan az lesz mint a admin/valami/edit útvonal kezelése.
Ha szeretnéd külön kezelni

function mymodule_menu($may_cache)
{
	if(!$may_cache)
	{ 		
		if($arg3 = arg(3) AND is_numeric($arg3))
		{
			//Lekérdezni hogy a $arg3-ban lévő szám az valóban egy érvényes azonosító-e
			$items[] = array
			(
				'path' => "admin/valami/edit/$arg3",
				'callback' => 'drupal_get_form',
				'callback arguments' => array('mymodule_a_form', $arg3),
			);
		}
	}
}
 
function mymodule_a_form()
{
	$form = array();
 
	foreach(func_get_args() as $index => $arg)
	{
		$form[$index] = array
		(
			'#type' => 'item',
			'#title' => "Argument $index = ",
			'#value' => '<pre>' . htmlentities(print_r($arg, true)) . '</pre>',
		);
	}
 
	return $form;
}
0
0
Anonymous képe

Csak az útvonal és függvény neveket írtam át, a több hajszálra ilyen volt.

A második és a harmadik fül már szépen megy.
Az első fül viszont az "admin/valami/edit" -re mutat, hiába fűztem a path -hoz nála is a $arg3 -et. A szülője útvonala számít. :-(

0
0
Sweetchuck képe

A leírtak szerint úgy is kell müködnie.

  $items[] = array(
      'path' => 'admin/valami/edit',
      'callback' => 'drupal_get_form',
      'callback arguments' => array('a'),
      'type' => MENU_CALLBACK,
    );
    $items[] = array(
      'path' => 'admin/valami/edit/ful1',
      'type' => MENU_DEFAULT_LOCAL_TASK,
      'title' => t('1'),
      'callback' => 'drupal_get_form',
      'callback arguments' => array('a'),
    );

Mind a két PATH ugyanazt a függvényt, ugyan olyan argumentumokkal hívja meg.

0
0