Neue Funktionen/Methoden für Objekte erstellen


In meinem Beitrag Oxid-Viewklassen erweitern und Daten an Templates schicken habe ich recht geradlinig erklärt, wie Sie View-Klassen erweitern können, ohne Oxid-eigene Dateien verändern zu müssen.

Anhand eines Beispiels möchte ich heute weiter gehen und erläutern wie Sie für ein Objekt, das in einer View-Klasse verwendet werden kann, erweitern können, eine neue Funktion (Methode) erzeugen können.

Beispiel: getThumbUrl-Ersatz für das Objekt oxcategory

Das Oxid-Objekt oxcategory der Oxid-Versionen bis 4.4.8, welches für Unterkategorien innerhalb der View-Klasse alist (Template: list.tpl) vorkommt, kennt keine Funktion/Methode, um den Pfad zum Thumbnail auszugeben. Seit der Version 4.5 existiert für diesen Zweck die Funktion getThumbUrl. Um Komplikationen mit späteren Updates zu vermeiden, nenne ich meine Funktion einfach getThumbnail.

Die Funktion in Oxid 4.5 setzt auf eine weitere Funktion namens getPictureUrlForType auf, die bis Oxid 4.4.8 ebenfalls nicht vorhanden ist. Daher können wir nicht einfach abschreiben, aber es ist wenig Code, der benötigt wird. Wir benötigen lediglich den Wert aus dem Datenbankfeld oxthumb in der Tabelle oxcategories.

Die Datei für die Erweiterung könnte zum Beispiel so aussehen:

<?php
class acki_oxcategory extends acki_oxcategory_parent{
    public function getThumbnail(){
        $sReturn = oxDb::getDB()->getone('SELECT oxthumb FROM oxcategories WHERE oxid="'.$this->oxcategories__oxid->value.'"');
        return $sReturn;
    }
}
?>

Diese Datei wird als acki_oxcategory.php im Verzeichnis /modules/acki/core gespeichert.


Das neue Modul aktivieren

Jetzt muss dieses Modul nur noch so im Admin verknüpft werden, dass es die Oxid-Kernkomponente oxcategory erweitert.

Gehen Sie dazu im Shop-Admin zu: „Stammdaten“, „Grundeinstellungen“ und hier auf das Register „System“ zum Abschnitt „Module“. Prüfen, Sie ob, bereits eine Zeile für die Klasse vorhanden ist, die Sie erweitern möchten. Ist noch keine vorhanden, können Sie sie so anlegen:


oxcategory => acki/core/acki_oxcategory

Jetzt kann die neue Funktion getThumbnail() auf Objekte angewandt werden, die aus oxcategory erzeugt werden.

Mit meiner neuen Funktion kann ich jetzt im Template den Pfad zum Thumbnail-Bild einer Unterkategorie angeben:

[{$category->getPictureUrl()}]0/[{$category->getThumbnail()}]

4 Gedanken zu „Neue Funktionen/Methoden für Objekte erstellen

  1. Hallo, erst einmal Danke für die Informationen. Aber ich verstehe trotzdem noch nicht wie ich das zum laufen bringe. Wenn ich jetzt [{$category->getPictureUrl()}]0/[{$category->getThumbnail()}] in der list.tpl aufrufe bekomme ich lediglich eine “ Fatal error: Call to a member function getPictureUrl() on a non-object in C:\xampp\htdocs\oxid\tmp\47bbe7ed67df88b821a4784fb8e8b06e^%%F0^F0F^F0F92504%%list.tpl.php on line 21″ Fehler Meldung.

  2. Hallo Frank,
    dann existiert keine Methode „getPictureUrl()“ in der Klasse — wurde sie denn richtig erweitert, also im Admin manuell oder per metadata.php registriert?

  3. Hat super geklappt! Ich wollte den View alist erweitern um gescheite SEO-Titel für Kategorien zu bekommen. Dank deiner Hilfe bin ich fix durchgekommen 🙂 Hier der Code falls es interessiert:

    _sCatTitle === null ) {
    $this->_sCatTitle = false;
    foreach ($this->getCatTreePath() as $oCategory) {
    $this->_sCatTitle.= ‚ ‚ . $oCategory->oxcategories__oxtitle->value;
    }
    if ( ( $oCategory = $this->getActCategory() ) ) {
    $this->_sCatTitle.= ‚ – ‚ . $oCategory->oxcategories__oxdesc->value;
    }
    }
    return $this->_sCatTitle;
    }
    }

  4. Grr, da hat er doch den oberen Teil weggelassen …

    class seo_alist extends seo_alist_parent
    {
    public function getTitle()
    {
    if ( $this->_sCatTitle === null ) {

Kommentare sind geschlossen.