Artikelsichtbarkeit
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 set_artikelsichtbarkeit. 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 Artikel_info Objekt, dyn_artikelinfo 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_tabelle_felder 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 set_artikelsichtbarkeit und set_artikel_tabelle_felder 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_obj_arr. 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 art_obj 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 set_artikelsichtbarkeit 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 ‘teuren’ getArtikel(…) 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 Connect) 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: Im Konfigurationseditor (Shop-Einstellungen - Shop-Konfiguration - Konfiguration - „Steuerungskonstanten dieses Shops ansehen und bearbeiten“ - Konfigurationseditor)
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.
Weitere Hilfe
Benötigen Sie weitere Unterstützung? PepperShop stellt Ihnen unterschiedliche Möglichkeiten zur Verfügung.
- Oft hilft ein Klick in der Administration oben rechts auf das Fragezeichen Icon. Hier erhalten Sie direkt Hilfe zum betroffenen Thema.
- Diverse Antworten finden Sie in den FAQ. Diese sind ebenfalls in der Shopadministration über Hilfe&News -> Hilfearchiv aufrufbar. Oder über unsere Homepage https://www.peppershop.com/de/services/support/faq/
- In der PepperShop Academy https://www.peppershop.com/de/services/academy/ können Sie ganz einfach und bequem diverse kostenlose Video-Anleitungen finden.
- Gerne stehen wir Ihnen auch per Mail oder Telefon zur Verfügung (CHF 195./h) support@glarotech.ch oder +41 71 923 08 58