Teil 6: Module für PHP-basierte E-Commerce-Systeme schreiben
Kommentare

In diesem Beispiel (Listing 4) werden also Unterverzeichnisse, die innerhalb des Modulverzeichnisses angelegt werden, vom Autoloader ebenfalls gefunden und geladen. Gerade bei komplexen Modulen, die mehrere Bereiche der Applikation betreffen, ist eine solche Aufteilung ratsam.

Listing 4
function phpmAutoload($sClass) {

    $sClass = basename($sClass);
    $sBasePath = getShopBasePath();
    $sClass = strtolower($sClass);

    $aClassDirs = array(
        $sBasePath . 'modules/phpm_articles/',
        $sBasePath . 'modules/phpm_location/core/',
        $sBasePath . 'modules/phpm_location/controller/',
        $sBasePath . 'modules/phpm_location/admin/'
    );

    foreach ($aClassDirs as $sDir) {
        $sFilename = $sDir . strtolower($sClass) . '.php';
        if (file_exists($sFilename)) {
            include $sFilename;
            return;
        }
    }
}
spl_autoload_register("phpmAutoload");

Klassenerweiterungen

Im Folgenden erstellen wir gemeinsam ein Modul, mit dessen Hilfe die verbleibenden Tage bis Weihnachten neben jedem Artikel im Shop dargestellt werden sollen. Dazu erweitern wir die oxArticle-Klasse und fügen eine Zeile in die entsprechende Template-Datei des Frontends ein. Hier sei erwähnt, dass sich die meisten Controller- und Model-Klassen im OXID eShop erweitern lassen.

Dabei geht das System intelligent vor: Es stellt sicher, dass die PHP-Klassenvererbung auch dann funktioniert, wenn mehr als ein Modul eine bestimmte Klasse erweitern möchte. Um das zu erreichen, werden alle Objekte der Applikation via oxNew() (in /core/oxutilsobject.php) instantiiert.

Auf diese Weise werden transparente Klassen erzeugt, die quasi die Vererbung zwischen Eltern- und Kind-Klassen übernehmen. Alles, was dazu getan werden muss, ist, neue Klassen auf die folgende Weise zu erben (Listing 5).

Listing 5
class xmasArticle extends xmasArticle_parent
{
    public function getDaysLeft()
    {
        $time = mktime(0, 0, 0, 12, 25, 2011, 1) - time();
        $days = floor($time/86400);
        return $days;
    }
}

Weiter mit: Teil 7

Alle Teile: Teil 1, Teil 2, Teil 3, Teil 4, Teil 5, Teil 6, Teil 7, Teil 8, Teil 9, Teil 10

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -