Bring Croogo 1.5 Plugins right on track - kurz und schmerzlos fasse ich hier zusammen worauf Ihr bei dem Aufsetzen von neuen Croogo ( CakePHP ) Plugins / Extensions ab der alpha Version 1.5 beachten sollt, dürft und müsst, damit nicht schon zu Beginn Frustration(en) aufgrund von Unwissenheit aufkommen.

Rock ’n’ Roll und los gehts, zuerst solltet Ihr wissen, dass es mit dem Switch von 1.4.x zu 1.5 einige sehr schöne Änderungen gegeben hat. Hier könnt ich die genauen Changelogs nachlesen, aber das A und O ist das neue twitter Bootstrap Admin Grid mit der vollen Wucht des Responsive Design fluid Grids. An dieser Stelle ein extremes Dankeschön! (Thank You!) an rchavik, Mate you are awesome; Von diesen Mann könnt Ihr alle so einiges an how-to-code-the-right-way lernen.

Vorab, die app/Config/settings.json ist nun anders strukturiert und wirkt wesentlich aufgeräumter.

{
    "Site": {
        "acl_plugin": "Acl",
        "email": "you@your-site.com",
        "feed_url": "",
        "locale": "eng",
        "status": 1,
        "tagline": "A CakePHP powered Content Management System.",
        "theme": "",
        "timezone": 0,
        "title": "Croogo"
    },
    "Hook": {
        "bootstraps": "Settings,Comments,Contacts,Nodes,Meta,Menus,Users,Blocks,
         Taxonomy,FileManager,Tinymce,DebugKit,Translate,ClearSession,ClearCache"
    },
    "Comment": {
        "date_time_format": "M d, Y",
        "email_notification": 1,
        "feed_limit": 10,
        "level": 1
    },
    "Meta": {
        "description": "Croogo - A CakePHP powered Content Management System",
        "generator": "Croogo - Content Management System",
        "keywords": "croogo, Croogo",
        "robots": "index, follow"
    },
    "Reading": {
        "date_time_format": "D, M d Y H:i:s",
        "nodes_per_page": 5
    },
    "Service": {
        "akismet_key": "your-key",
        "akismet_url": "http://your-blog.com",
        "recaptcha_private_key": "your-private-key",
        "recaptcha_public_key": "your-public-key"
    },
    "Writing": {
        "wysiwyg": 1
    },
    "Access Control": {
        "multiRole": 0,
        "rowLevel": 0,
        "models": ""
    },
    "Croogo": {
        "version": "1.5.0\n"
    }
}

Das ist doch viel schöner und der "Hook" Bereich springt mich ganz besonders an, denn hier ist extrem viel passiert. Über Blocks, Comments, Contacts, FileManager, Install, Menus, Meta, Migrations, Nodes, Search, Settings, Taxonomy und Users sind in ein eigenes Plugin überführt worden. Ist das nicht geil freude des Kuchenbakens?!

Bis zur 1.4.4 musste man so einige Core Änderungen vornehmen um hier und da Tweaks ins Leben zu rufen, nun ist durch die neue Plugin Vielfalt ein für allemal schluss damit und Ihr könnt noch mehr ausgliedern und oder in eigene Plugins vom Paradigma her mit überführen.

Wieso eigentlich ein Plugin? - Nun die Antwort auf diese Frage wurde eigentlich schon mit der Einführung der objektorientierten Programmierung gegeben. Durch den Einsatz von Plugins, oder auch Extensions genannt, bleibt der Kern Quellcode unberührt und kann von den Core-Entwicklern weiterentwickelt werden. Im Gegenzug fokusiert der Plugin-Entwickler allein auf die Plugin Entwicklung und kann sich sicher sein, wenn er die vorgegeben Konventionen beachtet, eine lauffähige Ergänzung zur Core-Applikation entwickeln zu können, die auf anderen CakePHP Systemen eingesetzt werden kann. Viele Frameworks und modernere Open Source Software bietet API's und die schon genannten Konventionen zur Pluginentwicklung.

Croogo basiert auf dem CakePHP Framework wie Magento auf dem Zend Framework basiert und somit eine Basis an nützlichen Tools und Bibliotheken bereitstellt. Im Klartext könnt Ihr CakePHP Plugins in Croogo und vice versa verwenden, was wiederum bei anderen Systemen nicht so einfach funktioniert. Genau diese Tatsache macht Croogo zu einem enorm skaliebaren Produkt, oder könnt Ihr Zend Framework Plugins im Magento bzw. noch besser Wordpress Plugins in Typo3 verwenden? - Nein. Um ein bestehendes CakePHP Community Plugin in Croogo lauffähig zu machen, bedarf es weniger Schritte, die leicht zu verinnerlichen sind.

Die CakePHP/ Croogo Plugin Ordner Struktur:

/app
	/Plugin
		/Example
			/Config
				/Migration
				/Data
				/Schema
				ExampleActivation.php
				bootstrap.php
				events.php
				routes.php
				plugin.json
			/Console
				/Command
				/Templates
			/Controller
				/Component
					ExampleComponent.php
				ExampleAppController.php
				ExampleController.php
				...
			/Event
				ExampleEventHandler.php
			/Lib
			/Test
				/Case
				/Fixture
			/Model
				/Behavior
					ExampleBehavior.php
				ExampleAppModel.php
				ExampleModel.php
			/View
				/Layouts
					xyz.ctp
				/Elements
					xyz.ctp
				/Example
					xyz.ctp
				/Helper
					ExampleHelper.php
			/webroot
				/css
				/files
				/img
				/js
				...

Die plugin.json Struktur:

{
	"name": "Example",
	"description": "Example plugin for demonstrating hook system",
	"author": "Author Name",
	"authorEmail": "author@example.com",
	"authorUrl": "http://example.com",
	"dependencies": {
		"plugins": [
			"acl",
			"extensions"
		]
	}
}

Damit das Plugin vom Bootloader erkannt wird, benötigen wir die plugin.json, diese Datei beinhaltet alle Notwendigen Daten zur Identifizierung des Plugins.