- Installation
- Fragen und Antworten
- Warum geht das hier /srv/www/cgi-bin/hp-kwiki aber oben geht es nicht
- Warum werden in diesem Wiki WikiWords auseinander geschrieben
- Bei mir funktionieren einige Formatierungen nicht:
- Gibt es irgendwo eine gute Dokumentation zu Kwiki
- Gibt es ein Inhaltsverzeichnis, auf dem alle Seiten angezeigt werden
- Wo kann man die Texte...ändern
- Wie kann man den KwikiUserNamen ausgeben
- Wie wird das Inhaltsverzeichnis oben automatisch erzeugt
- Wie und wo kann man die Einstellungsseite ändern
- Fragen (noch ohne Antworten)
- Wie muss ein Favicon beschaffen sein
- Tipps und Tricks v0.17 & v0.18
- Das Aussehen des Kwikis ändern
- Wie bekommt man eine Art von "Navigation" auf der linken Seite hin
- Links farblich hervorheben, wenn man mit der Maus drüber ist
- Tipps und Tricks v0.18
- Wie kann man die Navigation auf der Linken Seite farblich gegenüber dem Rest abheben
Nachdem ich (Christian Dühl) nach längeren Problemen mein Kwiki endlich zum Laufen gebracht habe, sehe ich nun eine Flut von Fragen auf mich zukommen. Ich dachte es ist eine gute Idee, hier eine Seite zur Diskussion über Kwiki-Interna zu eröffnen, in der man Tipps & Tricks und generelles Vorgehen besprechen kann.
Installation
- Installiert habe ich bei der Arbeit Kwiki-0.18 auf SuSE 9.0 / Apache 1.3.28 und zu Hause das gleiche Wiki auf SuSE 9.1 / Apache 2.0.49. Zuerst hatte ich es unter /srv/www/cgi-bin/hp-kwiki installiert, aber dort funktionierte die Verwendung der CSS-Dateien nicht und das ganze sah ziemlich nackt aus. Dann habe ich es mit tatkräftiger Unterstützung des Forums (http://forum.perl-community.de) nach /srv/www/htdocs/hp-kwiki verschoben, nach dem Anpassen der Apache-Konfiguration lief es dann auch.
- Meine Apachekonfiguration: (in /etc/httpd/httpd.conf bzw. /etc/apache2/httpd.conf) am Ende der Datei:
Alias /hp-kwiki/ /srv/www/htdocs/hp-kwiki/
<Directory /srv/www/htdocs/hp-kwiki/>
Order allow,deny
Allow from all
AllowOverride None
Options ExecCGI
AddHandler cgi-script .cgi .pl .perl
DirectoryIndex ./index.cgi
</Directory>
- Das Perl-Modul hab ich lokal zum Wiki abgelegt unter /srv/www/cgi-bin/hp-kwiki/lib/CGI/Kwiki.pm.
DirectoryIndex ./index.cgi
Fragen und Antworten
Warum geht das hier /srv/www/cgi-bin/hp-kwiki aber oben geht es nicht?
- (Der String ist oben identisch (per Copy & Paste eingefügt!) Wenn ich raten soll liegt das an einem RE-Fehler, da nicht auf die erste schließende eckige Klammer ] gematcht wird, sondern auf das letze. Da scheint mir eine RE zu gierig zu sein. Das Einfügen eines Fragezeichens an der richtigen Stelle könnte das Problem vielleicht beheben. Allerdings passiert es in dieser Zeile nicht mit der einzelnen freistehenden schließenden Klammer.
- Gut geraten, aber noch ganz knapp daneben, denn sonst hätte ich das Problem schon lang im Griff gehabt. Der Fehler lag in der Behandlung des Links zwischen den beiden [=proportional]-Texten. Trotzdem, so habe ich es endlich gefunden und dabei noch einen Bug bei den letzteren gleich mitgenommen.
in sub http_link:
Alt: qr{(?<!\!)\[(.*?(?:https?|ftp|irc):\S.*?)\]}
Neu: qr{(?<!\!)\[([^\]]*?(?:https?|ftp|irc):\S[^\]]*?)\]}
in sub inline:
Alt: qr{(?<!\!)\[=(.*?)\]}
Neu: qr{(?<!\!)\[=([^\]]*?\]?)\]} # Kann nun auch auf "]]" enden!
- Aha. Leider sehen die Funktionen bei mir anders aus. Dafür tritt der Bug da aber auch gar nicht erst auf. Schade, dass ich auf einer anderen Version aufgesetzt habe. Naja, das werd ich schon irgendwie hinbekommen, wenn ich da noch Funktionalitäten einbauen will. -- Christian Dühl
- Das wird schon gehen, keine Sorge.
Warum werden in diesem Wiki Wiki Words auseinander geschrieben?
- Hast Du dafür etwas geändert, Sören, oder ist das ein Unterschied zwischen 0.17 und 0.18? (Das ist oft schön, manchmal aber auch nicht, etwa bei SuSE etc.)
- Weil ich das so haben wollte. Die Diskussionen und Beispiele dazu finden sich unter Kwiki Kwiki: Separated Wiki Words, Kwiki Kwiki: Spaced Page Name, Kwiki Kwiki: Spaced Title Name und Kwiki Kwiki: Free Link. Bin dabei zuerst meinen eigenen Weg gegangen, und hab dann immer wieder an die damalige Entwicklung der Diskussion angegelichen... bis ich das dann auch (überlegt) aufgab. Die Änderungen, die ich gemacht habe, gehen sehr tief in Kwiki ein (Kwiki Database, Kwiki Formatter, Kwiki Search und was nicht alles) und sind für Version 0.17. Ich kann Dir Diffs erstellen, aber die helfen für 0.18 auch nur, um die Idee zu kriegen. Einfach übernehmen ist leider nicht möglich, denn 0.17 und 0.18 sind da inkompatibel.
Bei mir funktionieren einige Formatierungen nicht:
durchgestrichen, kleingeschrieben Links durch externe Bilder auf externe Seiten (Beispiel siehe Grafik Formatierung oder Bielefeld PM).
- Das sind Erweiterungen an Kwiki Formatter. Die ersten beiden sind vergleichsweise einfach, wobei das mit den Kommas für kleingeschrieben eine reichlich dumme - weil umständliche - Idee war... und sich demnächst einmal ändern könnte. Beispiele findest Du in Kwiki Formatter. Mit den Bildern in Links wird es sehr viel heikler, das ist noch ziemlich experimentell und hat zu zahlreichen Änderungen an Kwiki Formatter geführt. Diese will ich gerne wieder in eine weitere Subklasse packen, die ich dann auch veröffentliche. Siehe auch (uralte) Diskussion unter Kwiki Kwiki: Piki Wiki.
- Inzwischen habe ich bei mir auch durchgestrichen und klein eingebaut, dazu noch groß und hoch- und tiefgestellt. Dazu habe ich lib/CGI/Kwiki/Formatter.pm geändert (jede dieser Funktionen muss in der Funktion process_order mit aufgeführt werden):
sub durchgestrichen {
my ($self, $text) = @_;
$text =~ s#(?<![$WORD])-(\S.*?\S)-(?![$WORD])#<strike>$1</strike>#g;
return $text;
}
sub hochgestellt {
my ($self, $text) = @_;
$text =~ s#(?[$WORD]$1</sup>#g;
$text =~ s#\^(\S+)\^#<sup>$1</sup>#g;
return $text;
}
sub tiefgestellt {
my ($self, $text) = @_;
$text =~ s#(?[$WORD]$1</sub>#g;
$text =~ s#§(\S+)§#<sub>$1</sub>#g;
return $text;
}
sub kleiner {
my ($self, $text) = @_;
$text =~ s#(?[$WORD]$1</small>#g;
return $text;
}
sub groesser {
my ($self, $text) = @_;
$text =~ s#(?[$WORD]$1</big>#g;
return $text;
}
Nun habe ich auch die "Grafik-als-Link" Funktion eingebaut (ebenfalls in Formatter.pm):
sub http_picture_link {
my ($self, $text) = @_;
$self->split_method($text,
qr{(?<!\!)(\[\S+\.(?:gif|jpg|jpeg|ppm|png|bmp)\s+http\S+\])}i,
'http_picture_link_format',
);
}
sub http_picture_link_format {
my ($self, $text, $a, $b) = @_;
my ($bild, $link) = $text =~ /^\[(.+)\s+(.+)\]$/;
return qq(<a href="$link">) . $self->img_format($bild) . '</a>';
}
Eingetragen wird die Funktion (http_picture_link) dann in process_order vor named_http_link.
Gibt es irgendwo eine gute Dokumentation zu Kwiki?
- Die Kwiki-Seite ist http://www.kwiki.org/, dort gibts auch Dokumentation, allerdings ist die aktuelle Kwiki-Version anscheinend 0.33, also dürfte die Doku u.U. wenig mit diesem Wiki gemein haben.
- Die Dokumentation ist dort zumeist auf dem Stand von CGI::Kwiki 0.17 und ein wenig CGI::Kwiki 0.18. Zu Kwiki 0.31 und Kwiki 0.33 ist dort nur sehr wenig zu finden. Das ärgert dortige Wikizens so sehr, daß sie alle Doku zu den alten Versionen gerne von dort "herausoperieren" wollen. Komischer Laden.
- Dann gibt es noch perldoc lib/CGI::Kwiki (aus dem Hauptverzeichnis heraus aufgerufen), wenn man sich dem Perl-Code nähern will.
Gibt es ein Inhaltsverzeichnis, auf dem alle Seiten angezeigt werden?
- Ich habe gerade Site Map gefunden, das scheint in meinem Wiki so etwas zu leisten,
hier aber nicht jetzt doch.
- Ne gibts bei mir doch nicht, kommt aber immer als Suchergebnis (alle Seiten werden angezeigt, egal was ich im Suchfeld angebe).
- Site Map ist action=search&search= - ich habe hier einfach eine Seite mit [&REDIRECT action=search&search=] angelegt. --Sören M. Laird Sörries
- Klingt gut, klappt bei mir aber leider nicht. Hier aber schon, wie ich sehe. --Christian Dühl
- Wenn das, was bei Dir nicht klappt, das Kwiki Redirect ist, heißt das was Du dazu noch brauchst Kwiki Kwiki: Patch Redirection.
- Ja es scheitert an den Redirects (wie eine angelegte REDIRECT-Testseite zeigt). Ich hab den Patch so ähnlich (...) eingebaut, aber es läuft noch nicht. Ist natürlich aus der Ferne jetzt schwer was dazu zu sagen...
- Nun habe ich es hinbekommen. Da der angegebene Patch bei mir nicht funktioniert hat, hab ich aus dem Patch und den Erfahungen mit den Link- und Textauszeichnungsfunktionen im Formatter.pm das folgende gebastelt:
sub is_a_redirect {
my ($self, $text) = @_;
$self->split_method($text,
qr{(?<!\!)(?<!\s)(\[\&REDIRECT\s+\S+\])}i,
'is_a_redirect_format',
);
}
sub is_a_redirect_format {
my ($self, $text) = @_;
my ($whereto) = $text =~ /^\[\&REDIRECT\s+(\S+)\]$/;
$self->{redirect} = $whereto;
return "<h1>HIER!!!</h1>";
return qq(<a href="$whereto">klick</a>);
}
is_a_redirect wird dabei zuoberst in process_order eingetragen. Damit klappts nun auch mit dem Inhaltsverzeichnis! Es klappt dann nur, wenn vor dem Redirect-Ausdruck kein Leerzeichen steht. Das hat den Vorteil, dass man das Redirect vorzeigen kann (in der Dokumentation).
Wo kann man die Texte...ändern?
- der Buttons (EDIT, ...),
- des Suchstrings (search) und
- Kwiki Search - ich würde das durch Templates ersetzen, in config.yaml definieren (mach ich nachher auch)
- des Textes in nicht vorhandenen Seiten
- Generell kommen in den Templatedateien Zeichenketten in doppelten geschweiften Klammern vor, deren Inhalte wohl irgendwo ersetzt werden.
- Ich hab aber leider noch nicht gefunden, wo das passiert. Im Gegensatz dazu werden Werte aus der Datei config.yaml durch Platzhalter der Form [% loc_preferences_page %] dargestellt. Diese werden in Kwiki Template ersetzt.
- ...unter dem der Benutzer sich in den Einstellungen angemeldet hat (Wie machst Du das, Sören, dass im Linken Bereich unter dem Edit-Button noch der Link zu den Einstellungen (das ist klar) und der Name des Benutzers (das ist die Frage) erscheint?
Wie wird das Inhaltsverzeichnis oben automatisch erzeugt?
Ich sehe, dass dafür im Wiki-Code dieser Seite
[ &TOC ol link]
(ohne das Leerzeichen nach der öffnenden Klammer) eingetragen ist. Das bewirkt bei mir allerdings nichts, also vermute ich, dass man dafür einen weiteren Patch braucht?!
Wie und wo kann man die Einstellungsseite ändern?
Kann man die Einstellungsseite so ergänzen, dass man weitere Felder hinzufügt, so dass der User etwa zwischen bestimmten css-Sets wählen kann?
- In den Templates local/template/prefs_body.html und Kwiki Prefs
Fragen (noch ohne Antworten)
Wie muss ein Favicon beschaffen sein?
Ich habe inzwischen eines eingefügt bekommen, es muss wohl 16x16 Pixel groß sein und kann 256 Farben haben. Allerdings wird mein Favicon nur von einem einzigen Browser (Mozilla unter Linux) angezeigt, alle anderen zeigen es noch nicht an, deshalb vermute ich, dass damit noch irgendwas falsch ist.
Tipps und Tricks v0.17 & v0.18
Das Aussehen des Kwikis ändern
- Die CSS-Files in /srv/www/cgi-bin/hp-kwiki/css
- Die Templatefiles in /srv/www/cgi-bin/hp-kwiki/local/template (das original-Template-Verzeichnis dahin kopieren und dort ändern)
- Die Datei /srv/www/cgi-bin/hp-kwiki/config.yaml - hier ein Auszug aus meiner (v0.18):
top_page: StartSeite
changes_page: Änderungen
preferences_page: Einstellungen
slogan: H+P internal Kwiki
title_prefix: H+P Kwiki
stylesheet: Kwiki.css
kwiki_image: hp_logo.gif
- Das Logo habe ich (wie man sieht) über die config.yaml eingestellt, die dort angegebene Datei liegt direkt im Kwiki-Hauptverzeichnis.
- Kleiner unvollständiger Überblick über die Template-Dateien, so weit ich mich dort eingewühlt habe (generell zum Herausfinden: einfach fett eine eindeutige H1-Überschrift eintragen und schauen, wann sie wo auftritt):
display_header.html |
Kopf der normalen Ansicht |
display_body.html |
Mittelteil der normalen Ansicht |
display_footer.html |
Fußteil der normalen Ansicht |
basic_footer.html |
Kommt (auch?) als Fuß beim Editieren zum Einsatz (v0.18) |
Wie bekommt man eine Art von "Navigation" auf der linken Seite hin?
Ich habe dazu in der Datei display_header.html folgende Eintragungen am Ende von <div id="banner"> eingefügt:
<span>HP-Kwiki</span>
<div style="font-size:10pt">
<hr />
<a href="[% script %]?[% top_page %]" accesskey="1">[% loc_top_page %]</a>
<br />
<a href="[% script %]?[% changes_page %]">[% loc_changes_page %]</a>
<br />
<a href="[% script %]?action=prefs">[% loc_preferences_page %]</a>
<br /> <hr />
<a href="[% script %]?WikiBewohner">Wiki-Bewohner</a>
<br />
<a href="[% script %]?AktuelleProjekte">Aktuelle Projekte</a>
<br /> <hr />
<a href="[% script %]?KWikiFormatierungen">Formatierungen</a>
</div>
Links farblich hervorheben, wenn man mit der Maus drüber ist
a:hoover {
text-decoration:underline;
background:#DE8;
}
a:active {
text-decoration:underline;
background:#DE8;
}
#banner a:hoover {
text-decoration:underline;
background:#BC6;
}
#banner a:active {
text-decoration:underline;
background:#BC6;
}
Tipps und Tricks v0.18
Per Default ist der Editieren-Button ganz am Ende des linken Bereiches. Das ist insbesondere bei kurzen Seiten blöd, weil er sich dann nämlich mit den Einträgen auf der linken Seite überschneidet. Deshalb habe ich es so gemacht, dass er immer oben unter der Navigation platziert wird. Dazu habe ich den entsprechenden Eintrag in display_body.html auskommentiert und statt dessen in display_header.html (am Ende von <div id="banner">) eingefügt. Der Abschnitt, um den es geht, lautet:
[% IF is_editable %]
<hr />
<form class="edit">
<input type="submit" name="button-edit" value="{{EDIT}}">
[% ELSE %]
<form action="admin.cgi" class="admin">
<input type="submit" name="button-login" value="{{LOGIN}}">
[% END %]
<input type="hidden" name="action" value="edit">
<input type="hidden" name="page_id" value="[% page_id %]">
</form>
Wie kann man die Navigation auf der Linken Seite farblich gegenüber dem Rest abheben?
Ich habe dazu in css/Kwiki.css folgende Farbeintragungen für den Hintergrund vorgenommen: (Inzwischen habe ich css und Templates stark abgeändert, aber obiges ist ein guter Anfang. (Jetzt heißen die Bereiche aber teilweise anders.))
body |
#EF9 |
banner |
#CD7 |
content |
#EF9 |
blogbody |
#EF9 |