2012-06-19 10 views
11

Wie kann ich eines der Seitenargumente in meinem Drupal-Menüelement als optionales Seitenargument festlegen?Optionales Argument in Drupal hook_menu-Implementierung

Ich habe

$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) 
); 

Wenn ich activities_list/76 beispielsweise ohne ein drittes Argument nennen werde ich eine Seite nicht gefunden Fehler. Wie kann ich den dritten Parameter als optionalen Parameter festlegen?

Danke!

Antwort

18

Es ist einfacher als Sie denken :). Legen Sie keine Argumente in Ihrem Pfad fest und übergeben Sie sie einfach an Ihre "Seitenrückruf" -Funktion.

$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'), 
); 

Und die Seite Callback-Funktion würde wie folgt aussehen:

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

Sie können den Titel der Seite mit dem folgenden Code ändern. (Nicht geprüft, bitte lassen Sie mich wissen, ob es funktioniert hat):

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

hoffe, das hilft ... Muhammad.

+0

Danke, es hat funktioniert. Ich habe ein Problem, dass das Titelargument nicht mehr funktioniert. –

+0

Eine Lösung für als hinzugefügt. Bitte versuchen Sie es und lassen Sie mich wissen, ob es funktioniert hat. –

+0

Dies wird eine Warnung ausgeben, wenn Sie der Callback-Funktion kein Argument übergeben. – JCharette

5

Ich glaube nicht, dass Sie können. Wenn Sie dies tun, anstatt mit nur einer Wildcard:

$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) 
); 

Dies wird dann für eine URL funktionieren wie activities_list/foo, aber wenn man dann eine URL wie activities_list/foo/bar hat können Sie immer noch erhalten der Wert von bar in der Seite Rückruf, wie es noch an diese Funktion von übergeben wird 'Seite Argumente' => Array (1,2).

Oder alternativ können Sie anrufen, indem Sie arg (2) in Ihrer Seite Rückruf verwenden.

Verwandte Themen