Plugin: Artikel laden im Cronjob - SW5.5

Moin,

folgende Aufgabenstellung: Ein Cronjob soll anhand von Ordernumber oder auch ID Daten (Hersteller, Artikelname, Bestellnummer, erstes Bild, Preis, Grundpreis, Link) zu einem Artikeldetail laden. Also im Prinzip ein Objekt wie $sArticle im Frontend.

Früher haben wir das so gelöst:

Shopware()->Modules()->Articles()->sGetArticleById($articleId);

Das geht ja an der Stelle leider nicht. Hat jemand eine Idee oder kann helfen? Ich bin dankbar für jede Anregung.

Beste Grüße aus Hamburg,
Marco

 

Push…

Der Zugriff auf die DI-Dienste sollte auch aus dem Cronjob heraus klappen.
Ich würde dir die Verwendung der Article Resource von Shopware empfehlen:

$resource = Shopware()->Container()->get('shopware.api.article');


// 1. Rückgabe a) als Instanz der Klasse \Shopware\Models\Article\Article
$resource->setResultMode(\Doctrine\ORM\AbstractQuery::HYDRATE_OBJECT);

// 1. Rückgabe b) als assoziatives Array
$resource->setResultMode(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY);



// 2. Filter a) Artikelnummer
$number = 'SW10001';
$product = $resource->getOneByNumber($number, [
    'language' => NULL,
    'considerTaxInput' => NULL,
]);


// 2. Filter b) Artikel-ID
$id = 1;
$product = $resource->getOne($id, [
    'language' => NULL,
    'considerTaxInput' => NULL,
]);

 

Schöner ist es natürlich via DependencyInjection:

services.xml:

MyCustomArticlePlugin\Subscriber\CronJobSubscriber.php:

articleResource = $articleResource;
    }

    /**
     * {@inheritdoc}
     */
    public static function getSubscribedEvents()
    {
        return [
            'Shopware_CronJob_MyCustomArticleJob' => 'onRun',
        ];
    }

    public function onRun(\Shopware_Components_Cron_CronJob $job)
    {
        //...

        // 1. Rückgabe a) als Instanz der Klasse \Shopware\Models\Article\Article
        $this->articleResource->setResultMode(\Doctrine\ORM\AbstractQuery::HYDRATE_OBJECT);

        // 1. Rückgabe b) als assoziatives Array
        $this->articleResource->setResultMode(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY);


        // 2. Filter a) Artikelnummer
        $number = 'SW10001';
        $product = $this->articleResource->getOneByNumber($number, [
            'language' => NULL,
            'considerTaxInput' => NULL,
        ]);


        // 2. Filter b) Artikel-ID
        $id = 1;
        $product = $this->articleResource->getOne($id, [
            'language' => NULL,
            'considerTaxInput' => NULL,
        ]);


        if(null !== $product) {

          //...

        }

    }
}