Homepage

Willkommen

Digitales für den Unterricht

Medienbildung für alle (2001)

GrandOrgue-Orgelsoftware

Eine statische Website mit pmWiki erstellen - zur Programmierung dieser Seite

Wichtige Hinweise

Eine statische Website mit pmWiki erstellen - Infos zur Programmierung von www.nadenau.de

- Alle Angaben ohne Gewähr -

0. Allgemeines*)

Die vorliegende Website funktioniert ohne Skripte; bei allen Seiten, die vom Hauptmenü aus erreichbar sind, handelt es sich um statische HTML-Seiten. Um trotzdem mit einfachen Mitteln für ein einheitliches Layout sorgen zu können, basiert der Web-Auftritt auf einem pmWiki, das lokal auf einem Computer betrieben wird - und damit indirekt doch auf (PHP-)Skripten. PmWiki ist eine Wiki-Software, die in PHP progrogrammiert ist, unter der General Public License vertrieben wird und auch für Nicht-Profis einfach zu installieren ist. Die im Netz unter http://www.nadenau.de verfügbare Website ist also ein statisches Abbild eines pmWikis. Die vorliegende Anleitung erläutert, wie das statiscxhe Abbild erstellt wurde.

1. Inhalte einpflegen

Um die vorliegende Website zu erstellen, wurden zuerst die Inhalte in ein lokales pmWiki eingepflegt; dazu wird ein Apache2-Webserver genutzt, der so eingestellt ist, dass er nur auf der lokalen Maschine (als http://127.0.0.1) erreichbar ist.

2. Layout erstellen

Das Layout eines pmWikis wird wesentlich durch das Skin festgelegt. Die entsprichenden Dateien befinden sich im Verzeichnis .../pmwiki/pub/skins1). Jedes Unterverzeichnis von .../pmwiki/pub/skins enthält jeweils eine "Haut" für das Wiki. Zum Erstellen einer statischen Website braucht man mindestens zwei "Häute": zum einen das normale pmwiki-Skin, um die Inhalte einpflegen zu können, und zum anderen das eigentliche Skin für die Seite im Netz, bei dem alle Editier-Möglichkeiten ausgeschaltet bzw. gelöscht sind; die entsprechenden Änderungen sind an der Datei pmwiki.tmpl vorzunehmen. Ein Muster für das zweite Skin findet sich im zip-File no-edit.zip. In der Datei .../pmwiki/local/config.php kann man festlegen, welches Skin benutzt wird2). Standardeinstellung ist $Skin = 'pmwiki'.

3. Statisches Abbild der Datei erzeugen

Wie sich das statische Abbild eines pmWikis mit dem Programm wget erstellen lässt, wird auf http://www.pmwiki.org/wiki/Cookbook/ExportHTML (Stand beim Erstellen dieses Textes: 15.10.2012) ausführlich dargestellt. Mit dem Befehl
   wget -r -k -np -p -l 0 http://127.0.0.1/pmwiki.php --html-extension
wird wget angwiesen das Verzeichnis .../127.0.0.1 anzulegen und in diesem Verzeichnis ein statisches Abbild des Wikis zu speichern. Man erhält dabei allerdings Dateien mit ganz merkwürdigen Dateinamen:
   pmwiki.php?n=Main.HomePage.html
   pmwiki.php?n=Main.Links.html
   pmwiki.php?n=Main.Medienbildung.html
   ...
Die gängigen Browser3) können zwar durchaus mit diesen Dateinamen umgehen, für eine Website im weltweiten Netz wird sie aber wohl niemand einsetzen wollen.

4. Dateinamen korrigieren

Ein Programm zum Korrigieren der Dateinamen lässt sich als Perl-Skript realisieren; das Skript cleanhtml4pmwiki.pl (s. auch Anlage) übernimmt nicht nur die Aufgabe, die Dateinamen selbst anzupassen, sondern es verändert auch die Links auf die Dateien mit den veränderten Namen - vorausgesetzt alle "so oder so" betroffenen html-Dateien liegen im Hauptordner .../127.0.0.1 des pmWiki-Abbildes.
Befindet sich das Skript cleanhtml4pmwiki.pl im Verzeichnis, das .../127.0.0.1 übergeordnet ist, so lässt sich aus dem Verzeichnis .../127.0.0.1 selbst heraus die Umbenennung der html-Dateien in diesem Ordner mit dem Konsolenbefehl perl ../cleanhtml4pmwiki.pl anstoßen. Die Namen der veränderten Dateien beginnen mit der Vorsilbe "fxd", die andeuten soll, dass diese Dateien fixed, also statisch sind.

*) Dieses Werk kann durch jedermann gemäß den Bestimmungen der Lizenz für Freie Inhalte, wie sie im Mai 2003 in der Version 1.0 vom Kompetenznetzwerk Universitätsverbund MultiMedia NRW, Universitätsstraße 11, D-58097 Hagen veröffentlicht wurde, genutzt werden.
(Quelle: http://www.politikon.org/e-lernplattform/lizenzmodelle/lizenz-fuer-freie-inhalte.html, 01.08.2008)
1) falls .../pmwiki (also z.B. /home/fritz/pmwiki) das Hauptverzeichis des pmWikis ist.
2) Erstellt man mehrere Kopien pmwiki01.phpq, pmwiki02.php, ...von pmwiki.php, die auf unterschiedliche Konfigurationsdateien config01.php, config02.php, ... (im Ordner .../pmwiki/local) verweisen, lassen sich gleichzeitig mehrere Skins parallel verwenden, z.B. ein Skin mit Editiermöglichkeiten und ein Skin ohne Editiermöglichkeiten. Die entsprechenden Änderungen der Datei pmwiki.php bzw. ihrer Kopien, lassen sich auch ohne echte PHP-Kenntnisse bewerkstelligen.
3) von mir getestet unter Debian Squeeze und Lubuntu 12.04


Anlage: Das Skript

### Perl-Skript cleanhtml4pmwiki.pl
###
### zur Erstellung einer statischen Website aus einem pmWiki
### nach Abruf mit 
###    wget -r -k -np -p -l 0 http://127.0.0.1/pmwiki.php --html-extension
###
### Dokumentation unter www.nadenau.de
###
### (c) Matthias Nadenau 2012
###
### Stand 18.10.2012
### Das Programm steht unter der GNU General Public License (GPLv3)
### und wird ohne jegliche Gewähr ausgeliefert
###
$tmpd="temp_txt_1544.txt";
opendir in, './' || die $!;
@dir=readdir(in);
foreach (@dir){
  $name1=$_;
  s/pmwiki.php\?n=/fxd/;
  s/\?action=/__/;
  $name2=$_;
  if ($name1 ne $name2) {
    rename($name1,$name2) || die "Fehler: $!";
    print $name1, " -> ", $name2, "\n";
  }
}
closedir in ;
opendir in, './' || die $!;
@dir=readdir(in);
foreach (@dir){
  $dname=$_;
  if ((-f $_) && (/html$/)){
    open QL, "<", $dname;
    open ZL, ">", $tmpd;
    $zeilenzahl=0;
    while (defined($_=<QL>)) {
      chomp($_);
      $zeilenzahl++;
      s/fxd/fxd/g;
      s/__/__/g;
      print ZL $_ . "\n";
    }
    close QL;
    close ZL;
    unlink($dname) || die $!;
    if (-f $tmpd){
      rename($tmpd,$dname) || die $!;
    }
    print $dname, ": ", $zeilenzahl, " Zeilen\n";
  }
}
closedir in;
###
### jetzt erstellen wir noch index.htm[l]
###
open QL, "<",  'pmwiki.php.html';
open ZL1, ">", 'index.html';
open ZL2, ">", 'index.htm';
  while (defined($_=<QL>)) {
    chomp($_);
    print ZL1 $_ . "\n";
    print ZL2 $_ . "\n";
  }
close QL;
close ZL1; close ZL2;

www.nadenau.de, page last modified on March 16, 2013, at 07:05 PM