Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

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

www.domain.de/#anker1

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 sad

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 smile

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