ich wundere mich, dass ich nicht neue Subcribes in der Update-Funktion registrieren kann. Soll das so sein?
D.h. bei mir sieht das so aus:
public function install(){
$this->registerEvents();
return true;
}
public function update(){
$this->registerEvents();
return true;
}
public function registerEvents(){
$this->subscribeEvent ( 'Enlight_Controller_Action_PostDispatch_Backend_Article', 'onPostDispatchBackendArticle' );
}
Bei einem Update im Pluginmanager wird das Event nicht registriert, bei de- und installieren schon. Was mache ich falsch?
ich wundere mich, dass ich nicht neue Subcribes in der Update-Funktion registrieren kann. Soll das so sein?
D.h. bei mir sieht das so aus:
public function install(){
$this->registerEvents();
return true;
}
public function update(){
$this->registerEvents();
return true;
}
public function registerEvents(){
$this->subscribeEvent ( ‚Enlight_Controller_Action_PostDispatch_Backend_Article‘, ‚onPostDispatchBackendArticle‘ );
}
Bei einem Update im Pluginmanager wird das Event nicht registriert, bei de- und installieren schon. Was mache ich falsch?
Grüße
Mathias
Hallo,
das klappt problemlos, beispielsweise über:
public function update($version){
switch($version) {
case '1.0.1':
$this->subscribeEvent(
'Enlight_Controller_Action_PreDispatch_Frontend_Detail',
'onPreDispatchDetail'
);
break;
}
return true;
}
In meiner Update-Funktion werden zwar neue Events registriert, aber keine entfernt, wenn ein Event wegfällt. Die Install-Methode kann das jedoch. Gibt es dafür auch etwas? Soetwas wie unsubscribe? Notfalls würde ich es in der Datenbank (s_core_subscribes) per SQL entfernen.
Im neuen Plugin-System habe ich die unsubscribe-Funktion auch gerade gefunden. Was mache ich mit den Versionen kleiner SW5.2 und SW4? Dann ist das Plugin nicht mehr kompatibel. Ein umstellen ist aus diesem Grund leider noch nicht möglich.
ja, so habe ich es mir auch vorgestellt, eine eigene unsubscribeEvent-Funktion mit deinem Code. Leider funktioniert es nicht. Das Event steht immer noch in der DB-Tabelle s_core_subscribes und wird ausgeführt.
ja, so habe ich es mir auch vorgestellt, eine eigene unsubscribeEvent-Funktion mit deinem Code. Leider funktioniert es nicht. Das Event steht immer noch in der DB-Tabelle s_core_subscribes und wird ausgeführt.
Grüße
Mathias
Ja ich habe das Code nochmal überprüfet und meine Code nur löchen der Handler von listner Array, aber nicht von Datenbank.
wie ich sehe, Sie dürfen ein Sql beuntzen , um diese Handler direkt von der Datenbank zu löchen.
Das SQL wird leider nicht ausgeführt bzw. gleich wieder mit dem Event neu gefüllt… Ich glaube, an der Stelle müssen die Shopbetreiber de- und installieren…
Ich bin wieder etwas weiter. Das Storage wird bereits am Anfang der updatePlugin-Funktion in engine/Shopware/Components/Plugin/Namespace.php eingelesen. D.h. kurzfristig kann ich das Event löschen. Anschließend wird das Event gleich wieder eingefügt. Kann ich das Storage irgendwie in meinem Plugin neu laden lassen? Andernfalls kann ich das Update soweit durchführen, dass ich am Schluss kein return true zurück gebe, dann wird zwar ein Fehler ausgeworfen, aber die Events wurden registriert bzw. entfernt und das Plugin aktualisiert. Das Update (neue Versionsnummer) wird aber erst nach einem Refresh des Pluginmanagers angezeigt. Bis dahin kann der Shopbetreiber immer wieder auf das Update klicken und es passiert nichts bzw. das Update-Icon verschwindet nicht.
Du könntest den Eintrag aus der s_core_subscribes Tabelle löschen/ändern. Dort sind diese abgespeichert. Ansonsten würde ich noch “(de- and install)” in “(un- and install)” ändern.
In der Update-Funktion kann man keine Events löschen. Nach Abarbeiten der Funktion werden die „alten“ Events alle wieder in die Tabelle geschrieben. Es bleibt nur eine Neuinstallation.