Concrete5: Entwicklung mit Concrete5: Pakete und Anwendungen

Aus Wikibooks


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