Benutzer:Rene/NewArticle
Beschreibung
Die Erweiterung NewArticle bietet immer wenn ein neuer Artikel angelegt wird eine Auswahl an Vorlagen an die durch anklicken in das Editfeld eingefügt wird. Sinn ist es das Erstellen von Artikeln nach den Artikelvorlagen zu erleichtern.
Technik
NewArticle ist eine MediaWiki Erweiterung die sich an den Hook AlternateEdit anhängt. Dabei wird bei jedem Aufruf des Editors geprüft ob es sich um einen neuen Artikel handelt. Ist dies der Fall wird die Steuerdatei MediaWiki:NewArticle ausgelesen und entsprechend der Einleitungstext erzeugt. Das Einfügen des Vorlage erfolgt dann online über eine Javascript.
Hinweis Es wird geprüft ob es sich um einen neuen Artikel handelt, d.h. ein bereits gespeicherte Artikel ohne Inhalt wird nicht als neu angesehen.
Einstellungen
Die Steuerung der Erweiterung erfolgt über Befehle auf der Seite MediaWiki:NewArticle. Der Aufbau der Seite ist:
Parameter1==Parameter2 // Parameter3==Parameter4
Die einzelnen Befehlszeilen werden jeweils durch eine Zeile mit der Zeichenfolge // getrennt.
Folgende Werte können für den ersten Parameter in der Zeile benutzt werden:
- Start - Der Wert nach dem Trennzeichen (==) wird vor der Liste der Vorlagen ausgegeben. Der Text wird direkt als HTML ausgegeben, MediWiki Code wird nicht ausgewertet.
- End - Wie beim Parameter Start, nur wird der Text als Abschluss nach der Liste der Vorlagen ausgegeben.
Bei allen anderen Zeilen ist der erste Parameter der Text der in der Liste angezeigt wird und der zweite Parameter ist der Name des Artikels, ohne die Namensraumangabe. Das folgende Beispiel
Start==Um ein einheitliches Erscheinungsbild zu erhalten gibt es in Stargate Wiki Vorlage für Artikel. // Person - Vorlage:Personenbeschreibung==Personenbeschreibung // Episode - Vorlage:Episodenbeschreibung==Episodenbeschreibung // End==Viel Spaß
erzeugt über dem Editorfeld den folgenden Text
Um ein einheitliches Erscheinungsbild zu erhalten gibt es in Stargate Wiki Vorlage für Artikel.
- Person - Vorlage:Personenbeschreibung
- Episode - Vorlage:Episodenbeschreibung
Viel Spaß
Probleme & Ideen
- In der aktuellen Version wird einfach der komplette Artikel eingefügt. Dabei werden die Anweisungen <noinclude> und <includeonly> nicht ausgewertet und erscheinen im Artikel.
- Als Abhilfe wird die nächste Version den Artikeltext nach dem einlesen aus der Datenbank per RegExpr filtern.
- Es finden noch kaum Prüfungen auf Fehler statt.
Code
<?php
$wgExtensionCredits['other'][] = array(
'name' => 'NewArticle',
'version' => '0.80',
'author' => 'Rene',
'url' => 'http://www.stargate-wiki.de/index.php/User:Rene/NewArticle',
'description' => 'Artikelvorlagen für neue Artikel anbieten.'
);
$wgHooks['AlternateEdit'][] = 'NewArticle';
// Umwandeln einer Zeichenkette fuer die JS Funktion unescape()
function JSencode($text) {
return rawurlencode(html_entity_decode(htmlentities($text,ENT_QUOTES,'UTF-8')));
}
function NewArticle(&$seite) {
global $wgOut;
// Pruefen ob der Artikel neu ist
if( !$seite->mArticle->exists() ) {
// Steuerseite einlesen "MediaWiki:NewArticle"
$steuer = new Article(Title::makeTitle(8,'NewArticle'));
$steuer->getContent();
// Pruefen ob Steuerseite vorhanden
if( $steuer->mContentLoaded ) {
// Ausgabe Puffer Variablen anlegen
$einleitung = ''; $abschluss = '';
$artikelliste = '<script type="text/javascript">';
$artikelliste .= 'function NewArticleGo(select) {';
$artikelliste .= 'var wert=select.options[select.options.selectedIndex].value;';
$artikelliste .= "insertTags('',unescape(wert),'');";
$artikelliste .= "}</script>\n";
$artikelliste .= '<select size="1" id="NewArticleSelect" onchange="NewArticleGo(this);">'."\n";
// Die einzelnen Zeilen, getrennt durch eine Zeile mit //, in Array einlesen
$steuerArray = explode("\n//\n", $steuer->mContent);
foreach( $steuerArray as $index => $value ) {
// Die Zeile aufteilen an den Zeichen ==
$zeile = explode("==",$value);
if( $zeile[0] == 'Start' ) {
$einleitung = $zeile[1];
} elseif ( $zeile[0] == 'End' ) {
$abschluss = $zeile[1];
} else {
// Artikel einlesen umwandeln und im HTML Code ablegen
$artikel = new Article(Title::makeTitle(10,$zeile[1]));
$artikel->getContent();
$artikelliste .= '<option value="'.JSencode($artikel->mContent).'">';
$artikelliste .= $zeile[0]."</option>\n";
unset($artikel);
}
}
// Ergebniss in die Ausgabe einfuegen
$wgOut->addHTML($einleitung.$artikelliste.'</select>'.$abschluss);
}
}
return true;
}
?>