php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 23.06.2009, 18:32  
Neuer Benutzer
 
Registriert seit: 18.10.2008
Beiträge: 15
PHP-Kenntnisse:
Anfänger
Cout befindet sich auf einem aufstrebenden Ast
Cout eine Nachricht über ICQ schicken
Standard Plugin Controller

Moin Leute,
ich hab heute einen kleinen PluginController geschrieben und würde gerne wissen was ihr davon haltet.
Arbeitsweise:
  1. Plugins werden gesucht und in die Registrierung geschrieben.
  2. Plugins werden nach ihren Typen unterschieden:
    • NOW
      Plugins mit diesem Wert werden sofort bearbeitet.
    • HOOK
      Plugins mit diesem Wert werden erst bearbeitet wenn der entsprechende Hook registriert wird.
  3. Plugins werden nach folgenden Typen bearbeitet:
    • FUNCTION / PHPCODE
      Plugins mit diesem Werten werden sofort eingebunden.
    • CLASS
      (1) Objekt des Plugins wird erstellt. Der Name der Klasse setzt sich aus "Plugin" und dem Namen des Plugins zusammen
      (2) Der Rückgabewert wird in der Registrierung gespeichert und zurück gegebenen.
  4. Hooks können registriert werden.

XML Konfigurations Datei:
Code:
<?xml version="1.0" encoding="UTF-8"?>

<root>
    <!-- Konfiguration des Plugins -->
    <config>
       <!-- Beschreibung des Plugins -->
       <name>BBCode</name>
       <version>0.1</version>
       <autor>Cout</autor>
       <description>Formatiert einen String nach den BBCode Regeln</description>

       <!-- Wann und wie soll das Plugin angewendet werden -->
       <action>HOOK</action>

       <!-- Eigenschaften des Plugins -->
       <type>CLASS</type>
       <hook>FormateText</hook>
       <return>true</return>
   </config>
   <!-- Dateien die zum Plugin gehören -->
   <files>BBCode/BBCode.plugin.php</files>
</root>
Klasse:
PHP-Code:
<?php

    
class PluginController 
    
{

        
## Plugin register
        
private $register = array();

        
/**
         * Klasse erstellen
         */
        
public function __construct()
        {
            
## Plugins laden
            
$this -> getPlugins();
        }

        
/**
         * Plugins laden
         */
        
private function getPlugins()
        {

            
## Ordner "Plugins" auf Plugins durchsuchen
            
foreach ( globRegistry::get'dirPlugins' ) . "*/*.plugin.xml") as $filename)
            {
                
## XML Konfigurations Datei einlesen
                
$xml simplexml_load_file$filename );

                
## Plugin Name auslesen
                
$name = (string)$xml -> config -> name;

                
## Wurde eine Registrierungs Name angegeben
                
if ( $name == null )
                   throw new 
SystemException'Plugin Fehler: Es wurde kein Plugin Name angegeben.' );

                
## Existiert der Plugin Name bereits
                
if ( isset( $this -> register$name ] ) )
                   throw new 
SystemException'Plugin Fehler: Der Plugin Name (' $name ') ist bereits vergeben.' );

                
## Action === string
                
if ( (string)$xml -> config -> action == null )
                   throw new 
SystemException'Plugin Fehler: Der Plugin Wert "action" beinhaltet keinen Wert (' $name ').' );

                
## Wurde der Plugin Typ angegeben
                
if ( (string)$xml -> config -> type == null )
                   throw new 
SystemException'Plugin Fehler: Der Plugin Wert "type" beinhaltet keinen Wert (' $name ').' );

                
## Sind die angegebenen Files fürs Plugin vorhanden
                
foreach ( explode';' , (string)$xml -> files ) as $file )
                {
                    
## Prüfen ob das Plugin File existiert
                    
if ( !file_existsRegistry::get'dirPlugins' ) . $file ) )
                      throw new 
SystemException'Plugin Fehler: Das Plugin File "' $file '" existiert nicht (' $name ').' );
                }

                
## Plugin registrieren
                
$this -> register$name ] = array( 'action'  => (string)$xml -> config -> action,
                                                    
'type'    => (string)$xml -> config -> type,
                                                    
'hook'    => (string)$xml -> config -> hook,
                                                    
'files'   => (string)$xml -> files,
                                                    
'return'  => (string)$xml -> config ->return,
                                                    
'value'   => null );

                
## Plugin Action auswerten
                
$action $this -> register$name ]['action'];

                
## Ist der Wert NOW wird das Plugin sofort eingebunden
                
if ( $action == 'NOW' )
                   
$this -> loadPlugin$name );
            }
        }


        
/**
         * Plugin laden
         * @name loadPlugin
         * @param string $name Der Name des Plugins
         */
        
private function loadPlugin$name )
        {
            
## Plugin Typ
            
$typ $this -> register$name ]['type'];

            
/**
             * Switch Typen für den Wert TYPE
             * (1) FUNCTION - Funktionen werden eingebunden.
             * (2) CLASS    - (2.1) Objekt des Plugins wird erstellt
             *                      Der Name der Klasse setzt sich aus "Plugin"
             *                      und dem Namen des Plugins zusammen
             *                (2.2) Der Rückgabewert wird in der Registrierung 
             *                      gespeichert und zurück gegebenen.
             * (3) PHPCODE  - Der PHPCode wir eingebunden.
             */
            
switch( $typ )
            {
                
## Funktion oder PHPCODE einbinden
                
case 'PHPCODE':
                case 
'FUNCTION':
                    
## Alle Files fürs Plugin einbinden
                    
foreach( explode';' $this -> register$name ]['files'] ) as $file )
                    {
                        
## File einbinden
                        
require_once ( Registry::get'dirPlugins' ) . $file );
                    }
                    break;

                case 
'CLASS':
                    
## Alle Files fürs Plugin einbinden
                    
foreach( explode';' $this -> register$name ]['files'] ) as $file )
                    {
                        
## File einbinden
                        
require_once ( Registry::get'dirPlugins' ) . $file );
                    }
                    
## Klassen Name des Plugins
                    
$tempName 'Plugin' $name ;
                    
## Plugin Objekt erstellen
                    
$tempObj = new $tempName;
                    
## Gibt es einen Rückgabe Wert
                    
if ( $this -> register$name ]['return'] == true )
                    {
                        
$tempOut $tempObj -> output;
                        
## Rückgabewert in der Registrierung speichern
                        
$this -> register$name ]['value'] = $tempOut;
                        
## Rückgabewert zurückgeben
                        
return $tempOut;
                    }
                    break;

                default:
                   throw new 
SystemException'Plugin Fehler: Unbekanter Plugin Typ "' $typ '" (' $name ').' );
            }
        }

        
/**
         * Plugin Hook registrieren und bearbeiten
         *
         * @name registerHook
         * @param string $hook Der Name des Hooks
         */
        
public function registerHook$hook )
        {
            foreach( 
$this -> register as $plugin => $config )
            {
                
## Soll das Plugin an dem Hook eingebunden werden
                
if ( $config['hook'] == $hook )
                   
$this -> loadPlugin$plugin );
            }
        }

    }
?>

Geändert von Cout (23.06.2009 um 20:32 Uhr).
Cout ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 23.06.2009, 23:40  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

In der Theorie schon mal nicht schlecht, aber wie gestaltet sich die praktische Anwendung?
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 24.06.2009, 14:55  
Neuer Benutzer
 
Registriert seit: 18.10.2008
Beiträge: 15
PHP-Kenntnisse:
Anfänger
Cout befindet sich auf einem aufstrebenden Ast
Cout eine Nachricht über ICQ schicken
Standard

Bei der Praktischen Anwendung bin ich noch am feilen.

Zum Beispiel wenn ich die "Klassen Autoload" Funktion als Plugin einbinden will muss ich vorher noch die Config-, SystemException-, Registry-, DatabaseAccess-, MySQL- und die PluginController Klasse manuell einbinden, damit das Plugin geladen werden kann.

Gleiches gilt für die Seiten Berechnungszeit es ist unmöglich das ich dafür ein Plugin am Anfang einbinden kann da vorher schon eine Verbindung zur Datenbank aufgebaut wird und Klassen erstellt werden.

Das nächste um das ich mich kümmern muss ist, dass wenn ein Hook registriert wird beliebig viele Werte mit übergeben werden können und die Hooks auch in einem Temporären Register vermerkt werden, damit man weis welche Plugins dort angewendet worden sind und man auf die Rückgabe Werte zugreifen kann.

Soweit so gut. Habt ihr noch Verbesserungsvorschläge?
Cout ist offline   Mit Zitat antworten
Alt 24.06.2009, 22:40  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
Soweit so gut. Habt ihr noch Verbesserungsvorschläge?
Wäre es bei den Eventualitäten nicht doch besser auf einen DI-Container zu setzen? Somit hast du das Problem der Abhängigkeiten nämlich per Definition erschlagen.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 24.06.2009, 22:49  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

ich will mich hier nicht aktiv einmischen, aber glaubt ihr nicht, dass Anfänger Angst bekommen, wenn Sie schon mit dem oben geposteten Code nichts anfangen können? Eine Stufe tiefer geht es ja nicht, wo sollen die dann posten?

Die Problembeschreibung entspricht auch nicht dem Muster eines typischen Einsteigers

Gruß
Asipak ist offline   Mit Zitat antworten
Alt 24.06.2009, 23:02  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ja, da hast Du recht.

@Cout: Ich habe zwar keine Tipps, bin aber gespannt, wie sich die Idee weiterentwickelt und daran interessiert, dass Du Deine Fortschritte hier dokumentierst.


[MOD: verschoben]
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
(IDE || Plugin) - Tipps webdepp Off-Topic Diskussionen 7 07.06.2009 23:14
jQuery Plugin - so richtig? stayInside JavaScript, Ajax und mehr 5 23.02.2009 12:34
Kurze Einführung in Firefox Search Plugin Programmierung PTC Tutorials 5 10.02.2009 01:31
TinyMCE BB Code Plugin Exi PHP Tipps 2008 6 29.01.2009 07:41
Gutes UML Plugin für Eclipse? HStev Off-Topic Diskussionen 7 20.10.2008 15:40
Anmeldung Am Domain Controller PowerPan PHP-Fortgeschrittene 0 28.08.2008 14:42
activex wm player plugin videos kleiner anzeigen mollitz HTML, Usability und Barrierefreiheit 14 14.04.2007 12:33
Search Plugin für Firefox Zergling-new Off-Topic Diskussionen 15 10.08.2006 11:58
[Erledigt] Probleme mit Miranda Plugin und MySQL Datenbanken 0 24.08.2005 15:39
forum php plugin PHP Tipps 2005-2 2 23.08.2005 16:56
Probleme mit jpeg6b plugin PHP Tipps 2005 1 29.05.2005 15:19
No Drive attached to the Fasttrack controller... Chr!s Off-Topic Diskussionen 3 11.05.2005 16:38
SMARTY Thumbnail Plugin duderino Beitragsarchiv 1 21.04.2005 16:19
Wie erstellt man einen Surfbar oder Plugin programme? test022 PHP-Fortgeschrittene 12 07.11.2004 05:57

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
plugin controller, http://www.php.de/php-fortgeschrittene/56372-plugin-controller.html, php plugin classe, php controller, plugincontroller, plugin controller firefox, php xml plugin system, php plugin hooks, plugin controller for firefox, getplugin.php, php plugin system erstellen, php plugin register, php plugin system, xml controller schreiben, plugincontroller php, php hook class, plugin controller.php, php smarty bbcode plugin, php plugin controller firefox, php plugin hook erstellen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:44 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum