Concrete5 Block entwickeln
Wie schon in den vorigen Artikel, hab ich gezeigt, dass Concrete5 relativ einfach erweitert werden kann.
http://www.codeblog.ch/category/concrete5/
In diesem Fall möchte ich zeigen wie man einen einfachen Block entwickeln kann, der beliebigen PHP Code ausführen kann. Dies klingt heikel und kann es auch sein! Der Wunsch danach ist im C5 Forum http://sourceforge.net/forum/forum.php?forum_id=814373 aufgekommen. Jemand hat entdeckt, dass man Code mit dem Form Block ausführen kann. Persönlich mag ich sowas nicht, weil meiner Ansicht nach ein Block für das verwendet werden soll, für das er entwickelt wurde.
Dies soll aber jeder für sich entscheiden! Ein Ausführen von PHP Code ist auch mit dem Form Block möglich!
Die Files
Wie bei jedem Block brauchen wir ein paar Dateien:
- db.xml – Diese Datei enthält die Definition für unsere Tabelle
- add.php – Diese Datei wird aufgerufen wenn eine neue Instanz unseres Blocks eingefügt wird
- edit.php – Diese Datei wird benötigt wenn ein vorhandener Block bearbeitet wird
- view.php – Wie der Name sagt, wird angezeigt wenn der Block in der Seite dargestellt werden soll
- controller.php – Diese Datei ist für die ganze Verarbeitung der Daten zuständig.
Auf den folgenden Seiten erkläre ich den Inhalt jeder Datei…
7 Comments
Hi Remo,
vielen Dank für die ausfürliche Beschreibung.
Grüße aus Nürnberg
Super Anleitung.
Genau das was ich brauche um ein paar notwendige Änderungen zu machen.
Danke und Gruß
Peter
Hi!
Danke für die guten Tuts!
Was hier drin nicht steht, ist das die Files im Ordner “php_execute” sein müssen, obwohl ich nicht genau weiss, wo das definiert ist. Hat jmd einen Hinweis?
Gruss
Ja richtig! Das steht nirgends im Tutorial…
Der Ordner definiert sich durch den Namen der Klasse im Controller. Nach “_” kommt ein Grossbuchstabe und anschliessend jeweils “BlockController”
Ordner: super_sache
Klasse: SuperSacheBlockController
Hi!
Du, ich bekomme hier leider folgende Fehlermeldung wenn ich den Block hinzufüge und danach die Änderungen speichern will.
Ich benutze Concrete 5.3.3.1
Kannst du mir da eventuell helfen?
Fatal error: method_exists() [function.method-exists]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "PhpExecuteBlockController" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in /www/htdocs/concrete/libraries/database_indexed_search.php on line 135
Hey Fernandos,
der Block funktioniert bei mir problemlos mit 5.3.3.1 aber ich hab eine Unschönheit gefunden. In der ZIP Datei gibt’s keinen Block Ordner.
Das heisst du musst zuerst einen Ordner “php_execute” in blocks erstellen und dort alles Files entpacken..
Gruss Remo
Hi Remo
Your block doesn’t seem to be working in concrete 5.4.2, any idea why?