Aktuelle Angebote in OXID eShop - der Haken an der Sache
07.03.2017
In OXID eShop ist es möglich, aktuelle Angebote automatisch ermitteln und z. B. auf der Startseite anzeigen zu lassen. Dazu gibt es zwei Möglichkeiten - entweder Sie stellen immer nur die neu ins Sortiment aufgenommenen Produkte dar, oder Sie stellen immer die Produkte dar, die zuletzt geändert wurden.
Ich denke, in der Praxis wird Letzteres häufiger verwendet. Wenn sich zu einem Produkt die Beschreibung ändert, ein neues Bild hochgeladen wird, der Preis angepasst wird oder Ähnliches, dann möchte man vielleicht genau auf dieses Produkt auch nochmal gezielt hinweisen.
By the way, weil ich das auch immer wieder suchen muss - hier können Sie das einstellen: Gehen Sie im OXID Backend auf Stammdaten → Grundeinstellungen, Tab Einstell. und dort auf den Punkt Artikel. Dort finden Sie die Option "Neueste Artikel nach dem Erstellungsdatum berechnen. (Ansonsten nach Datum der letzten Änderung)". Wenn Sie hier kein Häkchen setzen, werden die zuletzt geänderten Artikel als neueste geladen.
Nun hat die ganze Sache aber einen Haken.
Genau genommen sogar mehrere. Denn wenn ich Download-Produkte anbiete (so wie wir bei uns im Shop), und die Download-Datei, die am Produkt hängt, ändere, wird das Aktualisierungsdatum des Artikels nicht erneuert. Es wird also von OXID nicht als Änderung erkannt, obwohl das doch durchaus eine wichtige Änderung ist. Wenn ich bei uns die Download-Datei an einem Produkt (Modul) ändere, habe ich ja sozusagen ein Modul-Update hochgeladen, was man durchaus auf der Startseite sehen soll. Dasselbe gilt für Mediadaten - wir nutzen diese, um schon vor dem Kauf Zugriff auf unsere Modul-Dokumentationen zu geben. Doch auch die Aktualisierung dieser Dateien wird von OXID nicht als Änderung des Artikels erkannt.
Was mich aber noch viel mehr stört, ist, dass der Kauf eines Produkts von OXID als Änderung erkannt wird! Wenn man die Option der letzten Änderung auswählt und aktuelle Angebote automatisch von OXID ermitteln lässt, hat man immer auch die zuletzt gekauften Produkte in der Liste! Und das finde ich ungünstig bis kontraproduktiv, denn der Kauf hat das Produkt ja nicht wirklich verändert, und dass diese Produkte hier geladen werden, kann dazu führen, dass die tatsächlich geänderten (oder auch neu aufgenommenen) Produkte in der Liste ganz schnell untergehen.
Für diese Haken gibt es einen einfachen Grund: Das Änderungsdatum im Produkt (Timestamp) wird immer vollautomatisch erneuert, wenn eine Änderung in der Artikel-Tabelle (oxarticles) vorgenommen wird. Das steuert nicht OXID, sondern die Tabelle selbst (genauer gesagt die Datenbank) über ein CURRENT_TIMESTAMP. Wenn ich Download- oder Media-Dateien zum Artikel hochlade, wird die Tabelle oxarticles nicht verändert, da diese Daten in anderen Tabellen liegen. Deshalb wird auch der Timestamp nicht erneuert.
Wenn hingegen ein Produkt gekauft wird, so wird z. B. der Lagerbestand (oxstock) aktualisiert, und auch die Anzahl gekaufter Produkte (oxsoldamount) erhöht. Beides befindet sich in der Tabelle oxarticles, und die Änderung führt dazu, dass auch der Timestamp ganz automatisch erneuert wird.
Wen das stört, so wie mich, für den habe ich mir einen kleinen Workaround überlegt.
Nämlich auf der Datenbank den CURRENT_TIMESTAMP bei Update für die Tabelle oxarticles zu entfernen, um dann die Aktualisierung dieses Datums komplett von OXID vornehmen zu lassen.
Dazu gehen Sie auf die Datenbank (phpMyAdmin). Sie können den SQL-Befehl auch unter Service -> Tools ausführen, was ich aber nicht empfehle, weil Ihnen dort die Kontrollmöglichkeiten fehlen. Führen Sie folgenden Befehl aus, um die Auto-Aktualisierung zu entfernen:
ALTER TABLE `oxarticles` CHANGE `OXTIMESTAMP` `OXTIMESTAMP` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Timestamp'
Da OXID die Spalte beim Update in aller Regel nicht verändert, dürfte diese Änderung relativ updatesicher sein.
Nun wird die letzte Aktualisierung nicht mehr automatisch von der Datenbank eingetragen. Das heißt, wir müssen das in Zukunft selbst tun. Die einfachste Möglichkeit ist, sich direkt an die save() Methode des Objekts oxarticle anzudocken. Dort kommt OXID immer vorbei, wenn der Artikel geändert wird. Wir wollen dann aber nicht jedes Mal den Timestamp erneuern (dann hätten wir ja nix gewonnen), sondern nur, wenn wir uns im Admin-Bereich befinden. Ich gehe mal davon aus, dass sämtliche Änderungen am Produkt aus dem Admin-Bereich heraus als Änderung erkannt werden sollen.
Wollen Sie es noch feingliedriger haben, werden Sie nicht darum herum kommen, die einzelnen save() Methoden der Admin-Controller zu erweitern. Aber das geht jetzt an dieser Stelle zu weit.
Wir erstellen uns also ein kleines Modul und erweitern die Klasse oxarticle. Diese sieht dann jetzt wie folgt aus:
class my_own_oxarticle extends my_own_oxarticle_parent { public function save() { if ($this->isAdmin()) { $this->oxarticles__oxtimestamp = new oxField(date('Y-m-d H:i:s')); } parent::save(); } protected function _skipSaveFields() { parent::_skipSaveFields(); unset($this->_aSkipSaveFields[array_search('oxtimestamp', $this->_aSkipSaveFields)]); } }
Die Methode save() setzt den Timestamp auf die aktuelle Zeit, bevor die eigentliche save()-Methode der Elternklasse aufgerufen wird. Dazu muss oxtimestamp aus dem Objekt-Attribut $_aSkipSaveFields entfernt werden. In diesem Array hat OXID alle Felder gesetzt, die aus Sicherheitsgründen nicht gespeichert werden dürfen. Da wir aber oxtimestamp jetzt nicht mehr automatisch berechnen lassen, müssen wir diesen Eintrag dauerhaft entfernen.
Damit haben wir sogar gleich noch zwei weitere Fliegen erlegt. Denn sowohl beim Download- als auch beim Media-Datei-Upload wird die save() Methode des Artikel-Objekts aufgerufen, und da wir dort nun immer den Timestamp aktualisieren, wird dieser an der Stelle dann tatsächlich auch geändert.
Voilá.
Vielleicht gibt es weitere Aspekte bei der Aktualisierung von Artikeln, die ich hier übersehen habe. Wenn Ihnen etwas einfällt, freue ich mich über Ihren Kommentar. Und wenn großes Interesse besteht, wäre ich sogar geneigt, die Anpassungen als kostenloses Mini-Modul zur Verfügung zu stellen :)
Kategorien: Pimp your Shop | Schlagworte: OXID Tutorial, Umsatz steigern
Tipps + News für deinen Shopware Online-Shop
Abonniere den Grips-Letter, und erhalte Ideen und Impulse für deinen Shopware Shop, die dir helfen, sichtbarer zu werden, deinen Umsatz zu steigern und Zeit, Geld und Nerven zu sparen. Für 0 Euro direkt in dein Postfach!
Du kannst dich jederzeit wieder abmelden. Mehr dazu findest du in unserer Datenschutzerklärung.
Ähnliche Beiträge
24.01.2017 | Pimp your Shop
OXID Hidden Feature - mehr als 5 Bestseller auf der Startseite anzeigen
10.02.2016 | Umsatz ankurbeln
Zu viele Kaufabbrüche? 3 Tipps, mit denen Sie das sofort ändern können
14.02.2018 | Umsatz ankurbeln
19.11.2015 | Umsatz ankurbeln
Weihnachten steht vor der Tür - Umsatz ankurbeln mit Gutscheinen! Plus neue Gutschein-Vorlage.