Ich bin relativ neu im Hook-System von Shopware und versuche gerade nach dem Speichern der Kundenregistrierung im Frontend einen Hook zu platzieren.
Der Hintergrund des Hooks soll sein, dem Nutzer je nach Länderauswahl in eine länderbezogene Kundengruppe zu schieben, z.B. „Kunden DE“, „Kunden CH“ usw.
Hier mal der Quellcode:
public function install()
{
$this->subscribeEvent(
'sAdmin::sSaveRegister::after',
'afterSaveRegisterHook'
);
$this->createConfig();
return true;
}
public function afterSaveRegisterHook(Enlight_Hook_HookArgs $args)
{
/** @var \sAdmin $subject */
$subject = $args->getSubject();
$return = $args->getReturn();
Shopware()->Debuglogger()->info("Methode aufgerufen.");
Shopware()->Debuglogger()->info($subject);
$args->setReturn($return);
}
Doch leider ist es so, dass er die Methode „afterSaveRegisterHook“ nie aufruft.
Mache ich hier irgendwo einen Fehler ? Oder funktioniert die Logging-Ausgabe dort nicht ? Die Methode „die()“ hatte auch nicht funktioniert.
hast du das Plugin neu installiert (ist nach jeder Änderung an einem “subscribeEvent” nötig?) und den Cache geleert? Das sind die häufigsten beiden Probleme. Falls es da in der Methode ein gutes Event gibt (notify, filter etc), kannst du auch das probieren.
naja, vom Prinzip her kannst du beim Before-Hook die Funktions-Parameter ändern und beim After-Hook die Rückgabewerte. Bei “filter”-Events kannst du den zweiten Parameter modifizieren, bei notify / notifyUntil nur Objekte per Objektreferenz, da ist eigentlich keine Änderung vorgesehen.
Falls das nicht genügt, gibt es natürlich noch immer die Möglichkeit, die entsprechende Logik direkt in der DB vorzunehmen - also den Kunden da in die richtige Gruppe zu schieben, darauf wird es vermutlich hinaus laufen.
wenn ich alles richtig verstanden habe, brauchst du da kein Hook. Du kannst alles mit dem „Shopware_Models_Admin_SaveRegisterMainData_FilterSql“ Filter Event lösen:
$this->subscribeEvent(
'Shopware_Models_Admin_SaveRegisterMainData_FilterSql',
'onSaveRegisterMainData'
);
/**
* Filter event on save register main data
*
* @param \Enlight_Event_EventArgs $arguments
* @return mixed
*/
public function onSaveRegisterMainData(\Enlight_Event_EventArgs $arguments)
{
$sessionRegisterData = Shopware()->Session()->offsetGet('sRegister');
$returnData = $arguments->getReturn();
// If country is germany switch the customer group
if($sessionRegisterData['billing']['country'] = 2){
$returnData[1][7] = 'Kunde DE';
}
return $returnData;
}
Unter „$sessionRegisterData“ findest du alle Daten die der Kunde eingegeben hat.
Unter „$returnData“ findest du die Daten die in der Datenbank geschrieben werden. Diese kannst du jetzt modifizieren.
In dem Beispiel ersetze ich einfach die Kundengruppe auf „Kunde DE“ wenn der Kunden „Deutschland“ ausgewählt hat. Da wirst du noch eine DB Abfrage machen müssen für eine vernünftige Zuordnung zwischen Land und Kundengruppe.