Wie erstelle ich Unterseiten mit bestimmten URLs?
Eingetragen von martin.kaintz (12)
am 10.09.2010 - 18:12 Uhr in
am 10.09.2010 - 18:12 Uhr in
Hallo!
Ich bin gerade dabei, ein Modul zu schreiben, mit dem man Events verwalten und anzeigen kann. Dabei werden die Events nach der Jahreszahl gegliedert.
Es soll also auf jeder Übersichtsseite eine Liste (2010 | 2009 | 2008) angezeigt werden und darunter die Events vom ausgewählten Jahr. Die URL sollte dann so aussehen: "/myevent/2009". Normalerweise würde ich im module-file hook_menu() aufrufen und zum array $items zb. folgendes hinzufügen: '/myevent/%year/'. Aber wie genau mache ich das, denn so funktioniert es natürlich nicht!? Ich hab das bis jetzt nur mit node-ids gemacht und noch dazu hab ich immer mit tab-pages gearbeitet.
Danke für die Hilfe!
lg Martin
- Anmelden oder Registrieren um Kommentare zu schreiben
Das könnte mit pathauto und
am 10.09.2010 - 18:51 Uhr
Das könnte mit pathauto und token gehen
C.A.W. Webdesign
kein Plan
am 18.09.2010 - 13:12 Uhr
hallo!
erstmal danke für den tipp, aber ich habe keinen plan, wie ich die beiden module einsetzen könnte. ich habe ewigkeiten gegoogelt, aber nichts passendes gefunden.
irgendwie kann ich pathauto nicht in mein modul integrieren und zu token finde ich keine verbindug zum pfad.
es müsste doch irgendwie gehen, dass ich in hook_menu() zb. $items['node/myevent/%year'] = array(... rein schreibe und dann den platzhalter %year irgendwie auflöse. oder?
bitte helft mir!
danke!
lg
Du könntest einfach in den
am 18.09.2010 - 14:43 Uhr
Du könntest einfach in den Pfad bei hook_menu einen Platzhalter einbauen und dann an die Callback-Funktion den ersetzten Wert als Argument übergeben.
Beispiel:
<?php
function my_module_menu()
{
$items = array();
//item mit Platzhalter im Pfad
$items['myevent/%'] = array(
'title' => 'Mein Event',
'page callback' => 'my_modul_event',
'page arguments' => array(1),
'access arguments' => array('meine eigenen Permissions'),
'type' => MENU_CALLBACK
);
return $items;
}
function my_modul_event($year)
{
return "Hallo Welt! Es wurde das Jahr $year als Argument übergeben.";
}
?>
Mit 'page arguments' übergibst du Argumente an die Callback-Funktion. arg(1) bedeutet, dass das zweite URL-Argument übergeben wird. arg(0) wäre hier "myevent" und arg(1) ist dann der Wert, der anstelle des %-Zeichens eingegeben wurde.
Und wenn nun z.B. jemand example.com/myevent/2009 aufruft, bekommt er als Ausgabe "Hallo Welt! Es wurde das Jahr 2009 als Argument übergeben."
Das Argument kann man dann natürlich ganz beliebig verwenden. Ich bin mir nicht ganz sicher, aber ich denke, das dürfte der Weg sein, den du suchst.
Übrigens:
'type' => MENU_CALLBACK
registriert einfach nur den Pfad in die Menu-Registry und verknüpft diesen Pfad mit der Callback-Funktion. Du kannst auch MENU_NORMAL_ITEM verwenden oder was anderes. Die Möglichkeiten stehen auf der API-Page von hook_menuperfekt!
am 18.09.2010 - 15:20 Uhr
hi!
danke danke danke!
perfekt :)
lg
leider wieder ein problem...
am 22.10.2010 - 16:27 Uhr
Hallo!
Nachdem das beim letzten Mal wunderbar geklappt hat, wollte ich bei einem anderen Modul gleich nochmal Ähnliches einbauen.
Leider ohne Erfolg.
Hier ist mein Code:
<?php
function abc_photo_menu(){
$items = array();
$items['photo'] = array(
'title' => t('Fotos'),
'page callback' => 'abc_photo_photo',
'page arguments' => array(1),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
'weight' => 20,
);
$items['photo/upload/%'] = array(
'title' => t('Foto uploaden'),
'page callback' => 'abc_photo_upload',
'page arguments' => array(1),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
'weight' => 20,
);
return $items;
}
function abc_photo_upload($aid){
return $aid;
}
?>
Wenn ich die Seite photo/upload/3 aufrufe, erhalte ich bloß den Text 'upload'.
Ich habe echt keinen Plan was ich falsch gemacht habe! Eigentlich habe ich alles so wie beim letzten Mal gemacht!
Danke für die Hilfe!
lg
Ich weiß zwar nicht, wie die
am 22.10.2010 - 19:30 Uhr
Ich weiß zwar nicht, wie die Funktionen
abc_photo_photo
undabc_photo_upload
aussehen, aber folgende Dinge könnten Probleme bereiten:Bei deinem ersten Item (
$items['photo']
) steht "'page arguments' => array(1)" --> das ist im Grunde Unsinnig. Verlangt die Funktion abc_photo_photo überhaupt Parameter, die übergeben werden müssen? Und vor allem: Dein Item-Pfad hat kein Argument Nummer 1.Mal zur Erklärung:
"page arguments" => array(1)" bedeutet, dass aus deinem Item-Pfad das Argument Nummer 1 übergeben wird. Dies funktioniert entsprechend der arg()-Funktion. Wenn du also den Pfad foo/bar/example hast, dann hast du drei Argumente, beginnend bei 0 =>
foo
(Argument 0),bar
(Argument 1) undexample
(Argument 2). Und wenn man bei "page arguments"array(1)
angibt, dann wird eben auch arg(1) verwendet, in meinem Beispiel wird also "bar" übergeben. Dein Pfad lautet aber nur "photo", welches arg(0) darstellt. Ergo hast du kein arg(1) und kannst somit auch kein arg(1) übergeben.Pfuh, ich hoffe mal, die Nachricht kam rüber ^^
An dieser Stelle ist das vermutlich nicht so kritisch, dann wird eben ein leerer String an die Funktion übergeben, die sich dafür eh nicht interessiert. Aber das gleiche Problem taucht bei deinem 2. Item auf:
Auch dort hast du
array(1)
angegeben, dein Pfad lautet allerdingsphoto/upload/%
- ich nehme mal an, dass du an die Callback-Funktion den Wert des Platzhalters % übergeben willst. Entsprechend der obigen (verwirrenden) Erklärung ist das Argument Nummer 1 in deinem Pfad allerdings "upload", also wird der String "upload" an deine Funktion übergeben. Wie gesagt, keine Ahnung, was die dann damit machen soll. Wenn du allerdings den Wert von % übergeben willst, musst du "'page arguments' => array(2)
" verwenden, denn dann wird arg(2) übergeben und dort steht dann die Ersetzung für den Platzhalter drin.danke!
am 22.10.2010 - 21:28 Uhr
hi!
du bist mein retter! ich hab eigentlich nie gewusst, was 'page arguments' eigentlich macht und hab das einfach kopiert :)
deine erklärung war durchaus verständlich! vielen dank für die mühe! ich hoffe du kannst nicht nur mir, sondern auch anderen damit helfen!
lg