Wordpress Glossar

Hallo !

Ich komme eigentlich aus der Typo3 Ecke, dort gibt es einige nette Extensions. Ich suche nun etwas für Wordpress.


Ich habe mir folgendes vorgestellt :


Eine Maske zum anlegen von einem Wort + Beschreibung. Die URL soll dann wie folgt aussehen :

www.domain.de/glossar/wort.html

Schön wäre noch folgendes :

Sollte das Wort in einem Text vorkommen, so sollte automatisch ein Link zu dem Wort im Glossar eingefügt werden.

Kennt jemand da was netter ?
 
Ich habe selbst für Wordpress noch keine Plugins geschrieben, aber hier mal ein genereller Weg:

Wenn es was statisches sein soll, dann erstellst du einfach eine Datei glossarWords.php mit folgendem Inhalt:

PHP:
<?php
return array(
    'wort1' => 'Dies ist die Beschreibung zu Wort 1',
    'wort2' => 'Dies ist die Beschreibung zu Wort 2',
);

Wenn es dynamisch von mehreren Leuten geändert werden soll, musst du dir halt alles in 'ne Datenbank-Tabelle hauen und ein kleines Backend zur Administration für schreiben.

Dann gibt es meinetwegen eine glossarList.php, welche das Array im einfachsten Falle in eine Definitions-Liste packt und wenn Parameter word=... übergeben wurde, wird nur dieses Wort angezeigt:
PHP:
<?php
$words = include 'glossarWords.php';

//Sicherheits-Check
if (!is_array($words)) {
    $words = array();
}


$wordlist = array();
$w = '';

//Wenn ein gesuchtes Wort per Parameter übergeben wurde, dann nur dieses anzeigen
if (isset($_GET['word']) && !empty($_GET['word'])) {

    //wenn man mit dem Wort direkt 'ne Datenbank-Abfrage machen wollte, wäre hier
    //ein Escapen angebracht - z.B. mit mysql_real_escape_string()
    $w = trim($_GET['word']);

    if (array_key_exists($w, $words)) {
        $wordlist[$w] = $words[$w];
    }
//Ansonsten eine komplette Glossar-Wortliste anzeigen
} else {
    //Array nach keys sortieren
    ksort($words);
    $wordlist = $words;
}

$content = '';
foreach ($wordlist as $word => $description) {
    $content .= '  <dt>' . $word . '</dt>' . chr(10);
    $content .= '  <dd>' . $description . '</dd>' . chr(10) . chr(10);
}

if (!empty($content)) {
    $content = '<dl>' . $content . '</dl>';
} else {
    $msg = 'Das Glossar enthält keine Wörter!';
    if (!empty($w)) {
        $msg = 'Das Wort "' . $w . '" wurde nicht im Glossar gefunden';
    }
    $content = '<div class="error">' . $msg . '</div>';
}

echo $content;

und nun kommt die Geschichte mit dem gewünschten Pfad glossar/wort.html

Hierzu nutzt du einfach mod_rewrite mit folgender Regel in der .htaccess:
Code:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^glossar/([^\?\\/]+).html$ /glossar/glossarList.php?word=$1 [L,QSA]
RewriteRule ^glossar$ /glossar/glossarList.php [L,QSA]
RewriteRule ^glossar/.*$ /glossar/glossarList.php [L,QSA]

</IfModule>

und nun willst du ja auch die Verlinkung im Text haben - das könnte dann so aussehen:
PHP:
<?php
<?php
$words = include 'glossarWords.php';

//Sicherheits-Check
if (!is_array($words)) {
    $words = array();
}


$myText = 'Dies ist mein Text, in welchem Wort1 und Wort2 vorkommen.';

function getGlossarLink($word)
{
    $glossarword = strtolower($word);
    return '<a href="./glossar/' . $glossarword . '.html">' . $word . '</a>';
}

if (sizeof($words)>0) {
    $pattern = '/(' . implode('|',array_keys($words)) . ')/ie';
    $myText = preg_replace($pattern, 'getGlossarLink(\\1);', $myText);
}

echo $myText;
(das musst du natürlich nun so als Wordpress-Plugin umsetzen, dass der auszugebende Text statt $myText mit den Links ersetzt wird)


Vielleicht gibt es sowas ja auch schon fertig als Plugin - aber so wäre jedenfalls meine Herangehensweise, wie ich das selbst als Plugin umsetzen würde...

man könnte das ganze natürlich sogar noch mit bissl AJAX schön machen, dass die Definition gleich beim Hovern angezeigt wird...
 
Zurück
Oben