Blog: Latest Entries (15):


Shopware: Statische Seiten umbenennen

Im normal Fall wird die SEO-URL einer statischen Seite über den Namen/description gebildet. Ändert man nun den Namen der Seite, ändert sich auch der Link und damit könnten vorhandene eingetragene Links plötzlich nicht mehr funktionieren.
Um das zu verhindern, ist es praktisch der Namen für die SEO-URL unabhängig vom Namen erzeugen zu können. Da helfen die SEO Einstellungen im Punkt "SEO-Urls Shopseiten Template". Wir brauchen noch ein Freitextfeld mit dem DB-Spaltennamen "seourl". Nun ändern wir das Template:


{if $site.attributes.core.seourl}{$site.attributes.core.seourl}{else}{$site.description}{/if}


Wenn also dort im neuen Feld etwas angegeben ist, wird dieses verwendet und ansonsten weiterhin der Name. Das hat den Vorteil, dass man nur die Seite anpassen muss, die man umbenennen möchte und nicht jede.

Alte Versionen sind wichtig

Ich war bei Shopware von meinem eigenen Verhalten ausgegangen. Updates waren schnell und machten bis auf einen RC nie Probleme. Die produktiven verhielten sich immer genau so.
Da ich jetzt immer auf der aktuellsten Version entwickelte und dann für den Versions-Branch sagen konnte, ob es Probleme geben könnte oder nicht, habe ich auch den Support einer Plugins irgendwann daran orientiert und z.B. den 5.2er Branch nicht mehr unterstützt. Ich war mir sicher, dass das Meiste da laufen würde, aber ich hatte keine Test-Umgebung für 5.2.x und ging davon aus, dass nach einem halben Jahr wohl die meisten auf die aktuellste Version geupdatet hätten.

Falsch! Es wird noch z.B. 5.2.21 verwendet und braucht neue Plugins. Interessant wäre hier mal, welche Versionen von Shopware wie weit noch verbreitet sind, damit man abschätzen kann, ob es sich lohnt noch dafür zu entwickeln.

Nun habe ich in meiner Shopware VM folgende Versionen installiert, um ausreichend Testen zu können:

- 5.2.21
- 5.2.27
- 5.3.7
- 5.4.2

Damit sollten sich alle wichtigen Versionen abdecken lassen und wenn jemand mit einer anderen Version Probleme hat, kann man das immer noch innerhalb von 15min installieren und dann mit der konkreten Version testen.

Ich habe also jetzt angefangen, meine Plugins nochmal mit alten Versionen zu testen und auch dann dafür freizugeben.

Und wenn man sich Shop mit Oxid 4.3, XTC 3.x oder manche noch anderen Lösungen anguckt, wäre selbst die erste 5.2er Version als Alt zu bezeichnen nicht ganz richtig. Die Shopware-Welt ist exxtrem schnelllebig.

SATIP und Streaming

Nachdem wir von Kabel auf Sat für das Fernsehen umgestiegen sind, musste auch wieder eine Streaminglösung her. Nachdem ersten Versuch mit einer reinen SATIP-Lösung wurde ich dann doch schnell auf den Boden der Tatsachen zurück geholt. So einfach wie es mit der Kabel-Lösung von AVM war wird es hier wohl nicht. SATIP wird irgendwie von ein paar kleinen wenigen Software-Lösungen unterstützt.
Einen extra Receiver zu kaufen wäre auch zu teuer gewesen. VLC bekam es nicht hin. eine Software konnte nur die HD-Sender darstellen und eine zweite bekam alles hin aber war extrem instabil.

Auch die Netzwerk-Verbindung war nicht einfach: LAN -> Powerline -> WLAN war instabil, LAN -> WLAN (an der Außenwand) war instabil, LAN -> WLAN (mit Kabel durch die Terrassentür) stabil.

bbcode-image


Aber SATIP ist gut wenn man damit in einen Server geht, wenn man aber direkt Clients bedienen möchte ist es echt nicht toll, weil die breite Unterstützung fehlt.

bbcode-image


Also wieder verkauft und in einen Triax TSS 400 Mk2, der auch direkt DLNA unterstützt. VLC auf dem PC: ok, Playstation 3: ok, VLC auf FireTV Stick Gen1: ok, VLC auf FireTV Stick Gen2: findet den Server nicht.

bbcode-image


Aber insgesamt läuft nun alles stabil und man könnte bis zu 4 Streams aufrüsten. Auch das Bearbeiten der Senderliste ist sehr einfach und braucht keinen Sendersuchlauf mehr. Man kann einfach eine XML-Datei downloaden, dort einen Eintrag mit Name, Frequenzen und Ids eintragen und nach dem erneuten Upload ist der neue oder die neuen Sender direkt im Netzwerk verfügbar. Per UPNP muss man auch den DLNA-Server nicht lange suchen, sondern er wird direkt von Windows, VLC, PS3, etc gefunden ohne eine IP angeben zu müssen.

Bei der Verkabelung muss im Sommer noch viel getan werden und das CAT6 Kabel kommt in die Erde und alles soll dann durch ein Kellerfenster gehen. Die Verkabelung mit der Sat-Antenne ist wie bei einem normalen Receiver nur eben bei mir auf kürzere Strecke. Mit einem Dual-LNB kann man zwei Streams bedienen, mit einem Quad-LNB wären es vier, es reicht also für einen kompletten Familienhaushalt.
Dabei können nicht gelegte Anschlüsse einfach frei bleiben und es sind keine Abschlusswiederstände oder so nötig.

Seit den letzten Änderungen am Netzwerk läuft der Server ununterbrochen seit 2 Monaten ohne Probleme. Falls mal ein Stream hängen bleibt oder Aussetzer hat hilft immer ein kurzer Senderwechsel und dann geht wieder alles. Solche Dinge sind aber bis jetzt nur mit der PC-Version des VLC aufgetretten (3.0 wurde noch nicht getestet, ich vermute aber dass die Version besser laufen wird).

Ich finde die Lösung mit dem Triax TSS 400 sehr empfehlen wird, wenn man entweder nur Kabel-LAN verwendet oder das WLAN dicht genug an den Rest heran bekommt. Dachböden sind kein Problem, Garagen sind da schon wirklich komplizierter. Und ein 1Gb Switch ist auch nie verkehrt zu haben, wenn da paar parallele Streams laufen sollen.

Nachtrag: Die kleinen Aussetzer ließen sich durch einen Wechsel auf einen AVM WLAN-Repeater beheben. AVM ist zwar nicht ganz so günstig, aber es funktioniert immer besser und stabiler als die günstigen Lösungen.

AVM Fritzbox mit UMTS-Fallback

Manchmal passiert, dass man oder der ISP was falsch machen und wenn alles ganz doof läuft muss man 2,5h warten bis man seinen neuen Aktivierungscode für das Kabel-Modem bekommt. Wie soll man diese Zeit überleben? Die Lösung ist eine SIM-Karte mit Guthaben und Internet-Option und ein UMTS-Stick (wie ich ihn mir für mein SMS2X-Projekt mal gekauft habe). Ich habe also die SIM-Karte in den XS P10 Stick gesteckt und diesen in den freien USB-Port der Fritzbox.

bbcode-image


Nun dauert es etwas bis das Gerät erkannt wird. Einfach warten... man hat ja sonst nichts zu tun. Wenn er erkannt wurde taucht unter "Internet" ein neuer Punkt "Mobilfunk" auf.

bbcode-image


Hier muss man nur die PIN eingeben und denn Netzanbieter auswählen. Warten. Fall es nicht klappt, die Fritzbox einfach nochmal neustarten (musste ich einmal machen).

bbcode-image


Dann sollte in der Übersicht die Internetverbindung über UMTS angezeigt werden. Ein 200Mbit/s Kabelanschluss ist bedeutend schneller, aber für ein Fallback reicht der Stick alle mal. Firmen sollten vielleicht mehr als 14 Euro in einen Stick investieren, um eine schnellere Lösung zu finden.

bbcode-image

Roccat Kone: Gut und schnell... kaputt

Man kann gegen die Kone Mäuse von Roccat wenig sagen. Sie liegen gut in der Hand, haben eine gute Größe und das Gewicht stimmt auch, so dass auch nach stundenlangen Arbeiten oder Spielen man keine Probleme oder Krämpfe in den Händen bekommt. Die Treibersoftware ist leicht zu bedienen und die LED-Beleuchtung ist zurückhaltend.
Gerade günstige Gamer-Mäuse neigen ja dazu sehr futuristisch auszusehen und stehen sich damit meistens mehr im Weg als Nutzen daraus zu ziehen. Alles ist super.. nur eine Sache ist nicht so toll.. und das ist die Geschichte wie man 3 Mäuse in 7 Jahren verschleißt und nun bei der 4. angekommen ist.

Leider haben andere Hersteller oft das Problem, dass man keine Klicks durch das Drücken des Mausrads nach Links oder Rechts durch führen kann oder wollen sehr viel mehr Geld für diese Mäuse haben.

Nach meistens 2 Jahren merkt man dann, dass das Ende der Maus näher rückt. Nach der 3. Maus bin ich auch nicht mehr bereit das als Einzelfall zu sehen, weil es bei jeder der Mäuse genau gleich ab lief und zwar immer 100%ig gleich und die Taster sich klar als Schwachstelle herausstellte.

Es fing immer damit an, dass bei Links-Klicks öfters mal ungewollt Doppelklicks ausgeführt werden. Nervig, aber geht meistens noch, auch wenn bei WoW ungewollte Doppelangriffe ausgelöst werden.
Aber es wird schlimmer mit den Tagen. Danach folgen meistens Probleme mit dem Mausrad. Wärend das Scrollen kein Problem zeigt, machen die Klicks Links oder Rechts Probleme durch sporadische Aussetzer.

Alle diese Probleme verschlimmern sich sich mit der Zeit.

Bei den ersten beiden Mäusen kam es dann innerhalb eines Monats dann zu kompletten Aussetzern der Maus inkl der USB-Verbindung. Bei der 3. Maus haben wir es garnicht so weit kommen lassen.
Ich hatte noch die erste Maus meiner Frau übernommen (Sie nutzt sie für Surfen, WoW, Diablo 3, etc und gerade bei WoW wurden dann auch alle Tasten belegt und verwendet). Bei mir gingen die Probleme an einem anderen PC weiter und auch bei der Arbeit habe ich die Maus dann einige Tage versucht zu verwenden, aber auch da zeigten sich die gleichen Probleme. Die Versuche bei mir nutzen auch nicht die Roccat Software sondern die generischen Maus-Treiber von Windows. Es war also ein Hardware Problem. Bei der 2. Maus konnte ich wieder die Probleme bestätigen.

bbcode-image


Also ist nun die 4. Roccat Kone, diesmal eine AIMO, die eine XTD ersetzte, dabei ihre Dienst in WoW zu tun und wir rechnen fest damit, das meine Frau sich in 2-3 Jahren die nächste Maus kaufen werden muss.

Falls jemand auch diese Probleme kennt, wäre es toll mal eine Bestätigung von 3. zu erhalten, wobei nach 4 Mäusen ich kaum noch glaube immer Pech gehabt zu haben bei den Tastern.

PS: meine alte Logitech RX300 ist jetzt 16 Jahre alt und funktioniert immer noch gut.

RecursiveFileSeeker Update

Eine kleine Klasse, die ich mal für ein kleines Projekt geschrieben hatte, das mein Bruder brauchte (Verarbeitung und Katalogisierung von mehren 10.000en RTF-Dokumenten). Die Klasse liest alle Dateien eines Verzeichnisses und die alle seiner Unterverzeichnisse ein.


package de.hannespries.commons.io;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class RecursiveFileSeeker {
public static List<File> list(File folder, List<File> result, boolean allowFolders) {
return list(folder, result, allowFolders, new ArrayList<>());
}

public static List<File> list(File folder, List<File> result, boolean allowFolders, List<String> excludeDirnames) {
try {
if (!folder.isDirectory()) {
return result;
}

File[] files = folder.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory() && !excludeDirnames.contains(file.getName())) {
if (allowFolders) {
result.add(file);
}
if(!excludeDirnames.contains(file.getName())){
result = list(file, result, allowFolders, excludeDirnames);
}
} else {
result.add(file);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}

return result;
}
}

Cashless Payment System I: Events

So langsam wird aus dem Prototypen ein fertiges Plugin, dass für den Einsatz in der realen Welt genutzt werden kann. Aber wofür kann man selbst ein Cashless Payment System, also ein System wo man nicht direkt mit Geld bezahlt sondern mit einem vorhanden oder später auszugleichenden Guthaben bezahlen kann, nutzen. Für wenn ist es interessant?

Events (Wegwerfkarten aus Pappe + 13,56 kHz RFID-Tag):
Wer events organisiert kennt sicher schon Verzehrkarten und ähnliche Systeme. Man kauft sich am Eingang beim Bezahlen des Eintritts eine Karte für den Erwerb von Getränken. Jedes mal wenn man etwas Kauft wird der Preis vom vorhanden Guthaben abgezogen. Wenn man dann kein Guthaben mehr hat bekommt man nichts mehr und muss neu aufladen. Wer das Event verlässt und nicht alles ausgegeben hat, lässt das Guthaben verfallen.
Der Vorteil mit so einem System ist, dass die Mitarbeiter an der Bar nicht rechnen oder mit Bargeld rumhantieren müssen. Es kommt zu weniger Fehlern und es geht alles etwas schneller. Das Bargeld wird an zentraler Stelle behalten und es gibt keine Wechselgeldprobleme.

Wenn es um einzelne Events geht, wäre es sehr aufwendig und teuer für jedes Event ausreichend (also lieber immer zu viele) RFID-Karten bedrucken zu lassen. Hier gibt es als einfache Lösung RFID-Tags.
Also einfache Aufkleber, die auf eine Papier-Karte geklebt werden können. Man lässt sich also nur einfache Karten drucken und klebt die Tags beim Kauf rauf. Spart viele Kosten und die Karten und Tags halten einen Tag ohne Probleme durch.

bbcode-image
RFID-Tags zum Aufkleben

bbcode-image
Eine einfache Papier-Karte *...

bbcode-image
... jetzt mit RFID-Tag kompatibel zu unserem System


Unser Cashless Payment System in Stichworten:

- keine lokalen Server da alles in der Cloud laufen kann
- kostengünstiges Mieten oder selber bauen von Kassen-Terminals
- erspart das Handtieren mit Bargeld und EC-Karten an den POS's
- Prepaid- und Nachträglich-Bezahlen Verfahren werden unterstützt
- Bedienung rein über Touchscreen (aber auch Maus und Tastatur wenn es vorzieht)
- Unterstützt 13,56kHz/125mHz RFID Technik und Barcodes (Code128/ QR) mit den jeweiligen USB-Readern
- Bon-Druck auf Thermo-, Tintenstrahl- oder Laserdrucker
- Unterschiedliche Kundengruppen mit entsprechenden Auswertungen von Verkäufen
- eine einfache Bestandsführung und automatische Sperrung von Produkten ohne Bestand
- Vereinfachte Bedienung durch Topseller und selbst gestaltbarer Seiten
- Professionelles und bewertes Shopware-System als Kern unserer Anwendung

Weitere Informationen sind demnächst verfügbar!

* Eishaus Lübeck

Bon-Druck mit Shopware

Ein simpler und günstiger Bon-Drucker kann sehr einfach als normaler Windows Drucker verwendet werden. Er druckt eben nur den von ihm abgedeckten Bereich der Seite. Aber mit dem CSS3 Print-Profile kann alles super anpassen.

bbcode-image


So sieht eine Shopware-Bestellung ausgedruckt aus (die Versandkosten sind dort nicht aufgeführt, da es normal nicht vorkommt, dass in so einem Fall welche angerechnet werden würden.. vor Ort).

Demnächst kommt hier ein Blog-Artikel der das System und Anwendungsfälle genauer beleuchten wird und Lösungen für Event, Discos, Restaurants und Hotels beschreibt.

Endoskop Kamera Review Image-Quality

Nachdem ich das letzte mal zwei China-Mini-Kameras vergestellt habe, kommt diesmal eine etwas andere "Endoskop" Kamera. Man kann diese gut verwenden um in Rohre oder Gehäuse zu gucken. Die Kamera hat mehrere LEDs die über einen Drehregel am Kabel in der Helligkeit angepasst werden können. Es gibt einen Periskop-Aufsatz und einen Magneten, mit man Metal-Gegenstänge angeln kann.

bbcode-image


Informatives zu Marketing und CRO

Ich bin ja nur Entwickler und kenne mich mit Marketing an sich gar nicht aus. Es würde meinen Projekten und Shopware-Plugins sicher gut tun, wenn ich mich mal etwas mehr damit beschäftigen wurde.. was ich mir gerade auch mal wieder mehr vorgenommen.. gerade jetzt! :-)

Ich hab ein paar für mich relativ interessante Artikel gefunden, die ich einfach mal hier teilen will.

Das hier ist wohl der für mich wichtigste Artikel. Gebe deinen Kunden immer einen Grund, warum das Produkt/Plugin zu ihnen passt. Das fehlt wirklich oft genug. Ich habe teilweise schon kleine Anwendungsbeispiele geliefert, aber etwas ausführlichere Use-Cases könnten da wirklich helfen.

Behavior Pattern "Reason Why"

Auch ganz gut um eine allgemeine Übersicht zu bekommen (und mit leichten Erinnerungen an Simple Programmer Blog-Artikel) fand ich diesen Artikel ganz gut. Der Hauptton darin ist grob: Das Hauptproblem ist nicht einen Uplift zu erreichen sondern die Mittel dafür zubekommen. Und das im SEO-Bereich hoch geachtete Bauchgefühl wird hier als nett aber nicht-ziel-bringend in einem realistischen Kontext dargestellt. Schaf dir deine Werkzeuge, mach Big Data und liefer belegbare Zahlen aus validierten Test-Szenarien.
Am Ende soll man sein eigenes Team und ein besseres Gehalt haben.. ach ja .. das die Firma mehr verkauft fällt nebenbei auch noch ab.

5 Conversion Quick-Tipps für Anfänger und Fortgeschrittene
Redesign & Bauchgefühl – Ein gefährliches Paar!

Die anderen Artikel fand ich einfach informativ für mich aber so direkt nicht brauchbar, da ich weder einen Shop noch etwas vergleichbares betreibe.

Anticipatory Design: So liest Du die Gedanken Deiner Nutzer

Das klassische Problem, dass man sich selber anders sieht als andere einen sehen.. Zielgruppen.. Ich glaube eine Zielgruppe gefunden zu haben, aber sieht sich die Gruppe selbst als Zielgruppe oder passt eine andere besser?

Conversion Whiteboard 15: Der Dunning – Kruger – Effekt der Organisation
Content Optimierung ist mehr als SEO

Der nächste Artikel erinnert mich an die Neuauflage der 80er Jahre Turtles Actionfiguren.. sie waren sofort weg.. wohl nicht weil die jetzt besonders hochwertig waren oder eine große Zielgruppe angesprochen haben.. es gab einfach nur wenige und deswegen wurde geglaubt sie wären wertvoll und eine gut Investition.

Da hab ich sogar ein Plugin, dass in die Richtung geht und die erzählt dass "nur noch" so und so viele Artikel vorhanden sind und es danach entweder keine mehr oder nur mit sehr langen Lieferzeiten gibt. Also besser jetzt kaufen, weil wenig da ist, deswegen ist es wertvoll und genau deswegen werden alle anderen es dir weg kaufen.

Behavior Pattern "Scarcity"

Hier wird einmal angesprochen, dass man Daten vor der Analyse immer prüfen sollte. Wenn man nicht weiß, dass die Daten richtig sind, lohnt sich eine Analyse damit eh nicht.

Data for Growth – Diese 10 Tipps machen Dich zum Goldgräber!

Hier auch einmal das Beispiel, das Menschen bei einer Frage nach ihrer Meinung oft nur das antworten, von dem sie glauben, dass der Fragende dieses hören will. Klassisch: "Was halten Sie von der politischen Entscheidung XXXXXXXXX?" - "Ich bin total dagegen. Sowas kann man einfach nicht so machen... " *Pause* ".. war die Antwort richtig?". In dem Artikel am Beispiel von Coca Cola und Pepsi und der glaube, dass man Coca Cola besser finden müsse.

Wie wirkt Deine Seite unterbewusst im Gehirn des Nutzers? 8 Neuromarketing-Tipps für mehr Conversions

... erst einmal genug.. den Rest findet jeder auf der Seite dann sicher auch selber.

RFID-Reader Konfiguration, Ausgabe mit Enter

Für mein POS-Projekt hatte ich 2 verschiedene RFID-USB-Reader. Einen direkt aus China und einen über Amazon bestellt. Der von Amazon hat den Vorteil, dass er verschiedene Ausgabe-Modi kann.

bbcode-image


Der einfache Reader aus China gab von Anfang an direkt die Nummer mit Enter aus.

bbcode-image


Der Reader von Amazon war zu Anfang so eingestellt das die Nummer ohne Enter ausgegeben wird. Aber es war eine Karte dabei um die Ausgabe zu konfigurieren.

Das ist auch sehr einfach. Wie man wohl schon direkt vermutet, hält man die Karte über das Lesegerät und es schaltet in den nächsten Modus.

bbcode-image


Der Index des aktiven Modus wird ausgeben und man kann direkt mit einer normalen RFID-Karte testen.

bbcode-image


Ich habe am Ende den Modus 0e verwendet. Da es der Code ist, der auch auf der Karte steht und mit Enter ausgegeben wird (also wie vorher nur mit Enter).

VPN mit Fritzbox und Android

VPN-Verbindungen sind sehr nützlich. Ob man nun im Homeoffice ist und sich ins Firmennetzwerk einklinken möchte oder man unterwegs auf private Daten zugreifen möchte, die man auf einem NAS lagert und nicht immer mit einem Webserver synchronisieren möchte.

Um das eigene Netzwerk (private oder Firma) VPN-fähig zu machen braucht man nur eine einfache Fritzbox. Diese bringt alles mit was man braucht und bei viele haben so eine bestimmt schon als Router im Einsatz (auch für kleine Firmen reicht eine Fritzbox oft vollkommen aus).

Es geht sehr schnell und einfach. Man sollte ein MyFritz-Konto haben oder einen anderen DynDNS-Anbieter eingerichtet haben. Wenn man dann einen neuen Benutzer anlegt kann man diesen als VPN-Benutzer aktivieren. Nun kann man diesen schon mit den angezeigten Daten für eine VPN-Verbindung nutzen.

bbcode-image

bbcode-image

bbcode-image

bbcode-image


Die Daten kann man sich auch später nochmal anzeigen lassen.

bbcode-image


Bei Android ist das anlegen einer VPN-Verbindung auch sehr einfach.

bbcode-image

bbcode-image


Bei Windows Notebooks und Tablet mit WWAN-Option oder UMTS/LTE-Stick ist es auch nicht komplizierter.

Nun kann man von überall aus mit dem Smartphone sich in das eigene LAN einwählen und dort z.B. per FTP Daten von einem NAS oder anderen Server abrufen oder auch auf intern-gehostete Webanwendungen wie Wikis oder Groupware-Lösungen zugreifen.



Shopware: Eigene RiskManagement-Rule in einfach

Shopware bietet zwar ein Beispiel an, aber dieses Beispiel hat mich doch zu viel Zeit gekostet, bis es lief und die dort verlinkte ZIP-Datei ist leider auch nicht fehlerfrei. Deswegen habe ich mich mal daran gemacht eine eigene einfachere Beispiel Implementierung zu bauen, die als Vorlage mit viel Copy&Paste dienen kann.

Das Plugin

namespace HPrExampleRiskManagement;

use Shopware\Components\Plugin;

class HPrExampleRiskManagement extends Plugin{
//-- replace with our values --
private static $eventSuffixVarName = 'hpr_risk_example_event';
private static $eventSuffix = 'HPrRiskExample';
private static $extendFolder = 'hpr_risk_example';
private static $serviceName = 'hpr_risk_example.service';
//--

/**
* @return array
*/
public static function getSubscribedEvents(){
return [
'Enlight_Controller_Action_PostDispatchSecure_Backend_RiskManagement' => 'onRiskManagementBackend',
'Shopware_Modules_Admin_Execute_Risk_Rule_sRisk' . self::$eventSuffix => 'onRisk'
];
}

public function onRiskManagementBackend(\Enlight_Controller_ActionEventArgs $args){
$args->getSubject()->View()->addTemplateDir($this->getPath() . '/Resources/views');

if ($args->getSubject()->Request()->getActionName() == 'load') {
$args->getSubject()->View()->assign(self::$eventSuffixVarName, self::$eventSuffix);
$args->getSubject()->View()->extendsTemplate('backend/' . self::$extendFolder . '/store/risks.js');
}
}

/**
* @param \Enlight_Event_EventArgs $args
* @return bool
*/
public function onRisk(\Enlight_Event_EventArgs $args){
$result = false; //false == no risk
try{
$service = $this->container->get(self::$serviceName);
$result = $service->checkRule($args);
}
catch(\Exception $e){

}
return $result;
}
}


Ein Service

namespace HPrExampleRiskManagement\Components;

class RiskRuleService{
/**
* @param \Enlight_Event_EventArgs $args
* @return bool
*/
public function checkRule(\Enlight_Event_EventArgs $args){
return false;
}
}


Die services.xml

<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

<services>
<service id="hpr_risk_example.service" class="HPrExampleRiskManagement\Components\RiskRuleService">
<tag name="service" />
</service>
</services>
</container>


Unsere risks.js (Pfad wie in Plugin)

//{extends file='parent:backend/risk_management/store/risks.js'}
//{block name="backend/risk_management/store/risk/data"}
// {$smarty.block.parent}
{ description: '{s name=risks_store/comboBox/HPrRiskExample}HPrExample Check{/s}', value: '{$hpr_risk_example_event}' },
//{/block}


An sich macht man nichts anderes als eine JSON Key-Value Liste zu erweitern und dort ein Event einzutragen, das eine Methode auslöst, die true (is a risk) oder false (is not a risk) zurück gibt. Diese Methode sollte nur als Facade für einen Service dienen, damit man die Logik schnell und einfach austauschen kann.

Das Plugin kann man dann eben noch um alles mögliche erweitern, wie Freitextfedler für Kunden und weitere Templates. Dann den Serive vollständig implementieren, nochmal was mit dem Snippet machen und man sollte seine RiskManagement-Rule haben.

Older posts:

Möchtest Du AdSense-Werbung erlauben und mir damit helfen die laufenden Kosten des Blogs tragen zu können?