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.

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?

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.

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