Contao-Camp 2024
Ergebnis 1 bis 9 von 9

Thema: URL intern umschreiben ohne redirect

  1. #1
    Contao-Nutzer
    Registriert seit
    18.06.2013.
    Beiträge
    24

    Frage URL intern umschreiben ohne redirect

    Hallo zusammen,

    ich möchte erreichen, dass beim Aufruf einer bestimmten URL eine Contao-Seite mit auf der URL basierenden Parametern ausgegeben wird. Ich habe hierfür nur Extensions gefunden, die einen Redirect vornehmen, also die angezeigte URL nach Aufruf ändern. Mein Ziel ist, dass die URL erhalten bleibt.

    Beispiele:

    Aufruf: https://www.domain.tld/foo/bar1/baz
    Inhalt von: https://www.domain.tld/foo/bar1/?baz=1

    Aufruf: https://www.domain.tld/foo/bar2/baz
    Inhalt von: https://www.domain.tld/foo/bar2/?baz=1

    Das Ganze muss also auch dynamisch anhand von bar* funktionieren.

    Ich habe schon diverse Kombinationen in der .htaccess ausprobiert, finde aber einfach keine Lösung.

    Könnt ihr mir helfen?

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.879
    Partner-ID
    10107

    Standard

    Das machst du mit dem getPageIdFromUrl Hook. Dort analysierst du die Fragmente, setzt entsprechend "interne GET Parameter" und gibst dann entsprechende Fragmente zurück.

  3. #3
    Contao-Nutzer
    Registriert seit
    18.06.2013.
    Beiträge
    24

    Standard

    Danke für die schnelle Antwort. Ich habe zum Test nun folgendes versucht:

    config.php
    PHP-Code:
    $GLOBALS['TL_HOOKS']['getPageIdFromUrl'][] = array('MeinBundle\Hooks\GetPageIdFromUrl''getPageIdFromUrl'); 
    MeinBundle/src/Resources/contao/hooks/GetPageIdFromUrl.php
    PHP-Code:
    <?php

    namespace  MeinBundle\Hooks;

    class 
    GetPageIdFromUrl
    {
        public function 
    getPageIdFromUrl($arrFragments)
        {
            return 
    $arrFragments;
        }
    }
    Und erhalte im Debugger folgende Fehlermeldung:
    PHP-Code:
    Uncaught PHP Exception ErrorException"Warning: in_array() expects parameter 2 to be array, null given" at /var/www/kunde/htdocs/contao44/vendor/contao/core-bundle/src/Resources/contao/library/Contao/System.php line 223
    {
        
    "exception": {}

    Was könnte das Problem sein?

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.879
    Partner-ID
    10107

    Standard

    Wie lässt du die Klasse laden?

  5. #5
    Contao-Nutzer
    Registriert seit
    18.06.2013.
    Beiträge
    24

    Standard

    Über das autoloading in der Composer.json:

    PHP-Code:
            "classmap": [
                
    "src/Resources/contao/"
            
    ],
            
    "exclude-from-classmap": [
                
    "src/Resources/contao/config/",
                
    "src/Resources/contao/dca/",
                
    "src/Resources/contao/languages/",
                
    "src/Resources/contao/templates/"
            


  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.879
    Partner-ID
    10107

    Standard

    Ich würde an deiner Stelle Namespace Class Loading nach PSR-4 verwenden.

  7. #7
    Contao-Nutzer
    Registriert seit
    18.06.2013.
    Beiträge
    24

    Standard

    Ok, nun funktioniert es.

    Aufruf: https://www.domain.tld/foo/bar1/baz

    $arrFragments:

    PHP-Code:
    array:[?
      
    => "foo/bar1"
      
    => "auto_item"
      
    => "baz"

    Wie biege ich die URL nun intern um?

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.879
    Partner-ID
    10107

    Standard

    Das erste Element der zurückgegebenen Fragmente ist entweder eine Page ID oder ein Page Alias. Die weiteren Elemente der zurückgegebenen Fragmente sind Key-Value Pairs.

  9. #9
    Contao-Nutzer
    Registriert seit
    18.06.2013.
    Beiträge
    24

    Standard

    Yay. So tut es nun:

    PHP-Code:
    <?php

    namespace MeinBundle\ProductBundle\Hooks;

    class 
    GetPageIdFromUrl
    {
        public function 
    getPageIdFromUrl($arrFragments)
        {

            if(
    $arrFragments[2] == 'baz') {
                return array( 
    $arrFragments[0], 'baz');
            }

            return 
    $arrFragments;
        }
    }

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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