proggen.org-Projekt: DokuWiki-Plugin "Navigation"

Präsentation und Organisation von eigenen Projekten
Antworten
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

proggen.org-Projekt: DokuWiki-Plugin "Navigation"

Beitrag von Xin » Mi Okt 29, 2008 10:41 am

Ich möchte am Wochenende beginnen (und nach Möglichkeit sogar eine lauffähige Version hinbekommen) ein Plugin für Doku-Wiki zu entwickeln.

Dokuwiki basiert auf PHP, das Plugin wäre entsprechend ebenfalls PHP.
Ich stelle mir das so vor: Man gibt eine Seite an, z.B. c:navigation.

Die Seite kann beliebigen Text enthalten. Die Seite parsen wir nach Dots ( " *" ) und Links. Links in einem Kapitel kommen in ein Array, Unterkapitel werden weiter eingerückt, so dass eine Liste entsteht. Links, die nicht eingerückt sind können im Design nach Bedarf verbraten werden.

Code: Alles auswählen

[[c:Start|Home]]  <- Dieser Link wird immer eingefügt und dieser Text wird immer ignoriert.

  * [[Einleitung]]
    * [[Seite 1]]
    * [[Seite 2]]
  * [[Bla]]
    * [[Foo]]
    * [[Bar]]
Befinde ich mich nun auf Seite [[Foo]], so finde ich mich selbst im Array von Bla. Mein Parent ist also [[Bla]], Next ist [[Bar]] und ein Previous gibt es nicht. Frage ich im Design nach einem Link "Home", so kann ich auf [[c:start]] verweisen.

Wir brauchen also eine passende Datenstruktur und einen Parser, um die Navigation aufzubauen.

Als nächsten Schritt müssen wir rausfinden, wie wir Navigation in die Seiten bekommen. Auch hier möchte ich lieber automatisch vorgehen und eine Navigation anhand des Seitentitels in die Seite einfügen lassen.
Wird eine Seite gerufen, so wird geprüft, ob für diese Seite oder dessen Namensraum eine Navigation vorgesehen ist, die dann an die Seite angehängt wird.
Für den Namensraum c:* wäre die Navigation c:navigation zuständig, diese wird geparst und geguckt, ob die aufgerufene Seite in c:navigation verlinkt wird. Wenn ja, wird die Navigation entsprechend eingefügt, ansonsten werden lediglich die Standardlinks (hier Home) eingefügt.

Ich möchte die Navigation in einer Datei lagern, damit bei einer Änderung im Aufbau oder im Design nicht alle Wiki-Seiten angefasst werden müssen.
Soweit mein Plan. Ich werde dafür die Tage ein zweites Wiki auf dem Server installieren, damit wir was zum Spielen haben.

Soweit meine Gedanken zum ersten Schritt. Ideen, Kritik und fertige Sourcecodes willkommen ;)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: proggen.org-Projekt: DokuWiki-Plugin "Navigation"

Beitrag von Dirty Oerti » Fr Nov 07, 2008 6:24 pm

Zur Datenstruktur...
nur mal ein paar Theoretische Überlegungen:

Wir könnten das ganze als Baum aufbauen.
Die Wurzel wäre dann z.B. die Startseite des Wikis.
Davon gehen nun z.B. die Startseiten der einzelnen Wikiabschnitte weg.
Darunter befinden sich wiederum die einzelnen Überkapitel etc...
(Ich hoffe ihr versteht was ich meine).

Befindet man sich nun an einem beliebigen Punkt im Baum, so gibt man zuerst einen Link zur Wurzel und evtl deren Abzweigungen (nur die direkten Abzweigungen der Wurzel), sucht dann die Abzweigung heraus und macht das gleiche mit dem neuen Knotenpunkt, solange, bis man am "Standpunkt" angekommen ist.
Von da aus können dann alle darunter liegenden Abzweigungen ebenfalls ausgegeben werden, bei Bedarf auch alle Abzweigungen der Abzweigungen.

Ohje, ich hoffe ihr versteht mich :D

--------------------------------

Um diesen Baum aufzubauen könnte man die Linksyntax vom Wiki (bzw die Namespaces) zu Hilfe nehmen:

Code: Alles auswählen

c:lib:sonstwas:bla
Ergibt dann:

Wurzel "Wiki"
Abzweigung "c"
davon Abzweigung "lib"
davon Abzweigung "sonstwas"
davon Abzweigung "bla"

Oder man nimmt so eine Extraseite her, um das zu verwirklichen.
Pro der Extraseite:
Es ist einfacher, eine Unterscheidung zu treffen, ob eine Seite zum Kontext passt oder nicht.

Contra der Extraseite:
Die Seite muss bei Änderungen im Wiki auch mitbearbeitet werden.

Pro des Aufbaus durch Namespace:
Es läuft automatisch ab.

Contra:
Es ist schwer, da in c z.b. doch sehr viel liegt. Da muss man evtl die Auswahl einschränken.
Damit auch schwerer zu implementieren.
Nicht so anpassbar.

-------------------

Das Parsen dürfte an sich doch nicht sonderlich schwer werden...
Im Endeffekt müssen wir eine Seite nach diesen Zeichen durchsuchen: "[[" und optional "*"
Letzteres muss einzeln vorkommen und muss min 2 Leerzeichen vor sich haben. Anzahl Leerzeichen ergibt Ordnung, wichtigere (höhere) Seiten haben weniger Leerzeichen vor dem "*".
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Antworten