So, jetzt hab ich es hinbekommen:
Das Array
$mtchs wurde nicht korrekt gefüllt ( wegen
if ... or ). Dadurch kam bei
- Code: Alles auswählen
foreach ($mtchs[2] as $key => $mtch)
{
$back_srch[$key] = '###SPACER###' . $key . '###';
$back_rplc[$key] = $mtch;
$body = str_replace($mtch, '###SPACER###' . $key . '###', $body);
}
immer nur ein Treffer raus.
(Wenn man in der function die Wiederherstellung des Body auskommentiert sieht man im Frontend, dass nur einer der definierten Ausschlussbereiche durch den spacer ersetzt wird).
So funktioniert der Ausschluß:- Code: Alles auswählen
// Bereiche ersetzen, in denen keine Glossarersetzungen durchgefuehrt werden sollen
$back_srch = array ();
$back_rplc = array ();
$mtchs = array ();
preg_match_all ('/(<ul class=\"nav1\">(.*?)<\/ul>)/s', $body, $mtchs[0] ) ;
preg_match_all ('/(<ul class=\"nav2\">(.*?)<\/ul>)/s', $body, $mtchs[1] ) ;
preg_match_all ('/(<p id=\"topline\">(.*?)<\/p>)/s', $body, $mtchs[2] ) ;
preg_match_all('/(<h1.*?>(.*?)<\/h1>)/s', $body, $mtchs[3] ) ;
preg_match_all('/(<h2.*?>(.*?)<\/h2>)/s', $body, $mtchs[4] ) ;
preg_match_all ('/(<ul class=\"accordion\">(.*?)<\/ul>)/s', $body, $mtchs[5] ) ;
for ($key=0; $key < count($mtchs); $key++)
{
$back_srch[$key] = '###SPACER###' . $key . '###';
$back_rplc[$key] = $mtchs[$key][0][0];
$body = str_replace($mtchs[$key][0][0], '###SPACER###' . $key . '###', $body);
}
Einige kleine Anregungen: 1. Glossareinträge als normale Artikel über ein neues Modul "Glossar-Eintrag" anlegen und über die Modul-ID ausgelesen. So läßt sich das komplette Glossar zusätzlich als formatierte, sortierbare Liste ausgeben (ca. Zeile 40):
- Code: Alles auswählen
$sql->setQuery('SELECT * FROM rex_article_slice WHERE modultyp_id = ###_MODUL-ID_### AND clang = '.$REX['CUR_CLANG'].' ORDER BY id DESC');
Die Glossarliste selbst habe ich mittels Abfrage der Cat-ID über <body id="noglossar"> ausgeschlossen, damit hier nicht im Glossar "geglossart" wird.
2. Statt über den title-Tag die Erklärung über einen Tooltip ausgeben (z.B. über dieses Script:
http://www.walterzorn.de/tooltip/tooltip.htm. So kann man die Erklärung schön formatieren und auch mit Bildern versehen. Dazu muss die Varialbe
$replaceformat geändert werden (ca. ab Zeile 57) ...
- Code: Alles auswählen
$replaceformat = '<' . $replacetag . ' class=\"abbr\" onmouseover=\"Tip(\'<div class="gl_tooltip">%desc%</div>\')\" onmouseout=\"UnTip()\">%short%</' . $replacetag . '>';
... und natürlich müssen auch die Einzelteile in der folgenden for-Schleife der neuen Tabelle angepasst werden (die Beschreibung muss zusätzlich von Sonderzeichen bereinigt werden):
- Code: Alles auswählen
$language = htmlspecialchars($sql->getValue('clang'));
$shortcut = htmlspecialchars($sql->getValue('value1'));
$description = $sql->getValue('value2');
$description = str_replace('<br />','',$description);
$description = str_replace('/','/',$description);
$description = str_replace('"','"',$description);
$description = preg_replace("/\r|\n/s", "", $description);
Jetzt wäre noch interessant zu erreichen, dass ein Begriff beim ersten Auftauchen erklärt wird, und nicht beim letzten .... also weiter gehts!
Gruss, Marc
Edit: Bei $description fehlte noch der str_replace für Anführungszeichen .... ist ergänzt.