sGetArticleDetailById() unter Shopware_Components_Cron_Cron

Hallo Community! Ich habe eine Frage zu CronJobs. Ich benutze einen eigenen CronJob, der ab und an bestimmte Artikel an E-Mailempfänger schickt. In der Version 3.5 habe ich hier über die Funktion Shopware()->Modules()->Articles()->sGetArticleById($articleId) ganz einfach alle Infos bekommen. Nun wollte ich diesen CronJob in SW4 übernehmen, doch ich bekomme beim aufruf von Shopware()->Modules()->Articles()->sGetArticleById($article[‚articleID‘]) immer die Fehlermeldung ‚Resource „Shop“ not found failure in Enlight/Bootstrap.php on line 261‘ Der CronJob läuft unter der Funktion public static function onCronJobNews((Shopware_Components_Cron_CronJob $job) {} Würde mich über Hinweise sehr freuen! LG, Markus

Ich “glaube” dass der cronjob außerhalb des frontends läuft und die angesprochene Methode für die Abfrage der Übersetzung den aktuellen Shop braucht. Hier solltest du die Artikel lieber über die API lesen. Viele Grüße Gesendet von meinem iPhone mit Tapatalk

Hi! Das Problem ist, das über die REST-API Article-Ressource nicht alle Daten die diese Funktion ausgibt bekomme, wie etwa den SEO-Link zum Artikel, oder die Bilderpfade, … das ist relativ mühsam. Ich behelfe mir nun mit einer Ajax-Action in einem eigenen Controller, der mir sGetArticleDetailById() aus dem Shop heraus aufrufen kann und die Daten per JSON an das CronScript zurückliefert. War die schnellste Lösung.

Woah grauenhafter Umweg :confused: aber wohl leider die einzige Methode um an die vollständigen Daten zu kommen… Viele Grüße Gesendet von meinem iPhone mit Tapatalk

Ja ist leider so. Ich kapiere einfach nicht wieso die neue API so geizig mit Daten umgeht.

In diesem fall würde ich aber auch eher die API erweitern und evtl auf verfügbare Methoden von sarticles zurück greifen. Viele Grüße Gesendet von meinem iPhone mit Tapatalk

Hi, die getOne-Methode der API ist jetzt nicht direkt “sparsam” mit Daten, da wird schon sehr viel ausgelesen. :slight_smile: Wenn dir da noch Sachen fehlen, kannst du gerne ein Ticket einstellen, wir sind an solchen Rückmeldungen sehr interessiert. Du kannst in SW4 auf viele Core-Sachen nicht direkt zugreifen, weil die einen Shop benötigen - und den gibt es im Backend ja nicht. Du kannst dir aber einen Shop instantiieren: /\*\* @var $repository \Shopware\Models\Shop\Repository \*/ $repository = Shopware()-\>Models()-\>getRepository('Shopware\Models\Shop\Shop'); $shop = $repository-\>getActiveById($shopId); $shop-\>registerResources(Shopware()-\>Bootstrap()); Das ist jetzt nichts, was ich ohne Not machen würde - aber prinzipiell eine Möglichkeit. Wenn möglich empfehlen wir auch eher die sGetPromotionById für solche Anfragen - an der sGetArticleById hängen u.U. noch ein paar Statistiken, das habe ich gerade nicht so genau im Kopf. lG Daniel