Gibt es eine Anleitung zur Erstellung von Plugins?

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
Post Reply
Traktorist
Posts: 235
Joined: Mon Mar 07, 2011 4:34 pm
Location: South of Lower Saxony, Germany

Gibt es eine Anleitung zur Erstellung von Plugins?

Post by Traktorist » Sat Jan 05, 2013 8:15 pm

Hallo zusammen,

gibt es irgendwo eine einfach, also eine für "PHP nicht so Wissende", verständliche Erklärung zur Erstellung von CMSimple_XH Plugins? Vielleicht sogar eine Step by Step Anleitung.

Viele Grüße, Ele

Gert
Posts: 3078
Joined: Fri May 30, 2008 4:53 pm
Location: Berlin
Contact:

Re: Gibt es eine Anleitung zur Erstellung von Plugins?

Post by Gert » Sat Jan 05, 2013 8:52 pm

Hallo Ele,

für "PHP nicht so Wissende" wird es schwer, ungefähr so schwer wie für "html und CSS nicht wissende" die Erstellung von Templates sein wird.

Aber wir haben ja alle mal angefangen (bei mir ist das noch gar nicht so lange her, was php betrifft).

Ich habe einfach mit dem Example Plugin angefangen:

http://www.cmsimplewiki.com/doku.php/plugins/example

Das demonstriert, wie man ein Plugin aufbaut, aber um eine intensive Beschäftigung mit php wirst Du wohl nicht herumkommen, wenn Du Plugins entwickeln willst,

Gert
Gert Ebersbach | CMSimple | Templates - Plugins - Services

Traktorist
Posts: 235
Joined: Mon Mar 07, 2011 4:34 pm
Location: South of Lower Saxony, Germany

Re: Gibt es eine Anleitung zur Erstellung von Plugins?

Post by Traktorist » Sat Jan 05, 2013 9:40 pm

Hallo Gert,

danke für die Antwort.
Gert wrote:für "PHP nicht so Wissende" wird es schwer, ungefähr so schwer wie für "html und CSS nicht wissende" die Erstellung von Templates sein wird.
Ja, alles relativ :)
Gert wrote:Aber wir haben ja alle mal angefangen
Gut zu wissen, ich dachte ich bin der Einzige :D
Danke für den Link.
Den hatte ich bei meinen Recherchen noch nicht gefunden und werde mir den Sache mal ansehen.

Viele Grüße, Ele

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Gibt es eine Anleitung zur Erstellung von Plugins?

Post by cmb » Sat Jan 05, 2013 9:54 pm

Hallo Ele,

mit dem Example Plugin habe ich auch angefangen; und dann einfach mal beim ein oder anderen Plugin reingeschaut, wie's da so gemacht wird.

Du solltest Dir aber auch mal das Template Tutorial im XH-Wiki anschauen. Sicher noch ausbaufähig, aber gerade für den ersten Einstieg ganz gut geeignet, hoffe ich. Und als Ergebnis hat man dann gleich ein auch praxistaugliches Plugin (wenn natürlich auch dieses noch ausbaufähig ist).

Und wenn Du schon mal im Developer-Teil des XH-Wiki bist, am besten auch mal einen Blick auf die Golden Rule werfen, und den Rest der Entwicklerdoku (auch noch ausbausfähig ;)). Die Artikel über System-Variablen und -Funktionen sind dann vermutlich die derzeit beste Referenz; allerdings ist da nicht jede Angabe auf die Goldwaage zu legen.

Wenn Dir Fehler auffallen, oder Du sonst Anregungen und Kritik hast: bitte raus damit! Wie gesagt: da sollte noch einiges verbessert werden.

Christoph

PS: Ich habe mir das Example-Plugin/Tutorial gerade noch mal angeschaut. Dazu folgende Bemerkungen:
  • Dort findet man, wie auch in so manchem anderen Plugin, folgende Zeilen:

    Code: Select all

        $admin = isset($_GET['admin']) ? $_GET['admin'] : '';
        $admin .= isset($_POST['admin']) ? $_POST['admin'] : ''; 
    Das ist natürlich Unfug. Man will niemals einen gleichnamigen $_GET und $_POST Parameter aneinander hängen (es können nämlich durchaus beide gesetzt sein). Einfacher und korrekter geht es mit

    Code: Select all

    initvar('admin'); 
    was aber nach dem Aufruf von print_plugin_admin() nicht nötig ist, weil es dort schon aufgerufen wird. $_REQUEST['admin'] geht grundsätzlich auch, allerdings wird hier ggf. noch ein entsprechender Cookie berücksichtigt.
  • Des weiteren findet man im Example-Plugin:

    Code: Select all

            $hint=ARRAY();
            $hint['mode_donotshowvarnames'] = TRUE;
    
            /*
            * Handle reading and writing of plugin files (e.g. en.php, config.php, stylesheet.css)
            * 
            * Arguments:
            * 
            *     - STRING    $action:    'plugin_edit'                - edit variables (e.g. config variables)
            *                                             'plugin_text'                -    edit text (e.g. stylesheet, plain text messages)
            *                                             'plugin_save'                - save variables
            *                                             'plugin_textsave'        - save text
            * 
            *     - STRING    $admin:        'plugin_config'            - edit Plugin Config
            *                                             'plugin_language'        - edit Plugin Language
            *                                                'plugin_main'                - show/edit Plugin Main
            *                                             'plugin_stylesheet'    - edit Plugin Stylesheet
            * 
            *     - STRING    $plugin        '<PLUGIN_NAME>'     - The name of the plugin (use $plugin whenever possible)
            * 
            *     - ARRAY        $hint            ['cf_variable_name']    - Show description/hint for variables
            *                                                                                             You may set hints either in the language files like $plugin_tx['example_plugin']['cf_my_name']
            *                                                                                             or define them directly like this: $hint['cf_my_name'] = 'test: my hint';
            * 
            *                                             ['mode_donotshowvarnames'] - Do not show hints (TRUE) or show hints (FALSE)    
            * 
            * 
            */
            $o.=plugin_admin_common($action, $admin, $plugin, $hint); 
    Ich empfehle auf das $hint['mode_donotshowvarnames'] zu verzichten. Das wird von fast keinem Plugin genutzt, und fliegt vermutlich bei XH 1.6 auch raus. Die Parameter für plugin_admin_common() sind zwar richtig dokumentiert, aber die ersten drei spielen keine Rolle, da diese Funktion direkt zu Beginn die Parameter durch globale Variablen überschreibt. :roll: Aber vielleicht wird das irgendwann mal behoben, so dass man die Parameter korrekt angeben sollte. Eselsbrücke: $action, $admin, $plugin einfach in alphabetischer Reihenfolge angeben. Und wer auf die Idee kommt, diese Parameter zu ändern (bzw. damit überhaupt was passiert, die globalen Parameter kurzfristig zu verbiegen), um die Funktion für eigene Zwecke zu missbrauchen: spart Euch die Zeit -- da ist leider nichts zu wollen.
  • Im Example-Plugin findet man weiterhin:

    Code: Select all

        global $sn,$sv,$sl,$pth;
        
        global $plugin; 
    Das Deklarieren von globalen Variablen ist im Datei-Scope nicht nötig, da die Plugins (index.php und admin.php) im globalen Scope included werden; und das wird gewiss auch so bleiben, weil sonst viele Plugins nicht mehr funktionieren würden.
  • Folgendes ist ebenfalls unnötig:

    Code: Select all

        $plugin=basename(dirname(__FILE__),"/"); 
    weil $plugin bereits vom Pluginloader richtig gesetzt wird, bevor index.php und admin.php included werden. Allerdings ist $plugin nicht mehr gültig, wenn dann bereits das nächste Plugin eingelesen wurde; also wenn aus dem Content oder dem Template eine Pluginfunktion aufgerufen wird.
  • Vorsicht mit dem unteren Teil von admin.php (ab Zeile 225). Da werden einige Funktionen aufgerufen (Plugin...()), die vermutlich in XH 1.6 nicht mehr vorhanden sind. Ich gehe eigentlich davon aus, dass die bei keinem Plugin genutzt werden. Falls doch, müssten sie zunächst weiter zur Verfügung gestellt werden. Weiß da jemand was drüber?
Last edited by cmb on Sat Jan 05, 2013 10:32 pm, edited 1 time in total.
Reason: added PS
Christoph M. Becker – Plugins for CMSimple_XH

Post Reply