Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

Wie erstelle ich Unterseiten mit bestimmten URLs?

Eingetragen von martin.kaintz (12)
am 10.09.2010 - 18:12 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

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

‹ (gelöst)Der höchsten nid Wert aus der DB Revert revision ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Das könnte mit pathauto und

Eingetragen von caw (2762)
am 10.09.2010 - 18:51 Uhr

Das könnte mit pathauto und token gehen

  • Anmelden oder Registrieren um Kommentare zu schreiben

kein Plan

Eingetragen von martin.kaintz (12)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Du könntest einfach in den

Eingetragen von Exterior (2903)
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_menu

  • Anmelden oder Registrieren um Kommentare zu schreiben

perfekt!

Eingetragen von martin.kaintz (12)
am 18.09.2010 - 15:20 Uhr

hi!

danke danke danke!
perfekt :)

lg

  • Anmelden oder Registrieren um Kommentare zu schreiben

leider wieder ein problem...

Eingetragen von martin.kaintz (12)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich weiß zwar nicht, wie die

Eingetragen von Exterior (2903)
am 22.10.2010 - 19:30 Uhr

Ich weiß zwar nicht, wie die Funktionen abc_photo_photo und abc_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) und example (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 allerdings photo/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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

danke!

Eingetragen von martin.kaintz (12)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
Weiter

Neue Kommentare

  • Inzwischen sind wir bei
    vor 1 Tag 15 Stunden
  • Migrieren von D7 auf D8/ D10/ D11
    vor 2 Tagen 8 Stunden
  • melde mich mal wieder, da ich
    vor 7 Wochen 6 Tagen
  • Hey danke
    vor 8 Wochen 6 Stunden
  • Update: jetzt gibt's ein
    vor 8 Wochen 1 Tag
  • Hallo, im Prinzip habe ich
    vor 8 Wochen 5 Tagen
  • Da scheint die Terminologie
    vor 8 Wochen 5 Tagen
  • Kannst doch auch alles direkt
    vor 9 Wochen 2 Tagen
  • In der entsprechenden View
    vor 9 Wochen 2 Tagen
  • Dazu müsstest Du vermutlich
    vor 9 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250235
Registrierte User: 20462

Neue User:

  • marouane.blel
  • capilclinic
  • Quabzibboter

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 13 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association