Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 06. März 2014 13:11
- faglork
- arbeitet mit CMS/ms
- Ort: Fränkische Schweiz
- Registriert: 15. Dezember 2010
- Beiträge: 1.152
- Webseite
[GELÖST] Anker-Links: prefilter.replaceanchor.php Probleme
Moin!
Seltsames Problem mit CMSMS 1.10.3 (ja, ich weiss):
Das Plugin prefilter.replaceanchor.php welches für das Funktionieren der Ankerlinks benötigt wird berücksichtigt nur den ERSTEN Ankerlink, alle weiteren haben das bekannte Problem dass auf die Statseite verwiesen wird (was das Plugin ja eigentlich ändern soll). Nochmal: beim ERSTEN Ankerlink kein Problem:
www.domain.de/verzeichnis/test.html#anker1
beim ZWEITEN und jedem folgenden Ankerlink:
Interessanterweise nur bei einer bestimmten Installation, ich hab noch eine mit 1.10.3 dort funzt es wie es soll.
Der Code:
[== php ==]
<?php function smarty_cms_prefilter_replaceanchor($tpl_source, &$smarty) { return preg_replace('/<a href="#([A-Za-z0-9\\._-]+)">(.+)<\/a>/', "{anchor anchor='$1' text='$2'}", $tpl_source); } ?>
Was um alles in der Welt verhindert bei dieser Installation dass preg_replace mehr als einmal ausgeführt wird??
Servus,
Alex
Offline
#2 06. März 2014 13:41
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.435
Re: [GELÖST] Anker-Links: prefilter.replaceanchor.php Probleme
Stehen da eventuell noch weitere Attribute im Link?
Das Suchmuster sucht nämlich nur nach Links die ausschließlich nur ein einziges Attribut (href) haben.
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#3 06. März 2014 13:50
- faglork
- arbeitet mit CMS/ms
- Ort: Fränkische Schweiz
- Registriert: 15. Dezember 2010
- Beiträge: 1.152
- Webseite
Re: [GELÖST] Anker-Links: prefilter.replaceanchor.php Probleme
Nee, ist ganz simpel:
[== html ==]
<a href="#anker1">Anker1</a>| <a href="#anker2">Anker2</a>
Servus,
Alex
Offline
#4 06. März 2014 14:35
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.435
Re: [GELÖST] Anker-Links: prefilter.replaceanchor.php Probleme
Ändere mal das Suchmuster in
... preg_replace('/<a href="#([A-Za-z0-9\\._-]+)">(.+)<\/a>/U' ...
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#5 12. März 2014 14:47
- faglork
- arbeitet mit CMS/ms
- Ort: Fränkische Schweiz
- Registriert: 15. Dezember 2010
- Beiträge: 1.152
- Webseite
Re: [GELÖST] Anker-Links: prefilter.replaceanchor.php Probleme
Danke, das wars!!!
Irgendne Erklärung warum das in diesem Fall nötig ist? Ichh würds gern verstehen ...
Servus,
Alex
Offline
#6 13. März 2014 06:25
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.435
Re: [GELÖST] Anker-Links: prefilter.replaceanchor.php Probleme
Das Flag "U" steht für "ungreedy" ( = "unhungrig"). Der Parser ist per default einfach zu "hungrig". D.h. wenn die Anker alle in einer Zeile stehen, sieht der Parser nur das erste "<a href="#..."> und das letzte schließende "</a>". Alles was dazwischen steht ( (.+) = mehrere beliebige Zeichen), gilt dann als Link-Text - auch wenn dort ein schließendes "</a>" drin vorkommt.
Dieses + im Suchmuster bedeutet im Prinzip, dass das davorstehende Muster mindest einmal aber sonst beliebig oft wiederholt angewendet werden soll. Der Parser versucht das normalerweise in einer Zeile so oft wie möglich zu wiederholen, bis es nicht mehr geht. Dadurch werden eben auch Sachen "verschluckt" (deshalb "hungrig"), bei denen er eigentlich hätte aufhören sollen. Mit dem Flag "U" wird das verhindert. Dadurch gilt das "ungreedy" aber für das gesamte Suchmuster (ist in Deinem Fall kein Problem). Will man das aber nur auf einen Teil des Suchmusters anwenden, kann man das auch mit einem ? hinter dem + nur für diesen Teil anwenden:
/<a href="#([A-Za-z0-9\\._-]+)">(.+?)<\/a>/
Stehen die Ankerlinks im Template allerdings jeder in einer eigenen Zeile, klappt es auch ohne dieses Flag.
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#7 13. März 2014 10:14
- faglork
- arbeitet mit CMS/ms
- Ort: Fränkische Schweiz
- Registriert: 15. Dezember 2010
- Beiträge: 1.152
- Webseite
Re: [GELÖST] Anker-Links: prefilter.replaceanchor.php Probleme
Dankeschön!
Ich werde gleich mal das aktuelle 1.11.x-kompatible Plugin daraufhin abklopfen.
Servus,
Alex
Offline
#8 29. Juni 2014 17:27
- defragmentor
- hat von CMS/ms gehört
- Registriert: 22. März 2011
- Beiträge: 18
Re: [GELÖST] Anker-Links: prefilter.replaceanchor.php Probleme
Hallo ,
ich habe immer noch ein problem mit diesen Ankern
ich hab den code
[== php ==]
<?php
function smarty_cms_prefilter_replaceanchor($tpl_source, &$smarty)
{
return preg_replace('/<a href="#([A-Za-z0-9\\._-]+)">(.+?)<\/a>/U', "{anchor anchor='$1' text='$2'}", $tpl_source);
} ?>
in den prefilter.replaceanchor.php kopiert und die Anker funktionieren.
Aber, wenn ich jetzt die Seite bearbeite und aktualisiere, erscheinen die Änderungen nicht im Frontend.
Kurioserweise werden aber die Änderungen im Backend angezeigt.
Hat jemand eine Idee dazu ?
----------------------------------------------
Cms Version: 1.11.10
Installed Modules:
CGExtensions: 1.39
CMSMailer: 5.2.2
Captcha: 0.4.6
FileManager: 1.4.4
MenuManager: 1.8.6
ModuleManager: 1.5.5
News: 2.14.2
Search: 1.7.11
TinyMCE: 2.9.12
FormBuilder: 0.7.4
nuSOAP: 1.0.2
Uploads: 1.16.16
ThemeManager: 1.1.8
CGSimpleSmarty: 1.7.3
MicroTiny: 1.2.6
Config Information:
php_memory_limit: 256M
process_whole_template:
max_upload_size: 24000000
url_rewriting: mod_rewrite
page_extension: .html
query_var: page
image_manipulation_prog: GD
auto_alias_content: true
locale:
default_encoding: utf-8
admin_encoding: utf-8
set_names: true
Php Information:
phpversion: 5.3.27
md5_function: An (Ja)
gd_version: 2
tempnam_function: An (Ja)
magic_quotes_runtime: Aus (Nein)
E_STRICT: 0
E_DEPRECATED: 8192
memory_limit: 256M
max_execution_time: 60
output_buffering: 4096
safe_mode: Aus (Nein)
file_uploads: An (Ja)
post_max_size: 24M
upload_max_filesize: 24M
session_save_path: Keine Prüfung, da eine „open basedir“-Beschränkung aktiviert ist
session_use_cookies: An (Ja)
xml_function: An (Ja)
xmlreader_class: An (Ja)
Server Information:
Server Api: cgi-fcgi
Server Db Type: MySQL (mysqli)
Server Db Version: 5.1.69
Server Db Grants: Es konnte keine "GRANT ALL" Berechtigung gefunden werden. Dies kann bedeuten, dass Sie bei der Installation oder Entfernen von Modulen Probleme haben könnten. Oder sogar beim Hinzufügen und Löschen von Elementen, einschließlich Seiten
Server Time Diff: Keine Abweichung der Zeit im Dateisystem gefunden
----------------------------------------------
!Update!
Es geeeht !
ich habe jetzt diesen Code, und was wahrschenlich wichtiger ist einfach mal paar minuten warten
[== php ==]
<?php
function parseReplaceAnchor($source) {
$regex = '/<a href="#([A-Za-z0-9\\._-]+)">(.+)<\/a>/U';
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);
}
Beitrag geändert von defragmentor (29. Juni 2014 19:59)
Offline
#9 01. Juli 2014 14:18
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.017
- Webseite
Re: [GELÖST] Anker-Links: prefilter.replaceanchor.php Probleme
Klingt nach einem Cache-Problem ...
Offline
Seiten: 1