Concrete5: Entwicklung mit Concrete5: Pakete und Anwendungen
Aus Wikibooks
Inhaltsverzeichnis |
[Bearbeiten] Was versteht man unter Paket?
Ein Paket ist eine Sammlung von Blöcken, Controller-Elementen und Seiten-Themen, die den Benutzer mit umfangreichen Funktionen unterstützen. Sie sollten Paktete verwenden, sobald Sie mehr als einen Block bzw. Seitentyp benötigen.
[Bearbeiten] Verzeichnisstruktur
Pakete enthalten eine Struktur, ähnlich derer des Concrete-Wurzelverzeichnisses. Solange Sie die folgenden Namenskonventionen beachten, sollten hier keine größeren Probleme auftreten.
[Bearbeiten] concrete/packages/controller.php
die benutzerspezifische Paketklasse
[Bearbeiten] concrete/packages/blocks
alle Block-Dateien und Abhängigkeiten eines gewöhnlichen Blockes
[Bearbeiten] concrete/packages/page_types
Seitentypen
[Bearbeiten] concrete/packages/single_pages
Einzelseiten
[Bearbeiten] Paket Klassen API
Nutzen Sie unten gennante, benötigten Attribute als protected-Membervariablen.
string $pkgName – Name des Pakets/ der Anwendung string $pkgDescription – Kurze Paketbeschreibung string $pkgHandle – Name/Handle des Pakets
[Bearbeiten] void public function install()
Diese Methode führt die Installation der Paketabhängigkeiten durch. Bisher werden hauptsächlich Block-Installationsroutinen genutzt. Ein Blick in die API enthüllt einige Methoden die zum Hinzufügen der Seiten, Einzelseiten, Seitentypen und Themen dienen.
[Bearbeiten] Blöcke
Rufen Sie
BlockType::installBlockTypeFromPackage(string blocktype, object Package,0);
auf. Der Blocktyp wird hier nicht mit "bt" eingeleitet, sondern mit dem eigentlichen CamelCase Blocknamen. Aus gewissen Gründen musste der Verzeichnisname ebenfalls als CamelCase benannt werden - ein Verstoß gegen die Namenskonventionen, evtl. ein Core-Bug?
[Bearbeiten] Seiten
Sie müssten in der Lage sein, Page::add() (bei Seitentypen?) oder SinglePage::add() mit einem assoziativen Array, z.B.:
"uID": Benutzer-ID des Seitenbesitzers "pkgID": Paket-ID der Seite "cName": Seitenname "cHandle": Handle der Seite, wie er im Pfad benutzt wird "cDatePublic": Seitendatum
aufzurufen.
[Bearbeiten] Themen
Die API-Dokumentation verweist darauf, dass Theme:: folgende Add-Funktion besitzt:
void add ( $ptHandle, [ $pkg = null]) // es sollte keine Problem sein, diese Funktion mit $this als $pkg-Parameter aufzurufen.
Zu diesem Zeitpunkt sind keine Methoden bekannt um eigene Controller oder Helper zu ergänzen.
[Bearbeiten] Entfernen von Paketen
Derzeit ist keine API bekannt um Pakete oder Anwendungen zu entfernen. Eventuell wurde dies ja nur noch nicht dokumentiert. Jedenfalls müssen Sie den Apps-Eintrag aus der Pakettabelle löschen und die (externen) Böcke aus der Benutzerschnittstelle entfernen.
[Bearbeiten] Beispiel
Dieses Paketbeispiel wird alle Blöcke in das Block-Verzeichnis Ihres Paketes installieren (/blocks):
/* * controller.php * @Author: David M. Sielert * @Kommentar: T. Kirsch * @Date: Dec 9, 2008 * @Desc: * * */ class testPackage Extends Package { protected $pkgName = "Beispiel"; protected $pkgDescription = "Das ist ein Test der Installationssystems"; protected $pkgHandle = "Bsp"; public function install() { //Zunächsteinmal rufen wir den übergeordneten Installer auf, um eine Verbindung zur API //herzustellen. Dies ist nötig um die Paket-ID zu setzen. parent::install(); //aktuelles Verzeichnis ermitteln $dir1 = DIR_PACKAGES . '/' . $this->getPackageHandle() . '/' . DIRNAME_BLOCKS; $dir2 = DIR_PACKAGES_CORE . '/' . $this->getPackageHandle() . '/' . DIRNAME_BLOCKS; if (file_exists($dir1)) { $dir = $dir1; } else { $dir = $dir2; } $bdh = opendir($dir); while ( false !== ($file =readdir($bdh))) { if (is_dir($dir."/".$file) && $file != "." && $file != "..") { $messages .= BlockType::installBlockTypeFromPackage($file,$this,0); } } if (!empty($messages)) { print $messages; } } } ?>