Interne Links

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
phg
Posts: 63
Joined: Tue Nov 24, 2009 5:58 pm
Location: Berlin
Contact:

Re: Interne Links

Post by phg » Wed Feb 03, 2010 5:19 pm

Hallo Holger,

danke für den Hinweis.

Mein PHP-Debugger hat mir bei der Fehlersuche sehr geholfen:

Die preg_match_all - Routine ist der Sünder: Wenn innerhalb von <Hx> und </Hx> ein CRLF (\r\n) steht, wird das Suchmuster nicht erkannt.

Code: Select all

    preg_match_all("/<h([1-".$ml."])[^>]*>(.*)<\/h[1-".$ml."]>/i", $c, $headings);
In $headings ist dann die entsprechende Überschrift nicht enthalten.
Wie schon geschrieben sind mir reguläre Ausdrücke (fast) ein Buch mit sieben Siegeln. Kann man durch irgendeinen Parameter ihm beibringen, dass Zeilenwechsel auch erlaubt sind? oder sollte man $c vorbearbeiten und alle Zeilenwechsel rausschmeissen? Das wäre zwar gewaltsam, für mich aber eine machbare Lösung.

Horst

Holger
Site Admin
Posts: 3470
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany

Re: Interne Links

Post by Holger » Wed Feb 03, 2010 8:40 pm

Na ja, ich wüsste schon wie man das Problem mit den CRLF's lösen könnte.. :? , aber
phg wrote:Wie schon geschrieben sind mir reguläre Ausdrücke (fast) ein Buch mit sieben Siegeln.
da geht's mir ähnlich.
Vielleicht meldet sich Martin oder Markus dazu. Ich bekomm's nur mit einer Extra-Zeile hin :oops: .

BTW: welchen Debugger nimmst Du denn?

LG
Holger

phg
Posts: 63
Joined: Tue Nov 24, 2009 5:58 pm
Location: Berlin
Contact:

Re: Interne Links

Post by phg » Wed Feb 03, 2010 8:55 pm

Hallo Holger,

ich entwickle mit NuSphere PHPEd und da ist ein Debugger (DBG ?) mit dabei.
Mit dem Gesamtsystem bin ich sehr zufrieden.

Übrigens: $c = str_replace("\r\n",'',$c) bringt's nicht. Dann klappt gar nichts mehr.

phg

phg
Posts: 63
Joined: Tue Nov 24, 2009 5:58 pm
Location: Berlin
Contact:

Re: Interne Links

Post by phg » Thu Feb 04, 2010 9:22 am

Hallo

ihr braucht euch nicht mehr zu mühen, ich habe es alleine gefunden (in der function li() in cms.php)

Es darf in sitelink.php nicht heißen:

// preg_match_all("/<h([1-".$ml."])[^>]*>(.*)<\/h[1-".$ml."]>/i", $c, $headings);

sondern:

preg_match_all("/<h([1-".$ml."])[^>]*>([^§]*?)<\/h[1-".$ml."]>/i", $c, $headings);

UPDATE: ACHTUNG: Funktioniert doch nicht richtig. Links gehen dann nicht mehr !!


Ich bin nicht tief genug eingestiegen, um folgende Frage zu beantworten:

Warum kann das array $h, in dem ja die Überschriften stehen (und das zusammen mit $l die Level angibt, nicht einfach hier benutzt werden?

phg
Last edited by phg on Thu Feb 04, 2010 5:12 pm, edited 1 time in total.

Holger
Site Admin
Posts: 3470
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany

Re: Interne Links

Post by Holger » Thu Feb 04, 2010 1:49 pm

Hallo Horst!
phg wrote:Warum kann das array $h, in dem ja die Überschriften stehen (und das zusammen mit $l die Level angibt, nicht einfach hier benutzt werden?
SiteLink ist multilingual ausgelegt. Will heißen die interne Linkliste ermöglicht auch sprachübergreifend interne Links zu setzen.
Deshalb baut das Plugin sich selbst die Links zu den Überschriften nach und nach aus allen vorhandenen Content-Dateien aller installierten Sprachen.

Deshalb wundert mich jetzt auch die mögliche Lösung mit dem "§", der ja sonst vom Core zum splitten der Seiten verwendet wird.
Siehe z.B. hier: http://cmsimpleforum.com/viewtopic.php? ... 1659#p9567 , da wurde im Zusammenhang mit utf-8 etwas dazu gepostet.

Ich habe keine Ahnung warum mit Deiner Änderung das Problem nun behoben ist :?

LG
Holger

phg
Posts: 63
Joined: Tue Nov 24, 2009 5:58 pm
Location: Berlin
Contact:

Re: Interne Links

Post by phg » Thu Feb 04, 2010 5:11 pm

HALT!

Meine Änderung im preg_match_all führt dazu, dass dann die Links nicht mehr erkannt werden.

Also: Alles zurück auf LOS!

Es muss dann wohl doch ein regexp-Experte ran.

phg

Martin
Posts: 346
Joined: Thu Oct 23, 2008 11:57 am
Contact:

Re: Interne Links

Post by Martin » Fri Feb 05, 2010 2:02 pm

Horst wrote:Kann man durch irgendeinen Parameter ihm beibringen, dass Zeilenwechsel auch erlaubt sind?
Ja, mit "s". Und damit er bei dieser neuen Erlaubnis nicht gleich zu gierig wird, gehört noch ein "U" dazu. Alles zusammen also:

Code: Select all

preg_match_all("/<h([1-".$ml."])[^>]*>(.*)<\/h[1-".$ml."]>/isU", $c, $headings);
 
Hier die Seite auf php.net und ein nettes Tutorial mit Online-Test der regulären Asudrücke.

Martin

Post Reply