Benutzer-Werkzeuge

Webseiten-Werkzeuge


comp:userfriendly

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

comp:userfriendly [2009-02-01 1546]
werner angelegt
comp:userfriendly [2009-02-01 1550] (aktuell)
werner Typos, Link zu Dilbert
Zeile 1: Zeile 1:
 +====== Userfriendly.org Daily Cartoon ======
  
 +Ich mag es, wenn auch mal tagesaktuelle Sachen in einem Wiki auftauchen. Zum Beispiel hatte ich per [[doku>​plugin:​iframe|iframe-Plugin]] den täglichen Spruch von [[http://​bowp.netaction.de/​ausrede/​]],​ aber 2009 hat der Spruch noch nicht gewechselt, und das ist langweilig. Ein Announcement ist auch nicht zu finden -- einfach mal schlecht gewartet, nehme ich an.
 +
 +So habe ich mir denn gedacht, man kann ja mal exemplarisch eine Cartoonseite einbinden. Seite einlesen, URL parsen, im Wiki einbauen, gut is :-) Najagut, Copyright ist zu beachten. Und so wie ich es umgesetzt habe, muss auch in den PHP-Einstellungen beachtet werden, dass die Funktion ''​file()''​ den Zugriff auf externe URLs erlaubt.
 +
 +Hier zeige ich mal den Code, den ich in meinen 4 Wänden benutze -- der also in diesem Wiki nicht aktiv ist, ihr braucht das auf dem [[playground:​playground|Spielplatz]] gar nicht zu versuchen ;-). Der Code steht in einer Datei namens ''​syntax.php''​ im Verzeichnis ''​lib/​plugins/​userfriendly''​ innerhalb meiner [[doku>​wiki|DokuWiki]]-Installation
 +
 +<code php>
 +<?php
 +/**
 + * userfriendly plugin: shows the daily cartoon from userfriendly.org
 + *
 +/**
 + * @license ​   GPL 2 (http://​www.gnu.org/​licenses/​gpl.html)
 + * @author ​    ​Werner Flamme <​w.flamme@web.de>​
 + * @date       ​2009-01-17
 + */
 +
 +if(!defined('​DOKU_INC'​))
 +    die();
 +if(!defined('​DOKU_PLUGIN'​))
 +    define('​DOKU_PLUGIN',​ DOKU_INC . '​lib/​plugins/'​);​
 +require_once(DOKU_PLUGIN . '​syntax.php'​);​
 +
 +/**
 + * All DokuWiki plugins to extend the parser/​rendering mechanism
 + * need to inherit from this class
 + */
 +class syntax_plugin_userfriendly extends DokuWiki_Syntax_Plugin {
 +
 +    var $err_sorrynopic = '​Sorry,​ no picture found';​
 +
 +    /**
 +     * return some info
 +     */
 +    function getInfo()
 +    {
 +        return array(
 +            '​author'​ => '​Werner Flamme',​
 +            '​email' ​ => '​w.flamme@web.de',​
 +            '​date' ​  => '​2009-01-17',​
 +            '​name' ​  => '​Userfriendly.org Cartoon Plugin',​
 +            '​desc' ​  => 'Shows the daily cartoon from userfriendly org ' .
 +                        'as shown on http://​ars.userfriendly.org/​cartoons/?​id=<​date>',​
 +            '​url' ​   => '​http://​www.wernerflamme.name/​doku.php?​id=comp:​userfriendly'​
 +        );
 +    } // function getInfo
 +
 +    /**
 +    * What kind of syntax are we?
 +    */
 +    function getType()
 +    {
 +        return '​substition';​
 +    } // function getType
 +
 +    /**
 +    * What kind of plugin are we?
 +    */
 +    function getPType()
 +    {
 +        return '​block';​
 +    } // function getPType
 +
 +    /**
 +    * Where to sort in?
 +    */
 +    function getSort()
 +    {
 +        return 200;
 +    } // function getSort
 +
 +    /**
 +    * Connect pattern to lexer
 +    */
 +    function connectTo($mode)
 +    {
 +        $this->​Lexer->​addSpecialPattern('​{~userfriendly~}', ​
 +                               ​$mode,​ '​plugin_userfriendly'​);​
 +    } // function connectTo
 +
 +    /**
 +     * Handle the match
 +    */
 +    function handle($match,​ $state, $pos)
 +    {
 +        return array();
 +    } // function handle
 +
 +    /**
 +     * Allow plugin types
 +    */
 +    function getAllowedTypes()
 +    {
 +        return array('​substition'​);​
 +    } // function getAllowedTypes
 +
 +    /**
 +     * Create output
 +     ​@param $mode       ​current mode of DokuWiki ​
 +            (see http://​wiki.splitbrain.org/​plugin:​tutorial)
 +     ​@param $renderer ​  ​DokuWiki'​s rendering object
 +     ​@param $data       (not looked at)
 +     ​@var ​  ​$pagearr ​   the starting page of userfriendly.org (as array)
 +     ​@var ​  ​$line ​      ​that'​s what $pagearr consists of
 +     ​@var ​  ​$srcpos ​    ​position of the line where SRC= starts
 +     ​@var ​  ​$srclen ​    ​length of the URL after SRC=
 +     ​@var ​  ​$picid ​     the URL of the daily cartoon
 +     ​@var ​  ​$linkstart ​ constant expression to start the link tag with
 +     ​@var ​  ​$imgstart ​  ​constant expression to start the img tag with
 +     ​@return true, if rendering happens, false in all other cases
 +    */
 +    function render($mode,​ &​$renderer,​ $data)
 +    {
 +        if ($mode == '​xhtml'​) {
 +            $pagearr = file("​http://​userfriendly.org/"​);​
 +            if (!is_array($pagearr))
 +                return -1;
 +            foreach ($pagearr as $line) {
 +                if (substr($line,​ 0, 50) == '<A href="​http://​ars.userfriendly.org/​cartoons/?​id='​) {
 +                    $srcpos = strpos($line,​ '​SRC="​http://​www.userfriendly.org/​cartoons/'​);​
 +                    $srclen = strlen($line) - $srcpos - 10;
 +                    $picid = substr($line,​ $srcpos + 4, $srclen);
 +                    $linkstart = '<a href="​http://​userfriendly.org/">';​
 +                    $imgalt ​   = '​userfriendly.org daily cartoon';​
 +                } // if URL in this line
 +            } // foreach ($pagearr as $line)
 +            if ( (strlen($picid) == 0) )
 +                $renderer->​doc .= "<​p>​{$this->​err_sorrynopic}</​p>";​
 +//            $renderer->​doc .= "<​p>​{$linkstart}Hier wäre *IHR* Bild.</​a></​p>​\n";​
 +            if (!function_exists('​p_get_instructions'​))
 +                require_once(DOKU_INC . '​inc/​parserutils.php'​);​
 +            $picid ​  = substr($picid,​ 1, -1);
 +            $instruc = p_get_instructions('​[[http://​www.userfriendly.org/​|{{'​ . $picid . '​}}]]'​);​
 +            $myinfo ​ = array();
 +            $retval ​ = p_render('​xhtml',​ $instruc, $myinfo);
 +//            echo htmlentities($retval);​
 +            $renderer->​doc .= $retval;
 +            return true;
 +       } // if ($mode == '​xhtml'​)
 +        return false;
 +    } // function render
 +
 +
 +} // class syntax_plugin_userfriendly
 +
 +//Setup VIM: ex: et ts=4 enc=utf-8 :
 +</​code>​
 +
 +So, und wenn ich auf eine Seite den Ausdruck schreibe, den ich in der Funktion ''​connectTo''​ benutzt habe, erhalte ich an dieser Stelle den Cartoon des Tages (nach Zeitrechnung des Standorts von userfriendly.org) von userfriendly.org :-).
 +
 +Der Code ist noch verbesserungswürdig. So könnte ich zum Parsen der Seite reguläre Ausdrücke benutzen und/oder könnte alles den Funktionen von ''​inc/​SimplePie.php''​ überlassen -- aber für den von mir skizzierten Wirkungsbereich ;-) tut die vorhandene Lösung erst mal, und wenn nix mehr kommt, sehen wir weiter... Vielleicht nehme ich dazu den [[http://​feeds.feedburner.com/​DilbertDailyStrip|RSS-Feed von Dilbert]] ;-)
comp/userfriendly.txt · Zuletzt geändert: 2009-02-01 1550 von werner