Wie verwende ich URL-Parameter und Seitenrückrufe für Registerkartenmenüs richtig?

7

Ich verwende Drupal 6 und versuche, zwei Registerkarten (Menüs) auf einer Seite mit der URL / Vehicle_info anzuzeigen. Beide Seiten, auf die die Registerkarten verweisen, sollten die NID eines Knotens als Parameter verwenden. Mein aktueller Code sieht wie folgt aus:

  $items['vehicle_info/%/basic'] = array(
    'title' => t('Basic & Bookings'),
    'page arguments' => array(1),
    'access callback' => 'user_access',
    'access arguments' => array('administer fleet'),
    'type' => MENU_DEFAULT_LOCAL_TASK,
    'weight' => 10
   );
  $items['vehicle_info/%/history'] = array(
    'title' => t('Service history'),
    'page callback' => 'vehicle_service_history',
    'page arguments' => array(1),
    'access arguments' => array('administer fleet'),
    'type' => MENU_LOCAL_TASK,
    'weight' => 20
   );

Ich habe zwei Probleme:

  1. Die Registerkarte "Serviceverlauf" öffnet nicht die Seite "Fahrzeug_Service_Historie" (die eigentlich eine Ansicht mit der URL Fahrzeug_Service_Historie ist). Es öffnet sich eine Seite mit der URL "Vehicle_info / 123 / history", die nicht existiert (123 steht für die aktuelle nid).
  2. Die Standardregisterkarte "Basic & Bookings" verlinkt nicht auf die URL "Fahrzeuginfo / 123", sondern nur auf "Fahrzeuginfo".

Was vermisse ich?

trommeln_katze
quelle

Antworten:

0

Ein paar Dinge scheinen hier zu fehlen. Die Hauptverwirrung scheint darin zu liegen, page callbackwelche Funktion keine URL sein sollte. Die URL ist der Schlüssel zu Ihrem $itemsArray.

  1. Ihr erster Menüpunkt hat keinen "Seitenrückruf". Dies würde vom übergeordneten Element (verschlüsselt als $items['vehicle_info/%']und eine Art von MENU_NORMAL_ITEM) geerbt, wenn Sie eines hätten, aber Sie tun es nicht.
  2. Ihr zweites Menüpunkt scheint die URL ebenfalls mit dem Rückruf zu verwechseln. Wenn Sie möchten, dass es von einer Ansicht verarbeitet wird, sollte Ihre Seitenanzeige in Ihrer Ansicht den URL-Pfad verarbeiten vehicle_info/%/history, dh, es wird ein Kontextfilter vorhanden sein. Funktioniert Ihre Ansicht so?
Malks
quelle
0

Wenn Fahrzeuge ein Inhaltstyp sind, der sich zufällig unter dem Pfad 'Fahrzeug_info' befindet, können Sie dies erheblich vereinfachen. Erweitern Sie die regulären Kernregisterkarten

$items['node/%node/basic'] = array(
  'title' => t('Basic & Bookings'),
  'page arguments' => array(1),
  'access callback' => 'vehicle_administer_fleet',
  'access arguments' => array(1),
  'type' => MENU_LOCAL_TASK,
  'weight' => 10
);
$items['node/%node/history'] = array(
  'title' => t('Service history'),
  'page callback' => 'vehicle_service_history',
  'page arguments' => array(1),
  'access callback' => 'vehicle_administer_fleet',
  'access arguments' => array(1),
  'type' => MENU_LOCAL_TASK,
  'weight' => 20
);

Sie müssen auch den benutzerdefinierten Zugriffsrückruf definieren

function vehicle_administer_fleet($node) {
  return $node->type == 'vehicle' && user_access('administer fleet');
}

Dies ist, was Drupal Core für seine eigenen Knoten-Registerkarten tut. Meistens ist es am besten, die Konsistenz aufrechtzuerhalten

wiifm
quelle
Vielen Dank, ich würde es gerne versuchen, aber ich bin mir nicht sicher, was Sie unter "Wenn Fahrzeuge ein Inhaltstyp sind, der zufällig unter dem Pfad 'Fahrzeug_info' steht" verstehen. Wie können Sie festlegen, dass sich ein Inhaltstyp unter einem Pfad befindet?
Drumming_cat
0

Du bist falsch gelaufen !!!
Mit Ansichten können Sie ganz das erreichen, was Sie wollen.

Erstellen Sie eine Aussicht, fügen Sie Ihr Feld , wie Sie mögen, Set Seite Url node/*/basicim Hinblick Menü Abschnitt (unten Seiten - URL) wählen Menüreiter mit Ihnen Titeln ( siehe dieses für weitere Informationen über Menüreiter mit Ansichten erstellen). Außerdem können Sie im Bereich Zugriff auswählen, wer diese von Ansichten erstellte Seite sehen kann.

Ich denke du weißt wirklich nicht wie mächtig Ansichten wirklich sind;).

Yuseferi
quelle