Hauptmenü öffnen

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.

VerzeichnisstrukturBearbeiten

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.phpBearbeiten

die benutzerspezifische Paketklasse

concrete/packages/blocksBearbeiten

alle Block-Dateien und Abhängigkeiten eines gewöhnlichen Blockes

concrete/packages/page_typesBearbeiten

Seitentypen

concrete/packages/single_pagesBearbeiten

Einzelseiten


Paket Klassen APIBearbeiten

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öckeBearbeiten

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?

SeitenBearbeiten

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.

ThemenBearbeiten

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 PaketenBearbeiten

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.

BeispielBearbeiten

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