ich versuche mich gerade in die Shopware Plugin Erstellung einzuarbeiten und komme aktuell bei einem Fehler nicht weiter.
Grundsätzlich möchte ich ein Plugin erstellen, das einen Cronjob registriert. Dieser Cronjob soll dann bestimmte Funktionen des Plugins ausführen.
Wenn ich versuche folgendes Plugin ( myPluginTest.php in custom/plugins/myPluginTest/ ) zu aktivieren, erhalte ich den unten genannten Fehler.
subscribeEvent(
'Shopware_CronJob_Test',
'onRun'
);
$this->createCronJob("Test", "test", 86400);
return true;
}
public function onRun(Enlight_Components_Cron_EventArgs $job)
{
$this->test();
}
public function test() {
return true;
}
}
Fehlermeldung:
PHP Strict Standards: Declaration of myPluginTest\myPluginTest::install() should be compatible with Shopware\Components\Plugin::install(Shopware\Components\Plugin\Context\InstallContext $context) in myPluginTest.php on line 5
PHP Fatal error: Call to undefined method myPluginTest\myPluginTest::subscribeEvent() in myPluginTest.php on line 9
Kann mir jemand an dieser Stelle weiterhelfen? Was fehlt der install Methode, und was muss ich mit subscribeEvent noch tun, damit ich keinen Fehler erhalte.
Ausserdem, würde es wenn die Fehler erledigt sind, so funktionieren das die methode onRun ausgeführt wird, immer dann wenn der Cronjob läuft?
Wenn ich das richtig verstehe, muss ich das also wie folgt machen:
namespace myPluginTest;
class myPluginTest extends \Shopware\Components\Plugin {
public function install(InstallContext $context)
{
}
public static function getSubscribedEvents()
{
return [
'Enlight_Controller_Front_RouteStartup' => 'onRun'
];
}
public function onRun(Enlight_Components_Cron_EventArgs $job)
{
$this->test();
}
public function test() {
return true;
}
}
Nun bin ich überfragt, welches Event ich an stelle von „Enlight_Controller_Front_RouteStartup“ verwenden sollte. Empfiehlt es sich hier evtl. „Enlight_Controller_Front_StartDispatch“ zu nehmen?
Im Ordner Ressources meines Plugins habe ich jetzt auch eine cronjob.xml angelegt. Muss ich die dann in der Install Methode irgendwie initialisieren? Oder wird die automatisch von Shopware übernommen?
also ganz einfach gesagt möchte ich ein Plugin, das einen Cronjob registriert, und dieser Cronjob startet dann eine Methode aus meinem Plugin. Jetzt zum start versuche ich einfach mal zum Test bspw. in der jeweiligen Methode eine E-Mail zu versenden. Einfach damit ich das Zusammenspiel von Plugin und Cronjob verstehe. Wenn das soweit funktioniert würde ich mal das erstellen eines Produktes über die API testen wollen, was ich ausserhalb von einem Plugin schon hinbekommen habe.
Das Plugin installiert jetzt ohne Fehler, nach den Tipps von Michael, ein Cronjob wird auch automatisch angelegt, durch die cronjob.xml die ich im Plugin abgelegt habe.
Was ich nun noch nicht verstehe, wie startet der Cronjob eine Methode in meiner Klasse?
Ich habe jetzt einfach mal folgende cronjob.xml erstellt:
Test
TestAction
true
86400
true
Ich denke über das Element action in der XML Datei kann ich eine Verbindung zu meinem Plugin schaffen. Nur wie genau muss ich das hier definieren?
Das Plugin sieht gerade so aus. Wahrscheinlich muss ich für den Cronjob ein anderes Event verwenden!?
muss die xml-Datei irgenwie eingelesen werden damit die Cronjobs angelegt werden? Wir haben einen Job in der xml definiert er wird aber nicht angelegt. Was muss den außer der xml sonst noch (welche Funktionen) für die Cronjobs im Plugin vorhanden sein?
xml
CC CheckOrderState
Shopware_CronJob_CheckOrderState
true
7200
true
php event
public static function getSubscribedEvents()
{
return [
'Shopware_CronJob_CheckOrderState' => 'onRunClickCheckOrderState',
];
}
php funktion
public function onRunClickCheckOrderState(Shopware_Components_Cron_CronJob $job)
{
//mach etwas
}
Bei mir will das mit der cronjob.xml nicht funktionieren. Ich kann in die XML eintragen was ich will es wird nie ein CronJob erstellt den ich unter Einstellungen->Grundeinstellungen->System->Cronjobs sehe. Wie bringt man den das Plugin dazu die XML einzulesen?