2012-06-19 17 views
11

Jak ustawić jeden z argumentów strony w moim menu drupalnym jako opcjonalny argument strony?Opcjonalny argument w implementacji hook_menu Drupala

mam

$items['activities_list/%/%']=array(
'title callback' => 'activities_list_title', 
'title arguments' =>array(1), 
'description' =>'All the Indicators divided by Coutry', 
'page callback' => 'activities_list', 
'access arguments' => array('access ppi'), 
'page arguments' => array(1,2) 
); 

Jeśli zadzwonię activities_list/76, na przykład bez trzeciego argumentu otrzymam strony nie znaleziono błąd. Jak ustawić trzeci parametr jako opcjonalny?

Dzięki!

Odpowiedz

18

To łatwiejsze niż myślisz :). Nie ustawiaj żadnych argumentów na swojej ścieżce i po prostu przekazuj je do funkcji "Oddzwanianie strony".

$items['activities_list']=array(
    'title callback' => 'activities_list_title', 
    'description' =>'All the Indicators divided by Coutry', 
    'page callback' => 'activities_list', 
    'access arguments' => array('access ppi'), 
); 

a funkcja zwrotna strona będzie wyglądać następująco:

function activities_list($arg1, $arg2) 
{ 
    // Your code goes here... 
    drupal_set_title(activities_list_title($arg1, $arg2)); 
} 

Można zmienić tytuł strony przy użyciu następującego kodu. (Nie testowałem, uprzejmie daj mi znać, jeśli zadziałało):

function activities_list_title($arg_1, $arg_2) 
{ 
    $title = ""; 
    // Your code goes here 
    return $title; 
} 

Mam nadzieję, że to pomoże ... Muhammad.

+0

Dzięki temu zadziałało. Mam problem, że argument tytułowy już nie działa. –

+0

Dodano rozwiązanie dla niż. Uprzejmie spróbuj i daj mi znać, czy zadziałało. –

+0

Spowoduje to wyświetlenie ostrzeżenia, jeśli nie zostanie przekazany żaden argument do funkcji zwrotnej. – JCharette

5

Nie sądzę, że możesz. Jeśli tak to zamiast tylko jednego zamiennika:

$items['activities_list/%']=array(
    'title callback' => 'activities_list_title', 
    'title arguments' =>array(1), 
    'description' =>'All the Indicators divided by Coutry', 
    'page callback' => 'activities_list', 
    'access arguments' => array('access ppi'), 
    'page arguments' => array(1,2) 
); 

To będzie wtedy pracować dla URL podobny activities_list/foo, ale jeśli potem miał URL jak activities_list/foo/bar wciąż można dostać wartość bar w wywołaniu strony, ponieważ jest nadal przekazywana do tej funkcji przez 'argumenty strony' => array (1,2).

Lub można go wywołać za pomocą arg (2) w wywołaniu strony.

Powiązane problemy