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;
}
}
}
?>