Concrete5: Entwicklung mit Concrete5: Pakete und Anwendungen
Was versteht man unter Paket?
[Bearbeiten]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.
Verzeichnisstruktur
[Bearbeiten]Pakete enthalten eine Struktur, ähnlich derer des Concrete-Wurzelverzeichnisses. Solange Sie die folgenden Namenskonventionen beachten, sollten hier keine größeren Probleme auftreten.
concrete/packages/controller.php
[Bearbeiten]die benutzerspezifische Paketklasse
concrete/packages/blocks
[Bearbeiten]alle Block-Dateien und Abhängigkeiten eines gewöhnlichen Blockes
concrete/packages/page_types
[Bearbeiten]Seitentypen
concrete/packages/single_pages
[Bearbeiten]Einzelseiten
Paket Klassen API
[Bearbeiten]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
void public function install()
[Bearbeiten]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.
Blöcke
[Bearbeiten]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?
Seiten
[Bearbeiten]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.
Themen
[Bearbeiten]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.
Entfernen von Paketen
[Bearbeiten]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.
Beispiel
[Bearbeiten]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;
}
}
}
?>