2009-08-10 4 views
0

Ich habe eine Seite, die definitiv keine Form ist, aber ich muss einige Callback-Funktionen verwenden, um Daten von einer externen Quelle zu laden und anzuzeigen (zB eine Liste von Gebäuden auf dem Campus und ihre Informationen zur Barrierefreiheit).Drupal Modul Entwicklung hook_menu() Für Semi Statische Seiten

Was ich brauche, ist eine Landing-Listing-Seite (listet alle Gebäude auf) und eine Seite "Einzelgebäude anzeigen". Außerdem habe ich eine Seite, auf der Sie Ihren Studentenausweis eingeben und Informationen zu Testverfahren einsehen können. Und schließlich habe ich eine Seite, die im Grunde eine Form ist (die ich in der Vergangenheit erfolgreich gemacht habe).

Jetzt habe ich HAD die Gebäude Liste arbeiten, aber ich machte eine kleine Veränderung und es hörte auf zu arbeiten!

Derzeit meine hook_menu() Funktion sieht wie folgt:

<?php 
/** 
* Implementation of hook_menu() 
*/ 
function disability_menu() 
{ 
    $items = array(); 

    // Ignore me, shell 
    $items['quickreg'] = array(
     'title' => 'Quick Registration', 
     'description' => t(''), 

     'page callback' => 'drupal_get_form', 
     'page arguments' => array(), 
     'file' => 'disability.quickreg.view.inc', 

     'access arguments' => array('access quick registration system'), 

     'type' => MENU_SUGGESTED_ITEM, 
    ); 

    $items['tests/status'] = array(
     'title' => 'Test Status Results', 
     'description' => t('Check on the status of your tests'), 

     'page callback' => 'disability_view_testing_status', 
     'page arguments' => array(), 
     'file' => 'disability.tests.view.inc', 

     'access arguments' => array('access test check information'), 

     'type' => MENU_CALLBACK, 
    ); 

    $items['tests'] = array(
     'title' => 'Testing Services', 
     'description' => t('Check on the status of your tests'), 

     'page callback' => 'disability_view_testing', 
     'page arguments' => array(), 
     'file' => 'disability.tests.view.inc', 

     'access arguments' => array('access test check information'), 

     'type' => MENU_SUGGESTED_ITEM, 
    ); 

    $items['access/%building'] = array(
     'title' => 'Campus Accessibility Guide', 
     'description' => t('A summary list of detailed accessibliity information about each building on the A&M campus'), 

     'page callback' => 'disability_view_access', 
     'page arguments' => array(1), 
     'file' => 'disability.access.view.inc', 

     'access arguments' => array('access building access information'), 

     'type' => MENU_SUGGESTED_ITEM, 
    ); 

    return $items; 
} 

Vor einiger Änderung, die ich für „Campus Accessibility Guide“ den Menüpunkt gemacht haben muss richtig zeigen würde (nach natürlich aktiviert werden). Die /access url funktionieren würde richtig eine Liste aller Gebäude Anzeige und die /access/12345 korrekt die einzelnen Datensatz von ID # 12345

Nun ist die access/%building Menüeintrag sendet nicht einmal zeigt, und sogar die URL /access in eine Umleitungsschleife angezeigt werden würde (lässt mich denken, dass es in etwas für die ID übergibt, die es in die Ansicht-spezifische Funktion sendet, die an /access umleitet, wenn die ID nicht existiert).

Kann mir jemand sagen, was ich falsch mache oder was ich tun muss, um 2 Themenseiten zu unterstützen: ein /access und /access/%building URL-Muster?

+1

Haben Sie noch eine 'building_load()' -Funktion zum Auffüllen von '% building'? – ceejayoz

+0

@ceejayoz Ich habe keine 'building_load()' -Funktion, da ich sie gerade in die Callback-Funktion geladen habe. Wäre es besser, wenn ich es einfach auf '%' fallen lasse oder ein 'building_load()' erstellt hätte? – dcousineau

Antwort

1

Sie sollten% name anstelle von% nur in urls verwenden, wenn Sie eine Funktion haben, die Sie auf die URL anwenden möchten. Drupal macht das überall mit Benutzer und Knoten, und das ist sehr schlau, da Sie nur einen Ort brauchen, um den Code zum Laden eines Benutzers oder eines Knotens zu haben, aber er wird an vielen Orten verwendet. In diesem Fall wette ich, dass es etwas übertrieben ist, eine Funktion zum Laden des Gebäudes zu machen. Auf der anderen Seite ist der Vorteil, dass wenn man es so macht, man die 404 Behandlung bekommt, wenn kein Objekt gefunden werden kann. Die beste Lösung hängt wirklich davon ab, wie Sie mit Gebäuden umgehen wollen, die nicht existieren. Sie könnten sogar Ihre "Campus Accessibility Guide" -Funktion mit dem 404 umgehen, wodurch die beiden Optionen mehr oder weniger gleich wären. Ich würde mich für das entscheiden, was am einfachsten für Sie ist.

+0

Wenn ich es jetzt in '$ items ['access /%'] = // ...' ändere, erscheint es immer noch nicht mehr in der Menüliste ... – dcousineau

+0

Macht nichts, ich habe einen neuen Menüeintrag mit einfachem Zugriff hinzugefügt (Jetzt Zugriff und Zugriff /% auf ihre jeweiligen Funktionen zeigen). Es funktioniert jetzt! – dcousineau