users:werner:modirend
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
users:werner:modirend [2007-01-13 1742] – etwas verbessertes Deutsch werner | users:werner:modirend [2007-01-13 2115] (aktuell) – Erweiterung werner | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Ein Renderer-Plugin für DokuWiki ====== | ||
+ | ...das mir leider nicht geglückt ist :-( | ||
+ | |||
+ | Mich stört, dass im Sourcecode von DokuWiki die einfachen und doppelten Anführungszeichen fest codiert sind. Zur Zeit behebe ich das durch einen Flicken im verwendeten [[doku> | ||
+ | |||
+ | <code php> | ||
+ | <?php | ||
+ | ob_start(); | ||
+ | tpl_content(); | ||
+ | $myhtml = ob_get_contents(); | ||
+ | ob_end_clean(); | ||
+ | echo wfModiOut(' | ||
+ | ?> | ||
+ | </ | ||
+ | |||
+ | Dabei ist '' | ||
+ | |||
+ | <code php> | ||
+ | $retval = str_replace('& | ||
+ | $retval = str_replace('& | ||
+ | </ | ||
+ | |||
+ | Ich dachte mir, dass ein Renderer-Plugin so etwas überflüssig macht, und ging nun daran, mir die Freckelei im Template mit folgendem Stück Code zu ersparen: | ||
+ | |||
+ | <code php> | ||
+ | <?php | ||
+ | |||
+ | /** | ||
+ | MODIfied RENDerer for XHTML output | ||
+ | @license | ||
+ | @author Werner Flamme \< | ||
+ | **/ | ||
+ | // the following lines are stolen from the s5 plugin of Harry Fuecks and Andi Gohr | ||
+ | // must be run within Dokuwiki | ||
+ | if(!defined(' | ||
+ | |||
+ | // we inherit from the XHTML renderer instead directly of the base renderer | ||
+ | require_once DOKU_INC.' | ||
+ | // stolen code ends here | ||
+ | |||
+ | if (!defined(' | ||
+ | define(' | ||
+ | require_once DOKU_PLUGIN . ' | ||
+ | |||
+ | /** | ||
+ | This class allows to change the double and single quotation marks, | ||
+ | something I always wanted but what never got implemented. | ||
+ | Instead of modifying 4 lines in DokuWikis source code | ||
+ | I have to write a plugin :-( | ||
+ | **/ | ||
+ | class Doku_Renderer_modirend extends Doku_Renderer_xhtml { | ||
+ | |||
+ | /** | ||
+ | Return some info | ||
+ | **/ | ||
+ | function getInfo(){ | ||
+ | return array( | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ); | ||
+ | } // function getInfo | ||
+ | |||
+ | /** | ||
+ | add opening single quotation mark to document' | ||
+ | **/ | ||
+ | function singlequoteopening() | ||
+ | { | ||
+ | global $conf; | ||
+ | $default = '& | ||
+ | $insert | ||
+ | $this-> | ||
+ | } // function singlequoteopening | ||
+ | |||
+ | /** | ||
+ | add closing single quotation mark to document' | ||
+ | **/ | ||
+ | function singlequoteclosing() | ||
+ | { | ||
+ | global $conf; | ||
+ | $default = '& | ||
+ | $insert | ||
+ | $this-> | ||
+ | } // function singlequoteclosing | ||
+ | |||
+ | /** | ||
+ | add opening double quotation mark to document' | ||
+ | **/ | ||
+ | function doublequoteopening() | ||
+ | { | ||
+ | global $conf; | ||
+ | $default = '& | ||
+ | $insert | ||
+ | $this-> | ||
+ | } // function doublequoteopening | ||
+ | |||
+ | /** | ||
+ | add closing double quotation mark to document' | ||
+ | **/ | ||
+ | function doublequoteclosing() | ||
+ | { | ||
+ | global $conf; | ||
+ | $default = '& | ||
+ | $insert | ||
+ | $this-> | ||
+ | } // function doublequoteclosing | ||
+ | } // class Doku_Renderer_modirend | ||
+ | |||
+ | //Setup VIM: ex: et ts=4 enc=utf-8 : | ||
+ | </ | ||
+ | |||
+ | Ich benutze also den Standard-XHTML-Renderer und überschreibe 4 seiner Methoden. Wenn ich ein ''& | ||
+ | |||
+ | In der Praxis führt das ''& | ||
+ | |||
+ | Des weiteren führte das dazu, dass mein Apache auch auf anderen Seiten und ohne ''& | ||
+ | |||
+ | Ebenso erhalte ich einen Segfault, wenn ich folgendes in mein Template einbaue: | ||
+ | |||
+ | <code php> | ||
+ | if ($fpo = fopen(' | ||
+ | fwrite($fpo, | ||
+ | fclose($fpo); | ||
+ | } // if ($fpo = fopen(' | ||
+ | if ($fpn = fopen(' | ||
+ | $newlink = ' | ||
+ | echo " | ||
+ | $newlink = str_replace('& | ||
+ | fwrite($fpn, | ||
+ | if ($newc = fopen($newlink, | ||
+ | while (!feof($newc)) { | ||
+ | $newtxt = fread($newc, | ||
+ | fwrite($fpn, | ||
+ | } // while (!feof($newc)) | ||
+ | fclose($newc); | ||
+ | fclose($fpn); | ||
+ | } // if ($newc = fopen($newlink, | ||
+ | } // if ($fpn = fopen(' | ||
+ | </ | ||
+ | |||
+ | Die Datei '' | ||
+ | |||
+ | Ich dachte zuerst, dass -- aus welchem Grund auch immer -- innerhalb der Funktionen die von mir gesetzten Zeichen nicht bekannt sind, deshalb das Setzen von '' | ||
+ | |||
+ | Wenn mein Renderer gar nicht aufgerufen würde, würde entweder gar nichts passieren (bzw. eine Meldung kommen, dass der Renderer nicht zur Verfügung steht) oder die Default-Zeichen müssten erscheinen. Aber //gar nichts//? | ||
+ | |||
+ | Frage: warum stellt sich das erwartete Ergebnis -- also ein Text, der genau so aussieht wie der standardmäßig produzierte, |