Wörter des Textes ins Glossar verlinken

Siegfried_D

Angesehenes Mitglied
Hallo Leute,
ich habe eine Internetseite, auf welcher viele Texte integriert sind. Gleichzeitig habe ich ein Glossar, wo viele Begriffe erklärt werden.

Ich würde nun gerne die im Text vorhandenen Glossarbegriffe direkt ins Glossar verlinken.

Ähnlich wie die Text-Highlighting bei Contaxe.

Gibt es für sowas ein fertiges Skript oder ein Muster?

Ansonsten muss ich die komplettem SQL Abfragen halt selbst schreiben
dry.gif
 
Das Glossar-Script auf der Seite 'download.darin.ch' hat eine solche Funktion integriert.
 
danke radarin,
die Funktion selbst kennt keiner??

Ansonsten muss ich aus dem Glossar die Funktion heraussuchen....
 
Man kann so etwas schon halb automatisiert machen.

Aber das setzt immer eine entsprechende 'Rahmenarchitektur' voraus.

Das Beispiel der Xml-Definitionen von meinen FU-Xml-Unterlagen enthält Sprünge zu Definitionen und Rücksprünge (von jeder Definition an alle Stellen, wo dieser Begriff genutzt wird).

Manuell wäre das aberwitzig viel Arbeit, vor allem die ganzen Rücksprünge. Mit Xsl ist das relativ simpel.

Fehlt die Rahmenarchitektur, dann läßt sich das auch nicht einfach auf eine andere Domain übertragen.
 
Wie das Glossar arbeitet siehst du hier. Das Scriüt ist so kurz, die Funktion zu finden ist nicht schwer.

Erst mal lese ich alle Begriffe aus der DB

$rs = mysql_query ($sql);

Dann schreibe ich alle Begriffe in ein Array

while($daten = mysql_fetch_array($rs)) {
$glossars[] = $daten['begriff'];
}


Dann die Funktion welche um die Vorhandenen Begriffe den Link setzt

function LinkFilterGlossar($NachrichtGlossar)
{
global $glossars;
$LinksGlossar = $glossars;
global $baseurl;
$baseurl = $baseurl;
foreach($LinksGlossar as $LinkGlossar)
{
$NachrichtGlossar = str_replace($LinkGlossar, "<a href=\"".$baseurl."&modus=one&link=$LinkGlossar\" class=\"link\">".$LinkGlossar."</a>", $NachrichtGlossar);
}
return $NachrichtGlossar;
}


Dann wird das Glossar Datensatzweise ausgegeben

$NachrichtGlossar = $results[text];
$NachrichtGlossar = LinkFilterGlossar($NachrichtGlossar);


Viel Erfolg!
smile.gif
 
Danke radarin,
hat super funktioniert!!

Dieses Script ist eigentlich in jede Seite, die php und mysql nutzt, integrierbar!!

Danke nochmal!!!
 
Ja, das ist auch eine Möglichkeit. Allerdings muss der komplette Text durch den Filter. Wenn die Texte in der DB liegen funktioniert es bereits, bei statischen Seiten lässt es sich mit etwas zusätzlichem Aufwand auch umsetzen. (aus .htm mach .php, Text in eine Variable rein, Filtern und dann ausgeben) In diesem Fall würde ich dann allerdings nicht auf eine Glossarseite verlinken, sondern das Ganze mit einem Tooltip realisieren.
 
@ radarin

kann ich es erreichen, dass bei einem Begriff wie Fischer auch nur Fischer verlinkt wird und nicht auch Fisch ?
 
ich hab schon mit order by versucht, aber ob ich desc oder asc nutze, er verlinkt immer den ersten Teil des Begriffes.

Ich probier mal weiter, wenn ich ne Lösung habe, werde ich sie posten...

 
Mach es statt mit str_replace mit einem preg_replace, dürfte auch noch schneller sein. Da kannst Du dann auch Word-Boundaries angeben.

Ansonsten, wenn Du bei str_replace bleiben willst, pack doch einfach ein Leerzeichen davor und dahinter und schon ersetzt er nur das ganze Wort (also " Fischer " anstatt " Fisch ")
 
QUOTE (Yosh @ Mi 12.09.2007, 12:34)Mach es statt mit str_replace mit einem preg_replace, dürfte auch noch schneller sein. Da kannst Du dann auch Word-Boundaries angeben.

Die Funktionstr_replace ist um vieles schneller als preg_replace.


QUOTE (Yosh @ Mi 12.09.2007, 12:34)Ansonsten, wenn Du bei str_replace bleiben willst, pack doch einfach ein Leerzeichen davor und dahinter und schon ersetzt er nur das ganze Wort (also " Fischer " anstatt " Fisch ")

Kommt z.B. "Er war ein passionierter Fischer." im Text vor, wird es durch die Suche nicht gefunden.
 
QUOTE Die Funktionstr_replace ist um vieles schneller als preg_replace.


Werd das mal testen bei Gelegenheit. Kommt vielleicht auch auf das Muster an, könnte ich mir zumindest vorstellen. Meine in einem Artikel im PHPmag mal gelesen zu haben, dass preg schneller sein soll. Naja, kann mich auch irren.

[edited]
Mkay, bei ner 3 MB Datei ist preg_replace schon um 0.005 Sekunden langsamer ...


QUOTE Kommt z.B. "Er war ein passionierter Fischer." im Text vor, wird es durch die Suche nicht gefunden.

Korrekt, darum würde ich das auch mit Wortgrenzen lösen. Oder eben einem eigenen regulären Ausdruck dafür wenn die "Perl-Words" nicht ausreichend sein sollten.
 
vielen dank für Eure Tipps, bin fleissig am austesten und hatte auch schon selbst ein paar neue Ansätze, aber es scheitert halt wirklich oft daran, dass der Begriff, der verlinkt wird am Ende des Satzes ist und somit kein Leerzeichen mehr danach kommt...
 
Zurück
Oben