Aufrufen von Routinen
Eingetragen von t.sebesta (72)
am 27.08.2007 - 19:13 Uhr in
am 27.08.2007 - 19:13 Uhr in
Verständnisproblem-
ich habe ein Modul angelegt und kann es per node/Modul aufrufen. Es tut auch was es soll :)
Wenn ich aber jetzt eine externe datenbank (als Modul) einbinde habe ich ja viele Funktionen die die Datenbank erfüllen soll. Wie mache ich es, dass node/Modul/irgendetwas funktioniert bzw ich so aufrufen kann um Menüs bzw. Links generieren kann? Wie übergebn ich also argumente?
Gruß
Thomas
- Anmelden oder Registrieren um Kommentare zu schreiben
Verständnisproblem
am 28.08.2007 - 00:14 Uhr
Da hab ich jetzt ein Verständnisproblem. Welches Modul lässt sich über 'node/modul' aufrufen? Und was tut es dann?
Meinst du vielleicht etwas anderes?
vg
--
md - DrupalCenter
mdwp* :: Drupal Services
vg
md - DrupalCenter.de
mdwp* Drupal Consulting & Services
nochmal andersrum
am 28.08.2007 - 06:57 Uhr
GEbe zu, dass war ein formulierungsschnellschuss nach 4 Stunden Versuch, andersrum nochmals:
Ich habe vor eine externen Datenbank für Literatur über ein Modul an Drupal anzubinden.
ein Modul dsfdb als Grundmodul, das die datenbank einbindet und grundsätzliche Funktionen zur Verfügung stellt.
Dann sollen die Einzelnen Schwerpunkte nach und nach als Zusatzmodule eingebunden werden wie
dsfdb/Autor - Funtionen zu Autoren
dsfdb/Verlage - Funktionen zu Verlagen
usw.
Ich habe jetzt geschafft, ein Grundmodul zu coden und dieses über einen Menüpunkt dazuzubringen mal irgendetwas zu tun. Gut. Ich kann das Modul über die Funktion dsfdb_menu aufrufen.
Wennn ich aber jetzt ein Modul habe wie dsfdb-Autor, so gibt's dann ja mehrere Dinge die erledigt werden sollen. Ich will/brauche Aufrufe wie:
dsfdb-Autor/add
dsfdb-Autor/delete
usw.
und im Modul muss ich dann verschiedene Funktionen aufrufen.
Ich habe versucht das über das Modul Node nachzuvollziehen, wie die Argumente übergeben werden und vom Pfad getrennt werden um verschiedene Menüaufrufe zu bekommen, hab's aber nicht geschafft das zu kapieren?
die Funktion:
function dsfdb_menu() {
$items = array();
$items[] = array(
'path' => 'admin/settings/dsfdb',
'title' => t('dsfdb'),
'callback' => 'drupal_get_form',
'callback arguments' => 'dsfdb_admin',
'access' => user_access('access administration pages'),
'type' => MENU_NORMAL_ITEM,
);
$items[] = array(
'path' => 'dsfdb',
'title' => t('dsfdb'),
'callback' => 'dsfdb_all',
'access' => user_access('access dsfdb content'),
'type' => MENU_CALLBACK
);
return $items;
}
Ich kann nicht nachvollziehen wie diese Funktion aufgerufen wird und wie ich zu den Argumenten kommen kann, die ich brauche um mehrere verschiedene Menüs zu bekommen?
Gruß
Thomas
Funktionen (hooks)
am 28.08.2007 - 09:30 Uhr
Was du dort geschrieben hast ist eine sog. Hook-Funktion. Hooks werden von Drupal automatisch aufgerufen. Darum brauchst du dich nicht zu kümmern.
Deine Funktionen hast du bereits im Menü Array als callback definiert. Den ersten Callback mit Argumenten, die von Drupal automatisch mit übergeben werden. Da dein erster Callback eine Drupal Form Api Funktion ist, musst du jetzt in deinem Modul eine Form mit dem Namen 'dsfdb_admin' generieren. Den Namen hast du als Callback Argument definiert und die Funktion drupal_get_form($form_id) erwartet als Argument die id einer Form.
Für deinen zweiten Callback schreibst du einfach eine Funktion dsfdb_all().
vg
--
md - DrupalCenter
mdwp* :: Drupal Services
vg
md - DrupalCenter.de
mdwp* Drupal Consulting & Services
Die gepostete Routine
am 28.08.2007 - 10:28 Uhr
Die gepostete Routine funktioniert ja auch schon und dsfdb_all liefert schon das was es soll.
Mir gehts jetzt darum, dass ich zb eine Funktion dsfdb_showAutor brauche und diese über ein Menü aufrufen will. Ich muss also nach meinem Verständnis einen callback auf diese Funktion machen.
Items ist aber jetzt mit der geposteten Funktion besetzt.
Durch zB den Drupal-Aufruf dsfdb werden zB alle Datensätze angezeigt durch dsfdb/autor sollen eben dann nur Autoren angezeigt werden. Ich benötige also eine Weiche die den richtigen callback setzt. Wie erhalte ich aber jetzt das Argument für die Weiche damit ich eine Auswahl treffen kann.
Gibt's eine drupal-Funkton, die mir den String zerlegt oder muss ich das selbst machen.
Vermutlich fehlt mir da noch das grundsätzliche Verständnis.
zB
function dsfdb_menu() {
$items = array();
$items[] = array(
'path' => 'admin/settings/dsfdb',
'title' => t('dsfdb'),
'callback' => 'drupal_get_form',
'callback arguments' => 'dsfdb_admin',
'access' => user_access('access administration pages'),
'type' => MENU_NORMAL_ITEM,
);
if ($variable == "Autor") {
$items[] = array(
'path' => 'dsfdb_autor',
'title' => t('dsfdb_autor'),
'callback' => 'dsfdb_Autor',
'access' => user_access('access dsfdb content'),
'type' => MENU_CALLBACK
);
}
else {
$items[] = array(
'path' => 'dsfdb',
'title' => t('dsfdb'),
'callback' => 'dsfdb_all',
'access' => user_access('access dsfdb content'),
'type' => MENU_CALLBACK
);
}
oder so ähnlich. Oder muss ich das anders angehen?
Kurz: wie teile ich dem System mit, dass es in dem Modul mehrere Drupal-Aufrufe gibt die ich dann in verschiedenen Menüs verwenden kann?
Gruß
Thomas
return $items;
}
Mehrere Callbacks
am 28.08.2007 - 10:39 Uhr
Warum sollte items durch die erste Funktion besetzt sein. Du kannst in dem Array soviele Menüitems erzeugen wie du möchtest. Hinter jedem Menüitem liegt dann ein Callback auf die von dir definierte Funktion. Jedes Menüitem benötigt natürlich einen anderen Path. Aber das hast du ja schon so gemacht.
Oder versteh ich dich falsch?
vg
--
md - DrupalCenter
mdwp* :: Drupal Services
vg
md - DrupalCenter.de
mdwp* Drupal Consulting & Services
ahh-ha, jetzt sehe ich schon
am 28.08.2007 - 11:01 Uhr
ahh-ha,
jetzt sehe ich schon klarer.
Ich kann einfach die Items (sprich in Items[] sammeln sich alle Menü-Aufrufe der Installation) erzeugen die ich in einem Modul brauche und Drupal übernimmt diese automatisch durch die Funktion (modulname)_menu(). Der Pfad den ich dort angebe ist dann der, mit dem ich die Funktion eben dann erreiche. Das war mir bisher nicht klar.
Drupal gefällt mir immer besser :)
Gruß
Thomas
Menüsystem
am 28.08.2007 - 11:53 Uhr
Ja so ist das. Und über den 'type' kannst du über Konstante festlegen, ob und wo dazu auch ein Menüpunkt für die Navigation oder als Tab generiert werden soll.
Bsp.:
MENU_NORMAL_ITEM - Navigation
MENU_LOCAL_TASK - Tab
MENU_CUSTOM_MENU - Neues Menü
MENU_CALLBACK - kein Menüitem, aber im Breadcrumb
usw.
vg
--
md - DrupalCenter
mdwp* :: Drupal Services
vg
md - DrupalCenter.de
mdwp* Drupal Consulting & Services