Artikelsichtbarkeit

Benötigte Lesezeit: 6 Minuten


Einleitung

Mit diesem Modul wird die Sichtbarkeit der Artikel im Shop steuerbar. Auf diese Weise realisiert man die Anzeige von Teilsortimenten auf Basis einer selbst erstellten, in PHP programmierten Logik. Info: Es gibt auch ein Kategoriensichtbarkeit Modul.

Der Einsatz des Moduls betrifft viele Subsysteme (u.a. Artikelliste und -detailanzeige, Artikelsuche, Quicksearch, Type-A-Head Suche, …) und beeinflusst auch die Performance und Skalierbarkeit. Es bietet dafür maximale Flexibilität bei der Umsetzung der Bedingungen zur Anzeige eines Artikels.

Programmierung / Anwendung

Überblick

1.) Die Definition der Logik zur Steuerung der Sichtbarkeit / Verfügbarkeit der Artikel

Datei: {shopdir}/shop/artikelsichtbarkeit.def.php

In dieser PHP-Datei gibt es eine Klassendefinition und darin die Methode _setartikelsichtbarkeit. In dieser Methode wird die Logik zur Steuerung der Anzeige eines Artikels ausprogrammiert.

Da diese Methode von sehr unterschiedlichen Orten im Shop angesteuert wird, steht der jeweilige Artikel in völlig verschiedenen Containern zur Verfügung: Artikel Objekt _Artikelinfo Objekt, _dynartikelinfo Objekt, assoziativer Array mit DB-Felddaten der artikel Tabelle.

Damit man ohne grossen Konvertierungsaufwand programmieren kann, stellt das Artikelsichtbarkeit Modul innerhalb des artikelsichtbarkeit Objekts einige Membervariablen immer zur Verfügung, unabhängig davon, ob der aktuelle Quell-Bereich dies anliefert. Dies wird möglichst Performance sensitiv gemacht und kann via Methode _set_artikel_tabellefelder den eigenen Bedürfnissen angepasst werden.

Zur Programmierung der Logik wird weiter unten genauer eingegangen.

2.) Optionale Anwendung der Artikelsichtbarkeitslogik an einem neuen Ort im Shop

Das Artikelsichtbarkeitsmodul ist schon an sehr vielen Orten im Shop aktiv. Wenn man aber wegen Customizing an einem anderen Ort ebenfalls auf diese Funktionalität zurückgreifen möchte, so kann man dies mit folgendem Codeabschnitt einfach integrieren:

// Folgender Bereich wird durch das Artikelsichtbarkeits Modul geroutet:

if (ARTIKELSICHTBARKEIT_VERWENDEN && !defined('ADMIN_MODE') && modul_check('artikelsichtbarkeit')){
    $artikelsichtbarkeit = static_artikelsichtbarkeit(); // Singleton Instanz holen
    if ($artikelsichtbarkeit->set_artikelsichtbarkeit($artikel_data) == false) {
        // Sichtbarkeitspruefung wurde NICHT bestanden, Artikel soll NICHT angezeigt werden!
    }
}

Ausprogrammierung der Logik

Wie im Kapitel Überblick vorhin erwähnt, wird die Logik zur Sichtbarkeitssteuerung in der Datei {shopdir}/shop/artikelsichtbarkeit.def.php in den Methoden _setartikelsichtbarkeit und _set_artikel_tabellefelder umgesetzt.

Teil 1) Verfügbare Daten via set_artikel_tabelle_felder(…) immer bereithalten

Hier definiert man die in jedem Fall via SQL auszulesenden Felder der ‘artikel’ Datenbanktabelle. Achtung: Es ist ideal, wenn für diese Felder ein Index existiert. Bitte auch bedenken, dass nicht an allen Orten alle Informationen bereitstehen. In diesem Fall muss immer zusätzlich noch die Datenbank bemüht werden … Beispieldefinition innerhalb der Methode:

array('Artikel_Nr','zusatzfeld_1');

Bitte lesen Sie zuerst auch noch Teil 2 und geben Sie hier nur an, was dort noch an Feldern für Ihre Umsetzung fehlt…

Teil 2) In set_artikelsichtbarkeit(…) Sichtbarkeitslogik ausprogrammieren

In dieser Methode wird die eigentliche Logik programmiert. Der Rückgabewert entscheidet, ob der aktuelle Artikel sichtbar ist (true) oder nicht (false). Der Rückgabewert ist vom Typ Boolean.

Dazu schauen wir uns schrittweise genauer an, was diese Methode und das umliegende artikelsichtbarkeit Objekt für uns an Daten bereithält:

Als einziges Argument erhält man die Variable _\$artikel_objarr. Darin ist entweder ein assoz. Array oder ein Artikel spezifisches Objekt (siehe Kapitel 3.1, Teil 1), abhängig, von wo die Methode aufgerufen worden ist.

Folgende Membervariablen sind für die Artikelsichtbarkeit abgefüllt verfügbar:

$this->eingeloggt
true -> der Kunde ist eingeloggt
_ false -> der Kunde ist (noch) nicht eingeloggt

$this->kunde_obj
Kundenobjekt, wenn der Kunde eingeloggt ist, sonst false

$this->kundengruppe_id
Kundengruppen-ID (0 -> standard)

$this->kunden_nr
Kunden-Nr, wenn der Kunde eingeloggt ist und eine Kundennummer hat, sonst Leerstring

$this->kunden_id
Kunden-ID, wenn der Kunde eingeloggt ist, sonst Leerstring

“Pointer” auf vorhandene Artikeldaten

Folgende Membervariablen sind an dieser Stelle abgefüllt verfügbar und repräsentieren Pointer auf den Artikel, die direkt beschrieben werden können:

$this->art_id
Artikel-ID

$this->art_nr
Artikel-Nummer

$this->art_zusatzfeld_1
Artikelzusatzfeld 1

$this->art_zusatzfeld_2
Artikelzusatzfeld 2

$this->art_zusatzfeld_x
Artikelzusatzfeld x

Zugriff auf alle Artikeldaten

Zugriff auf das vollständige Artikel-Objekt ist folgendermassen möglich:

$this->art_obj
Artikel-Objekt

Performance-Hinweis

Die Artikelzusatzfelder sind beim Aufruf der Artikelsichtbarkeit aus den Funktion getArtikellight und getMultiArtikellight meistens nicht im Artikel-Array enthalten. Es wird deshalb beim Zugriff auf die Artikelzusatzfeld-Membervariablen der Artikelsichtbarkeit das Artikel-Objekt aus der Datenbank ausgelesen.

Zur Performance Optimierung sollte getArtikellight und getMultiArtikellight so aufgerufen werden, dass die für die Artikelsichtbarkeit benötigten Artikelzusatzfelder bereits im übergebenen Artikelarray enthalten sind. Der Artikel muss dann nicht durch die Artikelsichtbarkeit aus der Shop-Datenbank ausgelesen werden ({shopdir}/shop/USER_ARTIKEL_HANDLING_AUFRUF.php, im Bereich $darstellen == 1).

Beim Aufruf der Artikelsichtbarkeit durch die oben erwähnten Funktionen, wird das Artikel-Objekt auch aus der Shop-Datenbank ausgelesen, wenn auf die Membervariable _artobj zugegriffen wird. Der Zugriff sollte also nur erfolgen, wenn auch eine Artikelsichtbarkeit-Steuerung erforderlich ist.

Info: Bei aktivierter Spalten basierter Mehrsprachigkeit und aktiver Fremdsprache werden Artikeldaten meistens (!) in der lokalisierten Sprache zurück gegeben, bitte vorsichtig auf diese Daten prüfen (Name, [Kurz]Beschreibung, _gruppierung[_opt]_, Zusatzfelder die als übersetzbar markiert sind, - siehe auch util.php für Details…).

Advanced

Die Methode _setartikelsichtbarkeit wird von den verschiedensten Stellen aus im Shop aufgerufen, da die Artikelsichtbarkeit dicht unterhalb des Präsentation-Layers implementiert worden ist. Da die verschiedensten Stellen auch jeweils verschiedene Daten eines zu prüfenden Artikels bieten, wird oft ein assoziativer Array mit Teildaten eines Artikels in $artikel_obj_arr übermittelt und nicht ein Artikel-Objekt. Da die Datenbankfelder anders lauten als die Membervariablen im Artikel-Objekt ist es nicht möglich mit einem einheitlichen Zugriff auf vorhandene Daten des Artikels zuzugreifen, wenn es nicht speziell aufbereitete Daten via $this->art sind. Wenn immer man dann via $thsi->art_obj auf Objektdaten zugreift wird das ganze Artikelobjekt mit der ‘teurengetArtikel(…) Funktion eingelesen. Dies ist insbesondere in Schleifen mit einer grossen Anzahl an Artikeln nicht wünschenswert, vor allem, wenn die Daten doch schon in _\$artikel_obj_arr* übermittelt worden sind. Mit dem Auskommentieren des Codes: $art_obj_teildaten = get_artikel_obj_teildaten($artikel_obj_arr); stehen die übermittelten Daten via $art_obj_teildaten in einem teilweise abgefüllten Artikel-Objekt zur Verfügung, so dass man z.B. folgenden Code verwenden kann um die vorhandenen Daten möglichst gut auszunutzen:

$art_obj_teildaten = $this->get_artikel_obj_teildaten($artikel_obj_arr);
if (!is_numeric($art_obj_teildaten->aktionspreis)) {
    $aktionspreis = $this->art_obj->aktionspreis;
} else {
    $aktionspreis = $art_obj_teildaten->aktionspreis;
}

if ($aktionspreis > 0.0) return false;

Beispiel Artikelsichtbarkeits-Implementierung

// Unterscheidung Kunde nicht eingeloggt / eingeloggt
if($this->art_id == 67 && !$this->eingeloggt){
    // Allen nicht eingeloggten Kunden den Artikel mit Artikel-ID = 67 nicht anzeigen
    return false;
}

Lookup

Klassendefinitionen

Artikel: {shopdir}/shop/artikel_def.php

Artikelinfo: {shopdir}/shop/artikelinfo.def.php

dynartikelinfo1: {shopdir}/shop/dynartikelinfo.def.php

Installation

Voraussetzungen

Um das Artikelsichtbarkeit Modul einsetzen zu können, ist ein PepperShop ab Version 3.1 (Professional oder Enterprise) erforderlich.

Dateien kopieren und hochladen

Das Artikelsichtbarkeit Modul besteht im Wesentlichen aus zwei Dateien, die man in seinen installierten PepperShop kopieren muss. Dazu entpackt man zuerst das mitgelieferte ZIP-Archiv. Es sind folgende Dateien enthalten, hier mit den Zielverzeichnissen dargestellt:

{shopdir}/shop/artikelsichtbarkeit.def.php
{shopdir}/shop/artikelsichtbarkeit_helper.def.php

Die Dateien und das Verzeichnis lassen sich einfach via FTP oder SCP zum Webserver hochladen. Der Platzhalter {shopdir} steht dabei für das Shopverzeichnis auf dem Webserver, wo die Datei index.php zusammen mit README.txt zu finden ist.

Modulinstallation

Nach dem Kopieren der Dateien steht das Modul unmittelbar zur Anwendung bereit.

Aktivierung / Deaktivierung

Wie einleitend schon erwähnt, handelt es sich bei diesem Modul um eine headless Version. Es gibt keine Web basierte Maske zur Konfiguration oder Statusanzeige (abgesehen von der Aktivierungsanzeige in Shop-Einstellungen - Shop-Konfiguration - Module).

Es gibt eine zentrale Konfigurationssteuerung für die Aktivierung und Deaktivierung dieses Moduls:Datei: {shopdir}/shop/config.inc.php

define('ARTIKELSICHTBARKEIT_VERWENDEN',false);
Wenn das Artikelsichtbarkeit Modul installiert (und konfiguriert) ist, so kann man hier mit true steuern, ob es zur Anzeigesteuerung von Artikeln im Shop verwendet wird (nur kundenseitig)

Wenn bei der Konstantendefinition von ARTIKELSICHTBARKEIT_VERWENDEN ein false steht, ist das Modul deaktiviert und alle Programmierungen werden nicht verwendet. Steht dort ein true, ist das Modul aktiv.

Support

Glarotech GmbH kann Customizing Programmierungen für dieses Modul vornehmen, aber nicht für Auswirkungen selbst erstellter Programmierungen haften, resp. dafür kostenlose Supportdienstleistungen anbieten.


  1. Nur vorhanden, wenn das Modul “Kursbuchungen / dynamische Artikelinfo-Zusatztexte” im Shop installiert ist. Infos
🌶️
🔥
🌶️