Ergebnis 1 bis 20 von 20

Thema: Wie verwende ich $this->generateFrontendUrl() ?

  1. #1
    Contao-Nutzer Avatar von xs-hoppelhase
    Registriert seit
    12.07.2009.
    Ort
    Gera - Thüringen
    Beiträge
    125

    Standard Wie verwende ich $this->generateFrontendUrl() ?

    Hallo,

    für ein Frontendmodul benötige ich eine Menge an Parametern die per GET übergeben werden. Das über Contao auszulesen ist ja soweit kein Problem. Doch wie kann ich nun die URLs etwas suchmaschinenfreundlicher gestalten, so das Contao immernoch die GET-Parameter erkennt.

    Hab folgende URL:

    /index.php/kaufobjekt-expose.html?category=for_sale&type=multi_family_ho use&district=innenstadt&id=28

    Würde gern folgendes:

    /index.php/category/forsale/type/multi_family_house/district/innenstadt/id/28/kaufobjekt-expose.html

    oder ähnliches bekommen. Erkennt Contao überhaupt in obiger Struktur richtig die GET-Parameter, oder muss das anders aufgebaut werden!?

    Ich weis dass es den Hook "generateFrontendUrl" gibt nur irgendwie komm ich damit nicht zurecht ...

    Ich bräuchte mal nen heißen Tip ;-)

    P.S. Vll. noch zur Info, dass mod_rewrite bei mir nicht funktioniert.

    Grüße, Andy

  2. #2
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    PHP-Code:
    $arrPage = ... Datenbankabfrage zur "kaufobjekte-exposee"-Seite
    $strUrl 
    $this->generateFrontendUrl($arrPage'category/forsale/type/multi_family_house/district/innenstadt/id/28'); 
    Die URL ist dann /index.php/kaufobjekt-expose/category/forsale/type/multi_family_house/district/innenstadt/id/28.html
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  3. #3
    Contao-Nutzer Avatar von xs-hoppelhase
    Registriert seit
    12.07.2009.
    Ort
    Gera - Thüringen
    Beiträge
    125

    Standard

    Prima!

    Danke für die schnelle Antwort, das funktioniert super.

  4. #4
    Contao-Nutzer Avatar von matze
    Registriert seit
    19.06.2009.
    Ort
    Amberg
    Beiträge
    236

    Standard

    Gibts nicht auch ne API Funktion, die GET Parameter an eine URL anfügt und dann automatisch eine korrekte URL erzeugt?

  5. #5
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    $this->addToUrl()
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

  6. #6
    Contao-Fan Avatar von Stranger
    Registriert seit
    20.06.2009.
    Ort
    Blankenburg
    Beiträge
    746
    Partner-ID
    5635
    User beschenken
    Wunschliste

    Standard

    Und wie muss ich vorgehen, wenn ich die ID einer bestimmten Seite habe (tl_page) und daraus eine URL erzeugen will?
    Also beispielsweise habe ich die ID 12

    PHP-Code:
    $pageId 12;
    $meinLink ampersand($this->generateFrontendUrl($pageId)); 
    Ich möchte jetzt als Ergebnis die korrekte URL, die aus übergeordneten Alias und Seitenalias besteht, also z.B. www.meine-seite.de/about/test.html?
    Oder ist $this->generateFrontendUrl() dafür nicht geeignet?
    Du willst dich bei mir bedanken?
    Ich freue mich über Geschenke von meiner Amazon-Wunschliste.

    Contao-Anwender seit 2008
    Contao-Entwickler seit 2013, mehr als 50 Contao Erweiterungen programmiert

    Mein Unternehmen aus Blankenburg (Harz): Fast & Media

  7. #7
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    @Stranger Wie bei dem Beispiel von Andreas oben. Mit der ID das Page Object aus der DB laden und dann an getFrontendUrl übergeben...

  8. #8
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Der Vollständigkeit halber, in Contao 3:
    PHP-Code:
    <?php
    if (($jumpTo = \PageModel::findByPk($myId)) !== null) {
       
    $strUrl = \Controller::generateFrontendUrl($jumpTo->row());
    } else {
       
    // Die Seite mit ID $myId wurde nicht gefunden
    }
    Wer die "\" vor "Controller" und "PageModel" nicht versteht, sollte sich mit Namespacing auseinandersetzen. Dazu und wie man sie in Contao verwendet, erklärt Tristan einiges: http://www.youtube.com/watch?v=sgiFnUC0BpA
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  9. #9
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.943

    Standard

    Zitat Zitat von Toflar Beitrag anzeigen
    PHP-Code:
    <?php
    if (($jumpTo = \PageModel::findByPk($myId)) !== null) {
       
    $strUrl = \Controller::generateFrontendUrl($jumpTo->row());
    } else {
       
    // Die Seite mit ID $myId wurde nicht gefunden
    }
    Leicht offtopic:

    Ich frage mich gerade, wie man im Fall "Die Seite mit ID $myId wurde nicht gefunden" die 404 Seite triggern kann? \PageModel::findByPk(id-der-Contao-404-page) geht wohl nicht, da die 404 keine reguläre Seite ist.

    Vielleicht kann mich da ja jemand auf den richtigen Weg schubsen?

    Danke.

    Edit: ich meite oben "natürlich "\Controller::generateFrontendUrl(\PageModel::find ByPk(id-der-Contao-404-page)->row())" (keine reguläre Sete => keine URL)
    Geändert von fiedsch (09.09.2013 um 09:33 Uhr)

  10. #10
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von fiedsch Beitrag anzeigen
    Leicht offtopic:

    Ich frage mich gerade, wie man im Fall "Die Seite mit ID $myId wurde nicht gefunden" die 404 Seite triggern kann? \PageModel::findByPk(id-der-Contao-404-page) geht wohl nicht, da die 404 keine reguläre Seite ist.

    Vielleicht kann mich da ja jemand auf den richtigen Weg schubsen?

    Danke.

    Edit: ich meite oben "natürlich "\Controller::generateFrontendUrl(\PageModel::find ByPk(id-der-Contao-404-page)->row())" (keine reguläre Sete => keine URL)
    $page = \PageModel::findByPk($myPageID);
    if ($page->type == 'error_404') {}
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  11. #11
    Contao-Nutzer
    Registriert seit
    14.03.2012.
    Ort
    Berlin
    Beiträge
    225

    Standard

    Alternativ bekommt man die 404 auch über die root id im aktuellen Page Objekt:

    $objPage404 = \PageModel::find404ByPid($objPage->rootId);
    ...
    \Controller::redirect(\Controller::generateFronten dUrl($objPage404->row()),404);

  12. #12
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.943

    Standard

    @jk1: Danke, genau so funzt es! Jetzt muss ich nur noch meine Hausaufgaben machen und nachlesen, wo ich das selbst hätte finden können (sollen ;-)
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  13. #13
    Contao-Nutzer Avatar von BennyBorn
    Registriert seit
    10.06.2011.
    Ort
    Edenkoben
    Beiträge
    240
    Partner-ID
    6916

    Standard

    Zitat Zitat von Stranger Beitrag anzeigen
    Und wie muss ich vorgehen, wenn ich die ID einer bestimmten Seite habe (tl_page) und daraus eine URL erzeugen will?
    Also beispielsweise habe ich die ID 12
    Es gäbe da noch eine etwas einfacherer Variante:
    PHP-Code:
    $objPage $this->getPageDetails($id);
    $href $this->generateFrontendUrl$objPage->row() ); 

  14. #14
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von BennyBorn Beitrag anzeigen
    Es gäbe da noch eine etwas einfacherer Variante:
    PHP-Code:
    $objPage $this->getPageDetails($id);
    $href $this->generateFrontendUrl$objPage->row() ); 
    Aber warum für eine Weiterleitung die ganzen Details laden?

  15. #15
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Jep, das ist definitiv viel zu aufwändig, weil da noch die ganzen Informationen bis nach oben zum Root gesammelt werden
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  16. #16
    Contao-Nutzer Avatar von BennyBorn
    Registriert seit
    10.06.2011.
    Ort
    Edenkoben
    Beiträge
    240
    Partner-ID
    6916

    Standard

    Zitat Zitat von Toflar Beitrag anzeigen
    Jep, das ist definitiv viel zu aufwändig, weil da noch die ganzen Informationen bis nach oben zum Root gesammelt werden
    Ehm also zumindest in Contao 2.X stimmt das so nicht. Der Query der abgefeuert wird ist einfach nur ein "SELECT * FROM tl_page WHERE id='XXX' LIMIT 0,1".

    Natürlich ist auch ein * eigtl totaler Overkill für eine reine Weiterleitung aber mir ging es bei meinem Vorschlag nicht um Performance (die die meisten Extension-Entwickler scheinbar sowieso leider viel zu sehr vernachlässigen) sondern nur um Simplizität in der Anwendung

  17. #17
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Doch, natürlich stimmt's. Glaub es mir einfach oder lies den Code
    https://github.com/contao/core/blob/...oller.php#L580
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  18. #18
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Nee stimmt nicht ganz. Ich musste extra eine meiner Erweiterungen anpassen. Das funktioniert nur in 2.11, nicht in 2.10 !
    Einige Informationen fehlen.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  19. #19
    Contao-Nutzer
    Registriert seit
    12.05.2014.
    Beiträge
    39

    Standard

    Hallo,

    ich benutze Contao 3.1 und möchte mittels generateFrontendUrl SEO- freundliche Links generieren.

    PHP-Code:
    $objPage = \PageModel::findPublishedById(27);

    $this->Template->linktest $this->generateFrontendUrl($objPage->row(), "/Hausvermietung/2"); 
    Leider kommt in FE eine Fehlermeldung

    Code:
    Warning: in_array() expects parameter 2 to be array, null given in C:\xampp\htdocs\contest\system\modules\core\modules\ModuleCustomnav.php on line 193
    #0 [internal function]: __error(2, 'in_array() expe...', 'C:\xampp\htdocs...', 193, Array)
    #1 C:\xampp\htdocs\contest\system\modules\core\modules\ModuleCustomnav.php(193): in_array('8', NULL)
    #2 C:\xampp\htdocs\contest\system\modules\core\modules\Module.php(148): Contao\ModuleCustomnav->compile()
    #3 C:\xampp\htdocs\contest\system\modules\core\modules\ModuleCustomnav.php(65): Contao\Module->generate()
    #4 C:\xampp\htdocs\contest\system\modules\core\library\Contao\Controller.php(286): Contao\ModuleCustomnav->generate()
    #5 C:\xampp\htdocs\contest\system\modules\core\pages\PageRegular.php(138): Contao\Controller->getFrontendModule(Object(Contao\ModuleModel), 'footer')
    #6 C:\xampp\htdocs\contest\index.php(250): Contao\PageRegular->generate(Object(Contao\PageModel), true)
    #7 C:\xampp\htdocs\contest\index.php(415): Index->run()
    #8 {main}
    Dieser Fehler kommt aus der Zeile:
    PHP-Code:
    $objPage = \PageModel::findPublishedById(27); 
    Warum, laut Doku ist doch der 2. Parameter optional?

    Wenn ich dann auf den Link klicke, erscheint dann "Seite nicht gefunden"

    Ist es möglich, ein Get- Parameter in der url zu verstecken, aber ihn auszulesen?

  20. #20
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Wiederum der Vollständigkeit halber, ab Contao 3.2:
    PHP-Code:
    <?php 
    if (($jumpTo = \PageModel::findByPk($myId)) !== null) { 
       
    $strUrl $jumpTo->getFrontendUrl();
    } else { 
       
    // Die Seite mit ID $myId wurde nicht gefunden 
    }
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. FE Modul / generateFrontendURL / jumpTo
    Von crebase im Forum Entwickler-Fragen
    Antworten: 0
    Letzter Beitrag: 08.07.2010, 16:14

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •