Benachrichtigungen
Technische Informationen
Um dieses Modul verwenden zu können, werden technisches Know-How vorausgesetzt: PHP, Cron-Jobs / geplante Tasks.
Beschreibung
-
Seit dem PepperShop v.2.5 gibt es ein Modul um Benachrichtigungen zu versenden.
-
Man muss einen CRON-Job (periodisch aufgerufener Task) einrichten können.
-
Lagerbenachrichtigungen Ablauf:
- Bei jedem Artikel, der nachbestellbar oder uneingeschränkt verfügbar ist (Lagerverhalten) und wo der Lagerbestand = 0 ist wird eine Info angezeigt, dass man sich informieren lassen kann. Wenn man das als Kunde macht, wird dieser Event registriert. Im eigenen Kundenaccount sieht der Kunde seine noch offenen Lagerbenachrichtigungen.
- Sobald im Shop der Lagerbestand des Artikels wieder > 0 wird, verarbeitet der Shop in der Nacht auf den kommenden Tag alle anstehenden E-Mailbenachrichtigungen und versendet dabei die Events per Mail.
Das Modul besteht aus folgenden Dateien:
{shop_verzeichnis}/shop/
notifications.def.php
: Kundenseitige Funktionalität
{shop_verzeichnis}/shop/Admin/notify/
-
notify.php
: Aufruf-Datei für Cron-Job (WICHTIG!) -
notify.def.php
: Proceed Basisklasse -
notify_artikel.def.php
: Konkrete Verarbeitung von Lager-Benachrichtigungen -
notify_bewertung.def.php
: Konkrete Verarbeitung von Bewertungs-Benachrichtigungen (erst ab v.3.0) -
notify_vorauskasse.def.php
: Konkrete Verarbeitung von Vorauskasse-Erinnerung-Benachrichtigungen (erst ab v.3.0)
Weiter betroffen ist die Datei shop/kunde_account.php
, wo z.B. offene Notification Events verwaltet werden können.
Tabellen
Das Benachrichtigungssysytem verwendet zwei Tabellen in der Shopdatenbank:
notify_events
notify_liste
Cron-Job einrichten
Damit Benachrichtigungen versendet werden, muss man folgende Datei via Cron-Job einrichten: {shop_verzeichnis}/shop/Admin/notify/notify.php
Beispiel täglicher crontab Eintrag (crontab -l -u username
) Lagerbenachrichtigungen (Shop Webroot im Hauptverzeichnis) via CLI-Call:
0 5 * * * cd {shop_verzeichnis}/shop/Admin/notify/ && php notify.php commandline www.domain.tld "http://www.domain.ch/{webroot}"
Manuelles Ausführen aller anliegenden Notifications: Im Browser folgende URL öffnen: http://{domain}{shop_verzeichnis}/shop/Admin/notify/notify.php
.
Eventtypen
100
| Lager Benachrichtigung
- Verarbeitung der Events in
shop/Admin/notify/notify_artikel.def.php
- Wenn ein Artikel wieder an Lager ist, werden alle Kunden benachrichtigt, welche sich das so konfiguriert haben (E-Mail).
- Insert des Events erfolgt durch Link in
USER_ARTIKEL_HANDLING_AUFRUF.php
der zu kunde*account.php führt (darstellen=12
mitadd*...
Modul-Methode). - Info: Der Link wird nur angezeigt wenn in der Administration das Lagermanagement eingeschaltet ist und ‘Kunde sieht Lagerbestand’ auf JA konfiguriert worden ist!
- Die Verarbeitung läuft grundsätzlich ohne Zeitverzögerung (also mit Granularität des Cron-Job Aufrufs - zumeist wohl täglich)
200
| Bewertungs Benachrichtigung
- Verarbeitung der Events in
shop/Admin/notify/notify_artikel.def.php
- Wenn ein Kunde noch nicht bewertete Artikel hat, wird er darauf hingewiesen, dass er diese bewerten kann (E-Mail).
- Insert des Events erfolgt nach Bestellungsabsc hluss in
USER_BESTELLUNG_1.php
,darstellen=4
ganz unten. Dort wird nur ein neuer Event eingefügt, wenn der einkaufende Kunde noch keinen nicht verarbeiteten 200-er Event hat und wenn er nicht bewertete Artikel zugeordnet hat und auch dann nur, wenn die SteuerungskonstanteSEND_BEWERTUNG_EMAIL_NOTIFICATIONS
=true
ist (bewertung.def.php
). - Die Verarbeitung läuft mit einer Verzögerung von der in der Steuerungskonstante
SEND_EMAIL_NO TIFICATIONS_AFTER_DAYS
inbewertung.def.php
angegebenen Anzahl Tage (ausfuhren_ab Feld wird populiert) - es wird angenommen, dass der Cron-Job täglich eingestellt ist.
300
| Vorauskasse Erinnerung Benachrichtigung
BENÖTIGT DAS BEZAHLSTATUS MODUL!
- Verarbeitung der Events in
shop/Admin/notify/notify_vor auskasse.def.php
- Wenn ein Kunde seine Vorauskassebezahlung noch nicht beglichen hat (Bezahlstatus gelb/grün), so erhält er ein Erinnerungs E-Mail.
- Insert des Events erfolgt nach Bestellungsabschluss in
USER_BESTELLUNG_1.php
,darstellen=4
ganz unten. Dort wird nur ein neuer Event eingefügt, wenn die SteuerungskonstanteSEND_VORAUSKASSE_MAIL_NOTIFICATIONS_AFTER_DAYS
>= 0
ist(Shop-Einstellungen - Shop-Konfiguration - Konfiguration - „Steuerungskonstanten dieses Shops ansehen und bearbeiten“ - Konfigurationseditor)
. - Die Verarbeitung läuft mit einer Verzögerung von der in der Steuerungskonstante
SEND_VORAUSKAS SE_MAIL_NOTIFICATIONS_AFTER_DAYS
angegebenen Anzahl Tage (ausfuhren_ab Feld wird populiert) - es wird angenommen, dass der Cron-Job vonnotify.php
mindestens täglich eingestellt ist. Je nach Verwendungsart des Verarbeitungsprozesses muss man hier noch protected$pruefen_auf = 'zahlungsbest_am';
anpassen (keine Zahlungsbestätigungen, sondern nur effektive Zahlungseingänge erfassen
Patches
Patch für USER_BESTELLUNG_1.php um für jeden unbewerteten Artikel einen Eintrag zu tätigen
// Falls das Artikelbewertungsmodul vorhanden ist und wir E-Mail Notifications für noch\
// nicht
// bewertete Artikel versenden möchten, tun wir das hier
if (modul_check('bewertung') && modul_check('notifications') &&
defined('SEND_BEWERTUNG_EMAIL_NOTIFICATIONS') && SEND_BEWERTUNG_EMAIL_NOTIFICATIONS == true){
// Bereits getätigte Artikelbewertungen auslesen:
$bewertungen_obj = new bewertungen;
$bewertungen_obj->get_bewertungen_eines_kunden($myKunde->Kunden_ID);
$irrelevante_artikel = array();
if (is_array($bewertungen_obj->bewertet_arr) && !empty($bewertungen_obj->bewertet_arr)){
foreach($bewertungen_obj->bewertet_arr as $bewertung) {
if (intval($bewertung->artikel_id) > 0) {
$irrelevante_artikel[intval($bewertung->artikel_id)] = 'schon_bewertet';
}
}
}
// Bereits vorhandene Notifications des Kunden auslesen:
$notify_liste_obj = new notify_liste();
$notify_liste_obj->get_notifications_from_kunde($myKunde->Kunden_ID,true);
if (is_array($notify_liste_obj->notify_arr) && !empty($notify_liste_obj->notify_arr)) {
foreach($notify_liste_obj->notify_arr as $notify_obj) {
if (intval($notify_obj->event_id) == 200 && intval($notify_obj->value_int_1) > 0) {
$irrelevante_artikel[intval($notify_obj->value_int_1)] = '200_event_vorhanden';
}
}
}
// Bewertungs Event einfügen, wenn Artikel noch nicht bewertet worden ist und Event noch nicht
// existiert
// Event-ID fuer Lager-Benachrichtigungen ist 100:
$artikel_der_bestellung = $meineBestellung->getallartikel();
$noch_nicht_bewertete_artikel_dieser_bestellung = array();
foreach($artikel_der_bestellung as $artikel) {
// Falls vorhanden, die Parent-Artikel-ID verwenden:
$artikel_id = false;
if (defined('PARENT_SUB_ARTIKEL') && PARENT_SUB_ARTIKEL == true) {
$artikel_id = get_parent_artikel_id($artikel->Artikel_ID,'subartikel_id');
}
if ($artikel_id == false) {
$artikel_id = $artikel->Artikel_ID;
}
$artikel_id = intval($artikel_id);
// Wurde dieser Artikel vom Kunden schon bewertet oder existiert der Event schon?
if (array_key_exists($artikel_id,$irrelevante_artikel)) {
continue;
} else {
// Pruefen, ob es sich um einen Subartikel handelt. Wenn ja, lesen wir den Parent-
// Artikel aus und eben diesen zur Bewertung an.
$notify_obj = new notify_request;
if($notify_obj->insert(200,$myKunde->Kunden_ID,$artikel_id, $meineBestellung->Bestellungs_ID)){
// value_int_1 = Artikel-ID, value_int_2 = Bestellungs_ID
insert_statistik_event(array('notification','notifications', 'add_bewertung_notification',$myKunde->Kunden_ID,$artikel_id, $meineBestellung->Bestellungs_ID));
$irrelevante_artikel[$artikel_id] = '200_event_vorhanden';
}else{
// Fehlemeldung loggen und anzeigen:
show_error('Notification Event 200: '.£('benachrichtigung_schon_drin').' (Artikel-ID: '.intval($artikel_id).')!',false,false,true);
}
}
}
unset($artikel_der_bestellung);
}
Patch um Lagerbenachrichtigungen verwenden zu können, aber keine Lagerinfos anzuzeigen
- Patch erstellt für PepperShop v.2.6.0
- Datei: shop/USER_ARTIKEL_HANDLING_AUFRUF.php:
--- USER_ARTIKEL_HANDLING_AUFRUF.php_original 2010-09-29 15:22:04.000000000 +0200
+++ USER_ARTIKEL_HANDLING_AUFRUF.php 2010-09-29 15:32:19.000000000 +0200
@@ -1479,7 +1479,10 @@
// Falls die Lagerverwaltung eingeschaltet ist: Lagerinformationen ausgeben
// Die Fallunterscheidungen finden weiter oben statt, direkt unter der myarray foreach Schleife
- $art_tpl->set_variable('lagerinfo',htmlentities($max_kauf['lager_info']));
+// XXX>fjo: Lagerinfo nicht anzeigen - Kunde soll nur Lagerbenachrichtigung verwenden können:
+ // $art_tpl->set_variable('lagerinfo',htmlentities($max_kauf['lager_info']));
+ $art_tpl->set_variable('lagerinfo','');
+// <XXX
// Output fuer Hidden-Felder erzeugen lassen, dabei wird die globale Artikel-Set Unique ID ($asid) nur dann uebertragen,
// wenn der aktuell gerenderte Artikel auch ein Artikel-Set Variationsartikel ist.
@@ -1855,6 +1858,8 @@
// Falls die Lagerverwaltung eingeschaltet ist: Lagerinformationen ausgeben
// Die Fallunterscheidungen finden weiter oben statt, direkt unter der myarray while-list Schleife (ehemals foreach)
+// XXX>fjo: Keine Lageranzeige, obwohl so konfiguriert im Admin (wird nur fuer Lagerbenachrichtigung verwendet!
+/*
if(isset($max_kauf['lager_info']) && $max_kauf['lager_info'] != '') {
if (defined('PARENT_SUB_ARTIKEL') && PARENT_SUB_ARTIKEL == true && defined('SHOW_SUBARTIKEL_INFOS_AUF_1_STUFE') && SHOW_SUBARTIKEL_INFOS_AUF_1_STUFE == true && intval($myarray->sublagerbestand) > 0) {
// (kumulierter) Lagerbestand der Subartikel darstellen
@@ -1874,6 +1879,8 @@
$lst_art_tpl->set_variable('einheit',htmlentities($einheiten['anzahl_einheit']));
$lst_art_tpl->parse_current_block();
}
+*/
+// <XXX
// falls promo, Promo-Indikator anzeigen
if ($myarray->promo == 'Y' || (defined('PARENT_SUB_ARTIKEL') && PARENT_SUB_ARTIKEL == true && defined('SHOW_SUBARTIKEL_INFOS_AUF_1_STUFE') && SHOW_SUBARTIKEL_INFOS_AUF_1_STUFE == true && $myarray->subanzahlpromo > 0)) {
@@ -1967,12 +1974,17 @@
$lst_art_tpl->set_variable('name_label',£('artikel_name'));
// Lager-Ueberschrift nur ausgeben, wenn auch das Lagermgmt verwendet wird
$sortierfelder_weglassen = array();
+// XXX>fjo: Keine Lageranzeige, obwohl so konfiguriert (wir benötigen nur die Lagerbenachrichtigung)
+ $sortierfelder_weglassen[] = 'Lagerbestand';
+/*
if(!isset($max_kauf['lager_info']) || $max_kauf['lager_info'] == ''){
$sortierfelder_weglassen[] = 'Lagerbestand';
}
else {
$lst_art_tpl->set_variable('lager_label',£('lagerbestand'));
}
+*/
+// <XXX
// Sortierungslinks und Darstellung generieren und im Template abfuellen
$sortierung = create_listen_sortierung_output($sortierfelder_weglassen);
@@ -2167,6 +2179,8 @@
// Falls die Lagerverwaltung eingeschaltet ist: Lagerinformationen ausgeben
// Die Fallunterscheidungen finden weiter oben statt, direkt unter der myarray while-list Schleife (ehemals foreach)
+// XXX>fjo: Keine Lageranzeige, obwohl so konfiguriert im Admin (wird nur fuer Lagerbenachrichtigung verwendet! (einspaltige Liste)
+/*
if(isset($max_kauf['lager_info']) && $max_kauf['lager_info'] != '') {
if (defined('PARENT_SUB_ARTIKEL') && PARENT_SUB_ARTIKEL == true && defined('SHOW_SUBARTIKEL_INFOS_AUF_1_STUFE') && SHOW_SUBARTIKEL_INFOS_AUF_1_STUFE == true && intval($myarray->sublagerbestand) > 0) {
// (kumulierter) Lagerbestand der Subartikel darstellen
@@ -2184,7 +2198,7 @@
$lst_art_tpl->set_variable('lagerbestand',$lagerbestand_dargestellt);
$lst_art_tpl->set_variable('einheit',htmlentities($einheiten['anzahl_einheit']));
}
-
+*/
// Nach dem letzten Artikel den Artikellistenfooter ausgeben
if($artikel_in_kat == $artikel_counter){
// Footer-Zeile parsen
@@ -3691,4 +3705,3 @@
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 185./h) support@glarotech.ch oder +41 71 923 08 58