[REX3.2] redaxo://2 redaxo://22 - Linkersetzungsbug

Jede Art von Fehler die REDAXO betreffen.

[REX3.2] redaxo://2 redaxo://22 - Linkersetzungsbug

Beitragvon pcw » 31. Mär 2008, 11:41

Hallo,

ist folgender Bug mit der Link-Ersetzung schon bekannt? (Konnte nichts finden)

Wenn z.B. in einem Textile-Modul folgende Abfolge von Links verwendet wird, dann ist der erste Link auch im zweiten enthalten:

"link1":redaxo://2
"link2":redaxo://24

Dies führt dazu, dass in bei der URL-Ersetzung dann folgendes herauskommt:
index.php?article_id=2
index.php?article_id=24
Sieht korrekt aus :), allerdings nur durch einen Zufall

Denn wenn SEO-Urls oder eine andere Sprache verwendet werden sieht es so aus:
/link1/
/link1/4
oder:
index.php?article_id=2&clang=0
index.php?article_id=2&clang=04

Der Grund ist, dass zuerst redaxo://2 ersetzt wird welches ja im zweiten Link auch enthalten ist, weitere Zahlen bleiben einfach stehen bzw. werden angehängt.

Dies tritt natürlich nicht auf, wenn man die Abfolge im Code umdreht, da dann anders herum ersetzt wird.
Nicht betroffen:
"link2":redaxo://22
"link1":redaxo://2


Die Ursache findet sich in /redaxo/includes/classes/article.inc.php

Code: Alles auswählen
preg_match_all("/redaxo:\/\/([0-9]*)\/?/im",$content,$matches);
        if ( isset ($matches[0][0]) and $matches[0][0] != ''){
            for ($m = 0; $m < count($matches[0]); $m++){
                $url = rex_getURL($matches[1][$m],$this->clang);
                $content = str_replace($matches[0][$m],$url,$content);
            }
        }


Habe mich erstmal mit folgender Lösung zufrieden gegeben.
Die URLs werden nach absteigend nach Artikel-ID sortiert bevor ersetzt wird.

Code: Alles auswählen
preg_match_all("/redaxo:\/\/([0-9]*)\/?/im",$content,$matches);
        if ( isset ($matches[0][0]) and $matches[0][0] != ''){
         $mymatches = array();
            for ($m = 0; $m < count($matches[0]); $m++){
            $mymatches[$matches[1][$m]]=$matches[0][$m];
            }
         krsort($mymatches);
         foreach ($mymatches as $key => $value) {            
                $url = rex_getURL($key,$this->clang);
                $content = str_replace($value,$url,$content);
         }
         
        }



Weitere Keywords für Google: Unterkategorie, Problem, falsch
pcw
 
Beiträge: 49
Registriert: 9. Feb 2007, 03:12

Beitragvon Markus.Staab » 31. Mär 2008, 13:09

Hi pcw,

dieses Problem ist bekannt und wurde in R4 bereits behoben...
Dort kannst du auch sehen wie man es eleganter lösen kann ;-)

Nun weiss ich nur nicht, ob wir das auch noch in R3 einarbeiten sollten.. Ich frag mal Jan..

Gruß,
Markus

Edit:

So sollte es passen
Code: Alles auswählen
    // -- preg match redaxo://[ARTICLEID] --
    preg_match_all('@redaxo://([0-9]*)(.){1}/?@im',$content,$matches,PREG_SET_ORDER);
    foreach($matches as $match)
    {
      if(empty($match)) continue;
   
      $url = rex_getURL($match[1], $this->clang);
      $content = str_replace($match[0],$url.$match[2],$content);
    }
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon Jan.Kristinus » 31. Mär 2008, 13:45

hi,

oja.. werden wir die tage einbauen und in ein 3er update einbauen.

lg

jan
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/
Benutzeravatar
Jan.Kristinus
Admin
 
Beiträge: 1928
Registriert: 24. Aug 2004, 21:11
Wohnort: Frankfurt

Beitragvon Markus.Staab » 31. Mär 2008, 13:56

Hi zusammen,

alles klar!

@pcw:
Könntest du die von mir vorgeschlagene Lösung testen und bestätigen, dass Sie funktioniert?

Gruß,
Markus
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon pcw » 12. Apr 2008, 11:24

Hallo Markus,

gerade getestet, die vorgeschlagene Lösung funktioniert.

Gruß,

Paul
pcw
 
Beiträge: 49
Registriert: 9. Feb 2007, 03:12

Beitragvon pcw » 13. Jun 2008, 09:36

Info: habe gerade den gleichen Bug in einem Redaxo 4.0.1 beseitigt, dachte der wäre in Redaxo 4 gar nicht vorhanden.
pcw
 
Beiträge: 49
Registriert: 9. Feb 2007, 03:12

Beitragvon Markus.Staab » 13. Jun 2008, 15:10

Hi,

zuallererst würd ich mal auf dem gleichen webspace mit 4.1 testen.

wenn das nicht geht, dann mal schauen welche phpversion drauf ist und ggf. updaten lassen vom hoster.

Gruß,
Markus
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon pcw » 13. Jun 2008, 16:15

4.1 läuft.
Hatte es nur als Info geschrieben, da ich Deine Antwort weiter oben so interpretiert hatte als dürfte es den Bug in 4er Versionen generell nicht geben.
pcw
 
Beiträge: 49
Registriert: 9. Feb 2007, 03:12


Zurück zu Bugs [R3]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast