Archiv

Archiv für die Kategorie ‘Internet’

Ein Pluginsystem mit Paketserver in PHP – Teil 3

Ein Pluginsystem mit Paketserver in PHP – Teil 3

Nachdem wir nun wissen, wie ein Plugin aufgebaut ist und wir wir es im Frontend verwenden, müssen wir uns mit der Frage beschäftigen, wie wir die Plugins im Backend administrieren.

Generell ist meine Überlegung, dass das ACP eine PHP Datei hat, die je nach übergebener ID aus dem Pluginordner die Backenddateien nachlädt.

Ein Beispiel: Im ACP gibt es eine Datei plugin_list.php.
Rufen wir diese Datei auf, so erscheint eine Liste mit Plugins, wie hier:

Pluginliste

Von hier aus, kann man die Plugins administrieren.
Dazu ruft man dann plugin_verwalten.php?appid=X auf, dann erscheint, je nach Plugin, die entsprechenden ACP Seite.

Um  die plugin_list.php anzuzeigen, ist nicht viel nötig.
Der nötige SQL Befehl lautet:

SELECT * FROM plugins ORDER BY id;

Geben wir die Ergebnisse einfach als eine normale Liste aus:


$query = mysql_query("SELECT * FROM plugins ORDER BY id;");

$AppsNum = mysql_num_rows();
 $AppsTd="";
 while ($AppsArray = mysql_fetch_object($query)) {
 $color ="red";

 if ($AppsArray->activate=="1" || $AppsArray->activate=="true") { $color = "lightgreen"; }
 $AppsTd .= '<tr style="background-color:'.$color.';"><td style="width:20%;">'.$AppsArray->name.'</td><td "width:5%;">'.$AppsArray->version.'</td><td "width:45%;">'.$AppsArray->desc.'</td><td "width:35%;"><a href="plugin_verwalten.php?appid='.$AppsArray->id.'">Administrieren</a></td></tr>';
 }

 echo 'Installierte Erweiterungen:<br><div class="cel" style="height:auto;">
 <table style="width:100%;"><tr style="border: 1px black solid;"><td>Name</td><td>Version</td><td>Beschreibung</td><td>Optionen</td></tr> '.$AppsTd.'</table></div><br /><br />';

 

Die plugin_verwalten.php ist recht einfach aufgebaut, sie prüft nur, ob die angegebene ID konform und in der Datenbank existent ist und includiert dann die hinterlegten Dateien:


<?php

 /*
 Checke die Paratemter in der GET
 */

 if (!isset($_GET['appid']) OR !is_numeric($_GET['appid'])){
 trigger_error("Die Variable \"appid\" ist entweder nicht übergeben worden oder entspricht nicht den Vorraussetzungen.",E_USER_ERROR);
 }

$appid = $_GET['appid'];

 /*
 Schauen wir mal nach der und laden alle Daten in ein array() ^^
 Und natürlich wider zählen
 */

 $query = mysql_query("SELECT * FROM plugins WHERE ID = ".$appid);

 $row = mysql_fetch_object($query);

 $num = mysql_num_rows();

 /*
 Wenn jetzt $num = 0 oder > 1 ist, dan stimmt was nicht
 */

 if ($num != 1) {
 trigger_error("Die ID ist nicht vorhanden und/oder mehrmals vergeben. Dies macht eine eindeutige Identifikation unmöglich.",E_USER_ERROR);
 }

 /*
 So, dann schauen wir mal OptionFile an und laden die Datei hier rein^^
 */
 define("apppath",$row->path);
 require_once(apppath."/cp/index.php");

 /*
 Für mich ist die Sache damit erledigt :)
 */

Okay, nun wissen wir, wie wir die Backenddateien verwalten.

Im nächsten Teil installieren wir die Plugins via einem Updateserver.

Zur Hauptseite

Der 100. Artikel und eine Umstellung

13. Februar 2012 Keine Kommentare

Am 13. November 2009, genau um 17:47 veröffentlichte ich in diesem Blog den ersten Blogpost. Zwar war dies nicht mein erster Blogversuch, aber der seitdem gab es keine Unterbrechung mehr.
Heute, am 13. Februar 2012, das heißt genau 27 Monate danach, veröffentliche ich also meinen 100. Artikel!
Wow,  das ging ja gar nicht mal so schnell. Aber ich bin nicht (mehr) so einer, der über jeden Mist einen Dreizeiler loslässt. Qualität schlägt Quantität.
Aber was waren für mich die besten Artikel aus den letzten 99?
Ganz klar, das Topthema: schuelerVZ und Datenschutz.
Und jetzt die Blogserie  Ein Pluginsystem mit Paketserver in PHP.

Aber jetzt komm doch eine Umstellung auf den Blog zu…
Ich möchte meine Blogpostings zu technischem und gesellschaftlichen Themen trennen.
Deshalb werde ich auf diesem Blog technische Themen abhandeln und gesellschaftliche Themen,
wie Politik, werde ich im Blog In my humble opinion, oder kurz IMHO, niederschreiben.
Dazu wurde ich heute von Paul eingeladen.
Dies passt mir, wie gesagt, ganz gut, da ich mit der Seite gVisions einiges vor habe, mehr dazu aber erst später.
Wenn ein Artikel von mir auf IMHO erscheint, so werde ich einen kleinen Ausschnitt mit Verlinkung natürlich hier hinterlassen,
damit keiner meiner Leser auf der Strecke bleibt.

Und zum Schluss verrate ich noch, welcher der 99 Artikel bisher am meisten per Google gesucht und gefunden wird, Ihr werdet es kaum glauben: verstecke Skype Smilies 

 

In dem Sinne wünsche ich euch einen schönen Abend und bis bald!

 

KategorienBlog Tags: , , , , , ,

Ein Pluginsystem mit Paketserver in PHP – Teil 2

19. Januar 2012 Keine Kommentare

Ein Pluginsystem mit Paketserver in PHP – Teil 2

Im letzten Teiles meiner Serie hab ich euch gezeigt, wie man ein Plugin innerhalb einer PHP Anwendung aufruft und, wie man die Plugininformationen effizient in der Datenbank speichert.

Kommen wir heute nun zu einer entscheidenen Frage: Wie ist das Plugin aufgebaut?

Bevor wir zur Datenstruktur kommen, überlegen wir erst einmal, welche Informationen das Plugin immer braucht:

  • Name
  • Typ
  • Installationspfad
  • Beschreibung
  • Version
  • comID (zB com.gvisions.framework)
  • Autorname
  • Autorurl
  • Version
  • Vorraussetzungen -> Unser Installationssystem prüft später, ob die Vorraussetzungen gegeben sind, um ein Plugin zu nutzen.
  • Downloadpfad -> vor der Installation lädt das Script später erst nur eine .xml Datei mit all diesen Infos herunter, damit wir nicht unnötig Daten laden, falls zB die Vorraussetzungen nicht stimmen
  • Lizenzabkommen
  • SQL Query bei Installation
  • SQL Query bei evtl. Upadte
  • SQL Query bei Deinstallation

All diese Infos packen wir in eine xml Datei, welche später auch auf dem UpdateServer liegen wird.
Die XML habe ich logisch strukturiert und sieht wie folgt aus:

<xml>
<type>plugin</type>
<typede>Erweiterung</typede>
<installpath>/apps/</installpath>

<author>solar22</author>
<date>24.11.2011</date>
<url>http://gvisions.de</url>

<zipfile>http://update.gvisions.de/app/gmoonlight.zip</zipfile>
<version>0.2</version>
<comid>com.gvisions.gmoonlight</comid>
<name>gMoon!ight</name>
<desc>Kleine Seitenverwaltung. CMS.</desc>
<requirements>com.gvisions.framework-0.1</requirements>
<license>Stimmst du mir zu?</license>

<updatesql></updatesql>
<installsql></installsql>
<unistallsql></unistallsql>

</xml>

Das Plugin wird also später von http://update.gvisions.de/app/gmoonlight.zip runtergeladen.
In der zip Datei liegen alle Dateien des Plugins, ausgehend vom Ordner $xml->installpath.$xml->comid (zB /apps/com.gvisions.framework).
Jedes Plugin wird also in einem Ordner installiert, welcher gleich der comid ist.

Innerhalb der zip Datei müssen folgende Dateien vorhanden sein:

/ – root der Zip Datei
/cp – Hier liegen später die Dateien für das ControlPanel
/cp/index.php – Diese Datei stellt die Hauptdatei des CPs dar, natürlich kann das Plugin hier andere Dateien aus seinem CP Ordner nachladen
/index.php – Diese Datei stellt die Hauptdatei des Plugins dar, wenn das Frontend das Plugin lädt (s. Teil 1)
/com.x.y.xml – ggf. die XML Datei des Plugins

Die XML Datei kommt bei meinem Verfahren nicht in die ZIP Datei rein, natürlich kann man dies trotzdem so machen, wenn man zB die Installation via “Datei hochladen” realisieren möchte.

Dies ist die Grundstruktur eines Plugins, natürlich kann der Entwickler weitere Ordner und Dateien erstellen, hauptsache ist nur, dass min. die o.g. Dateien und Ordner vorhanden sind.

Dies war Teil 2 meiner Serie, ich hoffe, es hat euch gefallen und Ihr lest auch Teil 3.

Zur Hauptseite

Rss Feed Tweeter button Facebook button Technorati button Delicious button Flickr button Youtube button