Funktionsweise LinkHandler - wie bekomme ich eine korrekte URL ?

  • Hallo,

    Ich versuche gerade mir ein eigenes Plugin zu schreiben.

    Das funktioniert soweit. Allerdings nicht ganz wie ich möchte. Ich bekomme eine funktionierende URL zurück => https://mypage/lexicon/entry/938/ ... korrekt wäre allerdings https://mypage/lexicon/entry/938-xyz-titel/ !?

    Was mache ich falsch? Was habe ich ggf. vergessen? Leider komme ich nicht ganz klar mit der Doku. Für jeden Tipp bin ich dankbar.

    VG

    • Official Post

    LinkHandler::getInstance()->getLink('Entry', array('application' => 'lexicon', 'object'=> $objectInstance));.

    Du übergibst nur die ID. Wenn du eine Objekt-Instanz (Parameter object) übergibst, und diese das Interface IRouteController implementiert, wird die URL automatisch mit einem Titel versehen. Alternativ musst du, neben dem Parameter id, den Parameter title übergeben.

    LinkHandler::getInstance()->getLink('Entry', array('application' => 'lexicon', 'id' => 1337,'title'=> 'Awesome title'));

  • Würde das gerne kurz wieder aufgreifen, auch wenn das Thema etwas älter ist. Das ist alles so weit klar, aber bekomme ich es auch hin das nur der Name in der URL angezeigt wird ohne die ID? Also statt:

    beispiel.de/989

    sowas wie

    beispiel.de/mein-title

    Wobei dies natürlich datenbank technisch die 989 ist.

    Grüße

  • Für welche Einträge?

    Den Link erzeugen wird zwar kein Problem sein, das sollte der LinkHandler zwar machen, das größere Probleme wird eher sein, das dadurch dann ein Eintrag gefunden wird.

    Weil das System bräuchte die ID um dann herauszufinden um welchen Eintrag es sich handelt.

    Das ganze lässt sich zwar umsetzen, wenn man dann einen eigenen IRequestRoute implementiert, nur muss man dann beachten, das dies sich nicht mit den URLs des CMS, sprich der eigenen Seite überschneidet.

  • Für welche Einträge?

    Erst einmal danke für die Antwort. Nachfolgend exemplarisch in Form von einer "Car"-Klasse erklärt:

    Ich habe derzeit eine Klasse (z. B. CarListPage.class.php) welche von SortablePage erbt. Dort liste ich im Frontend alle Objekte entsprechend auf und mit einem Klick auf das jeweilige Objekt, gelangt der Benutzer zur CarDetailPage.class.php. Im Template der CarListPage benutze ich dafür folgendes:

    Code
      <a href="{link controller='CarDetail' id=$car->carID name=$car->carName}{/link}"> [...]

    Daraus resultiert aber derzeit:

    Code
    index.php?car-detail/7/&name=vw

    Irgendwie finde ich dies total unübersichtlich. Mir ist klar, dass die CarDetailPage.class.php die ID braucht, aber deshalb meine Frage ob so etwas möglich ist wie bspw. index.php?car-detail/vw/ oder ggf. index.php?car-detail/7/vw .

    Irgendwie stecke ich da gerade etwas fest ^^

  • Als erstes würde ich den Link nicht mit name erzeugen sondern so

    Code
    <a href="{link controller='CarDetail' title=$car->carName}{/link}">

    so, anschließend kannst du dann in deiner Car Page den title überlüden ob dieser in der Datenbank vorhanden ist, wenn es dein eigenes Plugin ist und keine vorhanden Funktion des WSC sollte das kein Problem sein :)

    Bin mir aber unsicher ob weiterhin ein - angezeigt wird für die ID

  • Als erstes würde ich den Link nicht mit name erzeugen sondern so

    Code
    <a href="{link controller='CarDetail' title=$car->carName}{/link}">

    so, anschließend kannst du dann in deiner Car Page den title überlüden ob dieser in der Datenbank vorhanden ist, wenn es dein eigenes Plugin ist und keine vorhanden Funktion des WSC sollte das kein Problem sein :)

    Bin mir aber unsicher ob weiterhin ein - angezeigt wird für die ID

    Danke Dir. Ich könnte den Titel zwar überprüfen, aber es könnte es ja auch sein, dass es den selben Titel zweimal gibt. Der ist nicht unique. Daher wird die Überprüfung etwas schwierig über den Titel.. Hmm...

    Dennoch erstmal danke, ich gucke mir das noch einmal in Ruhe an. Vielleicht finde ich auch noch einen anderen Weg.

    Grüße

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!