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
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

