# Cronjob / Subshop

**URL:** <https://forum.shopware.com/t/cronjob-subshop/39518>\
**Category:** Programmierung\
**Created:** [2. September 2016 um 07:30 UTC](https://forum.shopware.com/t/cronjob-subshop/39518 "2016-09-02T07:30:04Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [2. September 2016 um 07:30 UTC](https://forum.shopware.com/t/cronjob-subshop/39518/1 "2016-09-02T07:30:04Z")

</div>

Hallo,

ich stehe im Moment auf dem Schlauch. Ich habe einen Cronjob über ein Plugin, welcher regelmässig ausgeführt wird.  
Über $this-\>Config() greife ich auf die Konfig zu.

Jetzt müsste ich den Vorgabe aber X mal machen, pro Subshop. Wie kann ich herausfinden wie viele Shops angelegt sind (außer s\_core\_shops abzufragen) und jeweils deren Config laden?

Danke für die Info.

Gruß Ottscho

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [2. September 2016 um 11:40 UTC](https://forum.shopware.com/t/cronjob-subshop/39518/2 "2016-09-02T11:40:51Z")

</div>

Erledigt

```
$repository = Shopware()->Container()->get('models')->getRepository('Shopware\Models\Shop\Shop');
$shop = $repository->getActiveById($shopId);
$shop->registerResources();
$config = $this->Config();

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [7. September 2016 um 10:03 UTC](https://forum.shopware.com/t/cronjob-subshop/39518/3 "2016-09-07T10:03:35Z")

</div>

Scheinbar gibt es hier Probleme mit SW \< 5.2

Kann das sein?

Es kommt die Meldung:&nbsp; **Fatal error** : Call to a member function registerResource() on null in **/var/www/clients/client1/web2/web/engine/Shopware/Models/Shop/Shop.php** on line **681**

Anhand Github kann ich jetzt nicht umbedingt erkennen, dass es da eine Änderung gab.

hat mir hierzu jemand einen Tipp?

&nbsp;

---

<div class="post-metadata">

**Author:** ![simkli](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/simkli/32/13124_2.png) [@simkli](https://forum.shopware.com/u/simkli)\
**Post date:** [7. September 2016 um 11:34 UTC](https://forum.shopware.com/t/cronjob-subshop/39518/4 "2016-09-07T11:34:36Z")

</div>

“Call to a member function registerResource() on null”. Also ist bei “$shop = $repository-\>getActiveById($shopId);” bereits etwas schiefgelaufen. Es wird dir ja eindeutig null statt einem Shop Model zurückgegeben. Prüfe doch mal was für eine $shopId du dort übergeben hast und ob ein&nbsp; **aktiver** &nbsp;Shop mit dieser ID überhaupt existiert. ( getActiveById gibt dir nämlich nur Shops zurück, die aktiv gesetzt sind!)

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [7. September 2016 um 11:36 UTC](https://forum.shopware.com/t/cronjob-subshop/39518/5 "2016-09-07T11:36:38Z")

</div>

Danke für die Rückmeldung.  
Das habe ich bereits gemacht. Die id ist die 1 (in meinem Test).

Diese werden per Query emittelt:

```
 SELECT id FROM s\_core\_shops WHERE main\_id is NULL AND active = 1

```

Der Code klappt unter SW5.2x aber bei SW 5.1x kommt dieser Fehler.

---

<div class="post-metadata">

**Author:** ![simkli](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/simkli/32/13124_2.png) [@simkli](https://forum.shopware.com/u/simkli)\
**Post date:** [7. September 2016 um 11:45 UTC](https://forum.shopware.com/t/cronjob-subshop/39518/6 "2016-09-07T11:45:46Z")

</div>

Ich glaube eher, dass es&nbsp;an deiner SW 5.1. Installation liegt. Wenn dir&nbsp;$repository-\>getActiveById($shopId) null zurückliefert gibt es den Shop nicht oder er ist nicht aktiv. Diese Funktion hat sich von 5.1 auf 5.2 nicht verändert. Du kannst ja mal folgendes probieren:

```
getActiveById($shopId);
if ($shop === null) {
   Shopware()->Debuglogger()->info("shopid",["shopid" => $shopId]);
}

```

und prüfen was die eingegebene Shop ID war, die null zurück lieferte. Danach mal in der Datenbank prüfen, was mit dem Shop los ist.

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [7. September 2016 um 12:03 UTC](https://forum.shopware.com/t/cronjob-subshop/39518/7 "2016-09-07T12:03:58Z")

</div>

Da ist soweit alles in Ordnung. 1 steht in der Variable.

Ich denke es liegt am Umfeld. Ich verwende den Code im Cronjob (Shopware\_Components\_Cron\_CronJob) um an die Plugin Config alle Shops zu gelangen.  
Evtl. geht dies hier erst am SW 5.2?

&nbsp;

---

<div class="post-metadata">

**Author:** ![simkli](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/simkli/32/13124_2.png) [@simkli](https://forum.shopware.com/u/simkli)\
**Post date:** [7. September 2016 um 13:15 UTC](https://forum.shopware.com/t/cronjob-subshop/39518/8 "2016-09-07T13:15:28Z")

</div>

Oh man. Mich&nbsp;hat die Zeile in deinem Codeausschnitt (&nbsp;$shop-\>registerResources(); ) verwirrt.&nbsp; ![Grin](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/1X/70033cde8e8ff79cfa538293ae71318d6f788423.png "Grin")&nbsp;. Der Fehler wird ja in der Shop.php selbst geworfen und nicht dort.

Es stimmt in Shopware 5.1. muss in der registerResources noch als Argument die Shopware Bootstrap ( Shopware()-\>Bootstrap() )&nbsp;mitgegeben werden.  
Ob dies allerdings einfach so in einem Cronjob funktioniert weiß ich auch nicht.&nbsp;

Du kannst folgendes nutzen um auf die Pluginkonfiguration der jeweiligen Subshops zuzugreifen:

```
getId(); // $this hier deine Plugin Bootstrap ggf. anpassen!

    $repository = $this->em->getRepository('Shopware\Models\Config\Form');
    $quB = $repository->createQueryBuilder('form');
    // Abfrage des Plugin Forms
    $quB->select(['form','elements', 'values'])
        ->leftJoin('form.elements','elements')
        // nur Werte abholen wenn sie dem entsprechenden Subshop zugewiesen sind!
        ->leftJoin('elements.values','values','WITH','values.shop = :shop')
        // wir wollen nur das Pluginformular
        ->andWhere('form.pluginId = :pluginId')
        ->setParameter('shop',$shopId)
        ->setParameter('pluginId',$pluginId);
    $query = $quB->getQuery();
    $form = $query->getOneOrNullResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
    
    // optional: Wir bauen uns ein schönes Key->Value Array
    $config = [];
    foreach($form['elements'] as $element) {
        $key = $element['name'];
        // zunächst benutzen wir den Defaultwert
        $value = $element['value'];

        // wenn es für den Subshop entsprechende Werte gibt wird dieser genommen
        if (!empty($element['values'])) {
            $value = $element['values'][0]['value'];
        }
        $config[$key] = $value;
    }
    return $config
}

```

Code nicht getestet!

Ich glaube, dass es eh nicht eine gute Idee im Cronjob mit&nbsp;Shop-\>registerResource aufzurufen nur um an die Konfiguration zu gelangen.

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [7. September 2016 um 15:52 UTC](https://forum.shopware.com/t/cronjob-subshop/39518/9 "2016-09-07T15:52:47Z")

</div>

Danke dir, werde ich testen.

Eine genrelle Info von Shopware zu dem Thema gibt es leider nicht. Oder ich habe es nicht gefunden.  
Meinen Code habe ich ebenfalls im Forum gefunden, als Lösung um an die Config pro Subshop zu kommen.

&nbsp;

---

<div class="post-metadata">

**Author:** ![simkli](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/simkli/32/13124_2.png) [@simkli](https://forum.shopware.com/u/simkli)\
**Post date:** [7. September 2016 um 16:35 UTC](https://forum.shopware.com/t/cronjob-subshop/39518/10 "2016-09-07T16:35:50Z")

</div>

Ok das hatte mich jetzt auch interessiert. Und da hab ich mal im [Quellcode nachgesehen](https://github.com/shopware/shopware/blob/5.2/engine/Shopware/Components/Plugin/Namespace.php#L176):

```
Collection()->getConfig($this->getName(), $shop);

```

Es kann doch so einfach sein. Allerdings habe ich das nicht ausprobiert. Es wäre cool du&nbsp;@ottscho‍ das mal ausprobierst und uns hier Feedback gibst.&nbsp; ![Wink](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/1X/b3785da0cbf2c8566cb535dcf55b2730b5224899.png "Wink")

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [7. September 2016 um 17:46 UTC](https://forum.shopware.com/t/cronjob-subshop/39518/11 "2016-09-07T17:46:35Z")

</div>

hi @simkli,

also unter SW 5.2.6 funktioniert es bestens. Ich teste es morgen noch unter SW 5.1.x und 5.0.x.  
Wenn es klappt ist das der kürzeste Weg um an die Config zu kommen.

Perfekt…

Könnte man ruhig beim Shopware Developer Bereich mit aufführen.  
&nbsp;

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [8. September 2016 um 06:31 UTC](https://forum.shopware.com/t/cronjob-subshop/39518/12 "2016-09-08T06:31:49Z")

</div>

SW 5.1 klappt es auch wunderbar 🙂

Besten Dank

---

<div class="post-metadata">

**Author:** ![t2oh4e](https://avatars.discourse-cdn.com/v4/letter/t/a5b964/32.png) [@t2oh4e](https://forum.shopware.com/u/t2oh4e)\
**Post date:** [8. September 2016 um 07:04 UTC](https://forum.shopware.com/t/cronjob-subshop/39518/13 "2016-09-08T07:04:47Z")

</div>

> [@ottscho schrieb:](https://forum.shopware.com/profile/284/ottscho "ottscho")
> 
> Könnte man ruhig beim Shopware Developer Bereich mit aufführen.

Der Developer Bereich für Shopware 5 ist komplett auf Github und kann von jedem ergänzt/korrigiert werden. Statt es hier irgendwo im Forum zu erwähnen wo es wieder untergeht&nbsp;einfach mal eintragen wenn dir irgendwas in der Doku fehlt. Der nächste der vor dem Problem steht wird sich freuen.

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [8. September 2016 um 07:22 UTC](https://forum.shopware.com/t/cronjob-subshop/39518/14 "2016-09-08T07:22:05Z")

</div>

ist eingefügt bzw warten auf den merge.

Danke

&nbsp;
