Suche
Suche Menü

CMSMS: prefilter.replaceanchor.php Rekursive

In CMS Made Simple erlebt man mit Text-Ankern ab und an eine unangenehme Überraschung. Wird auf einer Seite auf einen Text-Anker in der selben Seite verwiesen, so landet man beim Klick auf den Anker-Link nicht wie beabsichtigt beim Text-Anker sondern auf der Startseite.

Im Forum geistert seit langem dazu die Datei prefilter.replaceanchor.php herum. Diese Datei hatte jedoch anscheinend ab und an das Problem, dass nur der erste Anker-Link korrigiert wurde.
Der Grund dazu ist mir jedoch nicht klar. In meinen Test hat es jeweils funktioniert.

Ich habe nun auf diese Frage die Funktion wie folgt modifiziert:

<?php

function parseReplaceAnchor($source)
{
    $regex = '/<a href="#([A-Za-z0-9\._-]+)">(.+)</a>/';
    if (is_array($source)) {
        $source = "{anchor anchor='".$source[1]."' text='".$source[2]."'}";
    }
    return preg_replace_callback($regex, 'parseReplaceAnchor', $source);
}

function smarty_prefilter_replaceanchor($tpl_source, &$smarty)
{
   return parseReplaceAnchor($tpl_source);
}

(Code nur für CMSMS >= 1.11 gültig)

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.