Concrete5: Entwicklung mit Concrete5: Pakete und Anwendungen
Was versteht man unter Paket?
BearbeitenEin 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
BearbeitenPakete 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
Bearbeitendie benutzerspezifische Paketklasse
concrete/packages/blocks
Bearbeitenalle Block-Dateien und Abhängigkeiten eines gewöhnlichen Blockes
concrete/packages/page_types
BearbeitenSeitentypen
concrete/packages/single_pages
BearbeitenEinzelseiten
Paket Klassen API
BearbeitenNutzen 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()
BearbeitenDiese 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
BearbeitenRufen 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
BearbeitenSie 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
BearbeitenDie 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
BearbeitenDerzeit 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
BearbeitenDieses 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;
}
}
}
?>