FriendsOfREDAXO / tricks

Tipps und Tricks rund um REDAXO 5
https://friendsofredaxo.github.io/tricks/
MIT License
105 stars 33 forks source link

Ansatz für ein simples Rewrite-Schema mit Parameter für rex_getUrl #77

Closed cukabeka closed 4 years ago

cukabeka commented 6 years ago

Hintergrund: Ich will, dass in einer schönen Url verschiedene Get-Parameter auf dem einen Artikel abgebildet werden

Thomas Blum [1 month ago] Du könntest dir da was selber umsetzen … Hänge dich an den URL_REWRITE und wandel dann die Params um.

Thomas Blum [1 month ago] Das ist der Part wie es früher in R4 passierte https://github.com/redaxo/redaxo4/blob/24d34c7b95a9cb948dde5c5d630eb09d9ee3008a/redaxo/include/addons/url_rewrite/classes/class.rewrite_fullnames.inc.php#L110-L127

     // konvertiert params zu GET/REQUEST Variablen
      if($this->use_params_rewrite)
      {
        if(strstr($path,'/+/'))
        {
          $tmp = explode('/+/',$path);
          $path = $tmp[0].'/';
          $vars = explode('/',$tmp[1]);
          for($c=0;$c<count($vars);$c+=2)
          {
            if($vars[$c]!='')
            {
              $_GET[$vars[$c]] = $vars[$c+1];
              $_REQUEST[$vars[$c]] = $vars[$c+1];
            }
          }
        }
      }

Cukabeka [1 month ago] Danke Dir - aber ich brauche ja 2 stellen, einmal bei rex_getUrl, damit die ++ in die URL reinkommen, und dann beim Interpretieren des Aufrufes.. Leider weiß ich das Snippet nicht so recht zu deuten, wie ich das damit hinbekommen könnte @thomas.blum

Cukabeka [1 month ago] Und wohin damit dann? project addon als YREWRITE klasse? :thinking_face:

Thomas Blum [1 month ago] Wieso Yrewrite?

aber ich brauche ja 2 stellen, einmal bei rex_getUrl Das ist der EP URL_REWRITE

die zweite Stelle machst du wie das Url addon da hängst du dich an den EP YREWRITE_PREPARE vom yrewrite addon. der wird aufgerufen, falls es zu der url keinen artikel gibt. an der stelle gibst du dann ein array zurück [‘article_id’ => deine-id, ‘clang’ => deine-clang];

die restlichen params an der url setzt du dann in das $_GET

Thomas Blum [1 month ago] das yrewrite addon selber brauchst du nicht zu erweitern

Thomas Blum [1 month ago] URL_REWRITE > Url als /artikel/key/value/ zurückgeben YREWRITE_PREPARE > die Url auflösen und dann article-id und clang-id zurückgeben, damit redaxo weiß welcher artikel aufgerufen werden soll

Stefan Cukabeka [1 month ago] Danke Dir nochmal Thomas - ich merke, beim Thema EP habe ich null Ahnung. Wüsste nicht, wo ich jetzt mit den Infos starten sollte. Eine Klasse in den Project-Ordner legen?

Thomas Blum [1 month ago] Ich schreib da nachher oder morgen mal was

Thomas Blum [1 month ago] Das nachfolgende kannst du in die boot.php des project addons legen. Jetzt müsstest du das Auswerten und das Schreiben der Urls umsetzen

<?php

\rex_extension::register('YREWRITE_PREPARE', function (\rex_extension_point $ep) {
    // aufgerufene Url holen und auswerten
    // wenn übergebene params enthalten sind, diese in $_GET und $_REQUEST speichern
    // diese stehen dann in deinen Skripten über rex_get() bzw. rex_request() zur Verfügung
    dump($ep);
    $articleId = null;
    $clangId = null;

    return ['article_id' => $articleId, 'clang' => $clangId];
}, \rex_extension::EARLY);

rex_extension::register('PACKAGES_INCLUDED', function (\rex_extension_point $epPackagesIncluded) {
    rex_extension::register('URL_REWRITE', function (\rex_extension_point $ep) {
        // params auswerten
        // und deine Url /article/param-key/param-value/ zurückgeben
        dump($ep);
        $url = '';

        return $url;
    }, rex_extension::EARLY);
}, rex_extension::EARLY);

Noch nicht fertig, aber ein Ansatz, um dieses Thema zu lösen (und ggf in ein Addon zu stecken).

alxndr-w commented 6 years ago

Noch nicht fertig, aber ein Ansatz, um dieses Thema zu lösen (und ggf in ein Addon zu stecken).

Verstehe ich nicht. Du willst kein Addon wie das URL Addon nutzen, aber deine Lösung in ein Addon gießen?

skerbis commented 5 years ago

Gibt es schon was fertiges? Oder kann das Issue hier zu?

cukabeka commented 5 years ago

Es gibt inzwischen ein Addon von Peter, das das kann, allerdings nicht in jedem YRewrite Kontext. Ich glaube es heißt simple_rewrite

skerbis commented 4 years ago

Ich werte das mal als close. Wer es gerne richtig dokumentieren will, kann das issue ja wieder öffnen.