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)