Menü aufrufen
Toggle preferences menu
Persönliches Menü aufrufen
Nicht angemeldet
Ihre IP-Adresse wird öffentlich sichtbar sein, wenn Sie Änderungen vornehmen.

Benutzer:Rene/NewArticle: Unterschied zwischen den Versionen

aus Stargate Wiki, dem deutschsprachigen Stargate-Lexikon
Weiterleitung nach Benutzer:Rene/SGPack erstellt
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
==Beschreibung==
#redirect [[Benutzer:Rene/SGPack]]
Die Erweiterung '''NewArticle''' erzeugt, immer wenn ein neuer Artikel angelegt wird, eine Auswahl an Vorlagen. Wird eine dieser Vorlagen ausgewählt so wird die Vorlage in das Editorfeld eingefügt. Sinn ist es das Erstellen von Artikeln nach den [[Hilfe:Artikelvorlagen|Artikelvorlagen]] zu erleichtern.
 
'''''Hinweis:''' Die Erweiterung wurde mit den MediaWiki Versionen 1.10.0+ getestet.''
===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. Dazu werden die Vorlagen bei der Erstellung der Seite eingelesen und in eine Javascript Funktion verpackt.
 
Ab der Version 0.9 prüft die Erweiterung auf die Anweisungen <nowiki><noinclude></nowiki> und <nowiki><includeonly></nowiki>. Diese werden erkannt und entsprechend ausgewertet.
 
'''''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.''
 
==Installation==
Um die Erweiterung in MediaWiki einzubinden wird eine neue Datei '''NewArticle.php''' im Verzeichnis '''extensions''' angelegt. Diese Datei muss das im Abschnitt Code angegeben Programm enthalten. Um die Erweiterung zu aktivieren wird danach die Datei '''LocalSettings.php''' um die folgende Zeile erweitert:
 
  require_once("$IP/extensions/NewArticle.php");
 
Alternativ kann man die Programmdatei auch in ein eigenes Verzeichnis NewArticle speichern. Dann muss natürlich der Aufruf in LocalSettings.php entsprechend geändert werden.
 
Als letztes wird der Steuerartikel '''MediaWiki:NewArticle''' angelegt. Die Parameter findet man im Abschnitt Einstellungen.
 
'''''Hinweis:''' Das bearbeiten von Artikeln im MediaWiki Namensraum ist normalerweise nur Administratoren möglich.''
 
==Einstellungen==
Die Steuerung der Erweiterung erfolgt über Befehle auf der Seite [[MediaWiki:NewArticle]]. Der Aufbau der Seite ist:
 
<pre>
Parameter1==Wert1
//
Parameter2==Wert2
</pre>
 
Die einzelnen Befehlszeilen werden jeweils durch eine Zeile getrennt die '''nur''' die Zeichenfolge '''//''' enthält.
 
Folgende Werte können für den Parameter 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.
*Einleitung - Der Wert wird in der ersten Zeile der Auswahlbox angezeigt. Wird der Parameter nicht angegeben so erscheint dort ''Bitte wählen''.
 
Bei allen anderen Zeilen ist der Parameter der Text der in der Liste angezeigt wird und der Wert ist der Name des Artikels, ohne die Namensraumangabe. Das folgende Beispiel
 
<pre>
Start==<div class="main"><div class="heading">Neuen Artikel anlegen</div>
Du bist dabei einen neuen Artikel in Stargate Wiki zu schreiben. Um dir die Arbeit zu erleichtern
und ein einheitliches Erscheinungsbild der Artikel zu erreichen gibt es in Stargate Wiki Vorlagen
für einzelne Artikelgruppen. Wähle daher bitte aus der Liste das Thema des neuen Artikels aus. Die
entsprechende Artikelvorlage wird dann in das Editorfeld eingefügt und kann sofort bearbeitet
werden.<br /><br />Natürlich kannst du auch einen Artikel ohne Vorlage anlegen. Dies ist z.B. bei
Diskussions-, Weiterleitungs- oder auch Begriffsklärungs-Seiten nötig.<br /><br />
&nbsp;&nbsp;&nbsp;&nbsp;Thema des Artikels
//
Person -> Vorlage:Personenbeschreibung==Personenbeschreibung
//
Objekt -> Vorlage:Objektbeschreibung==Objektbeschreibung
//
Episode -> Vorlage:Episodenbeschreibung==Episodenbeschreibung
//
Darsteller -> Vorlage:Darstellerbeschreibung==Darstellerbeschreibung
//
Planet -> Vorlage:Planetenbeschreibung==Planetenbeschreibung
//
End==<br /><br />Vielen Dank.</div>
</pre>
 
erzeugt über dem Editorfeld die folgende Ausgabe:
 
[[Bild:NewArticle.png]]
 
'''''Hinweis:''' Die CSS-Klassen main und heading sind in Stargate Wiki definiert. Bei einem Einsatz in einem anderen Wiki kann man hier natürlich andere Definitionen benutzen.''
 
==Copyright==
Die Erweiterung unterliegt der GPL (Version 2). Das bedeutet der Einsatz in anderen MediaWikis ist erlaubt solange der Hinweis auf den Author und die GPL erhalten bleibt. Dazu genügt, in diesem Falle, bereits der von der Erweiterung selbst erzeugte Link auf der System Seite [[Spezial:Version]]. Natürlich kann die Erweiterung auch in anderen System benutzt werden, unter Beachtung der GPL.
 
Über einen kleinen Hinweis (auf der Diskussionsseite) in welchem Wiki die Erweiterung eingesetzt wird würde ich mich freuen, ist aber keine Pflicht.
 
==Probleme & Ideen==
*Es finden noch kaum Prüfungen auf Fehler statt.
*Text als Wikitext interpretieren.
 
==Code==
<pre>
<?php
# Copyright (C) 2007 René Raule
# http://www.stargate-wiki.de/index.php/Benutzer:Rene/NewArticle
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You find a copy of the GNU General Public License at
# http://www.gnu.org/copyleft/gpl.html
 
$wgExtensionCredits['other'][] = array(
  'name' => 'NewArticle',
  'version' => '0.90',
  'author' => '[http://www.stargate-wiki.de/index.php/User:Admin Rene Raule]',
  'url' => 'http://www.stargate-wiki.de/index.php/User:Rene/NewArticle',
  'description' => 'Artikelvorlagen f&uuml;r neue Artikel anbieten.<br />Choose template out of list for new article'
);
 
$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')));
}
 
/* Filter des Artikels, noinclude Bereiche entfernen */
function FilterPage($text) {
  // <noinclude> Bereiche komplett entfernen
  $expr = '/(.*)<noinclude>(?s).*<\/noinclude>(.*)/';
  $replace = '$1$2';
  $text = preg_replace($expr,$replace,$text);
  // <includeonly>, </includeonly> einfach entfernen
  $expr = '/(.*)<includeonly>|<\/includeonly>(.*)/';
  $replace = '$1$2';
  $text = preg_replace($expr,$replace,$text);
  return $text;
}
 
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 = ''; $textErsteWahl = 'Bitte w&auml;hlen';
      $listenKopf = '<script type="text/javascript">';
      $listenKopf .= 'function NewArticleGo(select) {';
      $listenKopf .= 'var wert=select.options[select.options.selectedIndex].value;';
      $listenKopf .= "insertTags('',unescape(wert),'');";
      $listenKopf .= "}</script>\n";
      $listenKopf .= '<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];
        } elseif ( $zeile[0] == 'Einleitung' ) {
          $textErsteWahl = $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(FilterPage($artikel->mContent)).'">';
          $artikelListe .= $zeile[0]."</option>\n";
          unset($artikel);
        }
      }
      $ersteWahl = '<option value="">'.$textErsteWahl.'</option>'."\n";
      // Ergebniss in die Ausgabe einfuegen
      $wgOut->addHTML($einleitung.$listenKopf.$ersteWahl.$artikelListe.'</select>'.$abschluss);
    }
  }
 
  return true;
}
</pre>