Bestimmte Textteile aus mysql- tabelle hervorheben

@tombe

Also hier das Bild: http://www.philipp-games.de/Artikel.jpg

Also die Keywords haben auch ids aber ich würde das lieber mit den ganzen Wörtern machen wollen.

Es gibt keine Beschränkung der Wörter im Lexikon, also in jedem Artikel kann jeder Keyword vorkommen.

Den Link würde ich per ajax z.b. so aufbauen ndex.php?id=106&tx_lextool_pi1[word]=Analgetika

per php macht er dann ne sql- Abfrage mit Where keyword. In Tooltip wird dann die Kurzbeschreibung angezeigt, mittes weiterlesen wird er zum Lexikon geleitet.

Neben den Wort soll noch ne Grafik angezeigt werden, sorry vergessen zu erwähnen:(

Aber dennoch nochmal danke:)

@Yaslaw danke werd ich mir mal ansehen. Code kann ich erst heut Abend posten
 
Ich hatte es so verstanden das im Text/im Artikel die Wörter des Lexikons hervorgehoben werden sollen.

So wie es auf dem Bild aussieht, werden dann die Wörter aufgelistet die im Text vorkommen. Also genau das Gegenteil.

Sollen dann die Links auch hier gesetzt werden und nicht in Text selber?

Dann nochmal was zu den ID´s. Tu dir selber einen großen Gefallen und arbeite damit!! Es macht vieles leichter und schließt Fehler bereits im Vorfeld aus.
 
doch du hast schon alles richtig verstanden :-) Unten die Auflistung hat nix damit zu tun.

Ein Live- Beispiel ist hier zu finden: http://www.implantate.com/zahnimplantat.php

wegen den ids: Ich würde ja auch gerne mit ids suchen, aber später soll die url wie folgt heißt: lexikon/meinwort. Mit ids ist das doch schlecht zu realisieren oder?

Wegen den Datensätzen, reicht ein SQL- DUMP und kann ich dir den als PM schicken?

hier ist mal mein Code:

PHP:
    $res = $GLOBALS["TYPO3_DB"]->exec_SELECTquery("*", "tx_articletool_article", "pageid = $pageid AND hidden = 0 AND deleted = 0");
    $row = $GLOBALS["TYPO3_DB"]->sql_fetch_assoc($res);

    $title = $row["title"];
    $article = $row["article"];
# Marker setzen
    
    $markerArray["###TITLE###"] = $title;
    $markerArray["###ARTICLE###"] = $this->pi_RTEcssText($article);

$article enthält den ganzen Text

und per php sollen die entsprechenden a- tags um das Wort gesetzt werden
 
Ok, dann hier mein nächster Versuch. Zumindest die meisten Angaben zur Datenbank kannst du wohl so lassen wie sie sind. Nur halt die Zugangsdaten musst du zum Testen anpassen.

Was (noch) nicht stimmt, ist der Dateiname der bei den Links angegeben ist. Da habe ich halt mal irgendwas angegeben.

PHP:
<style type="text/css">
body{
	font-family: sans-serif;
}
.lexi{
	text-decoration: none;
	font-weight: bold;
	color: #FFAC00;
	border-bottom: dashed 1px #808080;
}
</style>

<?php
// Verbindung zur Datenbank
$host = "localhost";
$daba = "DEINE_DATENBANK";
$user = "DEIN_USER";
$pass = "DEIN_PASSWORT";
$db = @mysql_connect($host, $user, $pass) or die ("Konnte keine Verbindung zur Datenbank herstellen");
mysql_select_db($daba, $db);

// Artikel einlesen
// Die WHERE Bedingung ist nur da damit es sie gibt. Muss dann angepasst werden.
$sql = "SELECT article FROM article WHERE 1 = 1 LIMIT 1";
$rs_article = mysql_query($sql);
$article = mysql_result($rs_article, 0, "article");

$sql = "SELECT keyword, def FROM lexikon";
$rs_lexikon = mysql_query($sql);

for ($a = 0; $a < mysql_num_rows($rs_lexikon); $a++){
    $search = "/" .mysql_result($rs_lexikon, $a, "keyword") ."/i";
    $replace = '<a class="lexi" href="detail.php?wort=' .mysql_result($rs_lexikon, $a, "keyword") .'" target="_blank" title="' .mysql_result($rs_lexikon, $a, "def") .'">\\0</a>';
    $article = preg_replace($search, $replace, $article);
}

// Formatieren Artikeltext ausgeben
echo $article;

?>

Was die Datenbank von dir angeht, so reicht ein Dump natürlich völlig. Entweder per PN ansonsten schicke ich dir auf diesem Weg meine eMail Adresse.

Gruß Thomas
 
Hallo nochmal vielen Dank dafür, dass du mir so intensiv hilfst *freu*

Also ich habe jetzt den Code ausprobiert und getestet. leider ist $article danach leer:(
Ich hab nur ein bisschen den Code verändert, hoffe es liegt nicht daran.
Bitte wunder dich nicht über manche codeteile, da mein System per Typo3 läuft musste ich manches ändern.

PHP:
		$res = $GLOBALS["TYPO3_DB"]->exec_SELECTquery("keyword, def", "tx_lextool_lexikon");
		$lex_num = $GLOBALS["TYPO3_DB"]->sql_num_rows($res);

		for ($a = 0; $a < $lex_num; $a++){
			$row = $GLOBALS["TYPO3_DB"]->sql_fetch_assoc($res);
			$word = $row{"keyword"};
			$def = $row["def"];
			$search = "/$word/i";
			$replace = "<a class='lexi' title='$def' target='_blank' title='$def'>\\0</a>";
			$article = preg_replace($search, $replace, $article);
		}
		echo $article;

$article bleibt leer:(

Kannst du mir helfen?
 
Du übergibst aber schon zu Beginn den in der Datenbank gespeicherten Text an die Variable $article oder? Davon sehe ich hier nämlich nichts!

Abgesehen davon gibt es bei mir jetzt schon die farbliche Hervorhebung der im Lexikon enthaltenen Wörter und den Tooltipp fast wie bei der Seite die als Vorlage dient.

PHP:
<style type="text/css">
body{
	font-family: sans-serif;
}

a.lexi{
	position: relative;
	text-decoration: none;
	font-weight: bold;
	color: #FFAC00;
	border-bottom: dashed 1px #808080;
}

.lexi:hover{
	outline: none;
}

.lexi span.tipp{
	display: none;
	position: absolute;
	color: #808080;
	font-weight: normal;
}

.lexi:hover span.tipp{
	display: block;
	position: absolute;
	top: 25px;
	left: 5px;
	width: 250px;
	border: solid 1px #808080;
	background-color: #FFFFFF;
	padding: 5px;
	font-size: .75em;
	z-index: 1;
}
</style>

<?php
// Verbindung zur Datenbank
$host = "localhost";
$daba = "XXX";
$user = "XXX";
$pass = "XXX";
$db = @mysql_connect($host, $user, $pass) or die ("Konnte keine Verbindung zur Datenbank herstellen");
mysql_select_db($daba, $db);

// Artikel einlesen
$sql = "SELECT article FROM article WHERE 1 = 1 LIMIT 1";
$rs_article = mysql_query($sql);
$article = mysql_result($rs_article, 0, "article");

$sql = "SELECT keyword, def FROM lexikon";
$rs_lexikon = mysql_query($sql);

for ($a = 0; $a < mysql_num_rows($rs_lexikon); $a++){
    $search = "/\b" .mysql_result($rs_lexikon, $a, "keyword") ."/i";
    $replace = '<a class="lexi" href="detail.php?wort=' .mysql_result($rs_lexikon, $a, "keyword") .'" target="_blank">\\0
				<span class="tipp">' .mysql_result($rs_lexikon, $a, "def") .'</span></a>';
    $article = preg_replace($search, $replace, $article);
}

// Formatieren Artikeltext ausgeben
echo $article;

?>
 
Ja $aricle wurde schon voher definiert:

PHP:
    $res = $GLOBALS["TYPO3_DB"]->exec_SELECTquery("*", "tx_articletool_article", "pageid = $pageid AND hidden = 0 AND deleted = 0");
    $row = $GLOBALS["TYPO3_DB"]->sql_fetch_assoc($res);

    $title = $row["title"];
    $article = $row["article"];

d.h. ich habe den Ablauf in einer separaten function gepackt, in der $aticle übergeben wird.
echo $article ist auch gefüllt wenn for auskommentiert ist:(
 
Kann es sein das diese Zeile falsch ist:

PHP:
// geschweifte Klammern
$word = $row{"keyword"};

muss das nicht so aussehen:

PHP:
// eckige Klammern
$word = $row["keyword"];
 
Lass dir mal bitte den jeweiligen Wert von $replace ausgeben. Möglich das da der Fehler drin steckt!?
 
Zurück