Problemkatalog: Plugin Entwicklung

Hey Leute, bei nun ca. 20 entwickelten Plugins stoße ich immer wieder auf diese Problematiken:

  • Duplikat-Quelltexte

  • Locale Codes können nicht wirklich technisch genutzt werden

  • Plugins teilen sich die selben Custom Fieldsets

  • Ich kann Foundation Plugins einfach deinstallieren -> Shop kackt ab weil Dependencies nicht mehr gegeben sind

  • Datenbank Updates (Lieferanten, Zahlungsarten, Custom Fields, E-Mail templates) mega kompliziert

  • Auch Datenbank Updates: Es sollte für jede Entity eine Default ID geben

  • Es gibt keine Möglichkeit das Löschen/Bearbeiten von technischen Einträgen zu sperren -> habe ich bisher nur bei den CMS Seiten gesehen.

  • Wenn Shopwelten Elemente durch das Plugin generiert werden, dann müssen diese auch beim Deinstallieren des Plugins entfernt werden

  • Bei den meisten Entities sind keine technischen Namen vorhanden -> ich muss mir selbst eine feste ID für meine Entries bestimmen -> Fehlerquelle weil kein (INSERT IGNORE) via DAL möglich ist?!

  • Hauptproblem: Ich kann “Shopware\Core\Framework\Plugin” nicht erweitern das wäre aber nütlich, da ich immer wiederkehrende Funktionen gerne zusammenfasse und worauf meine anderen Plugins zurückgreifen können. So sieht z.B. dieser Funktionskatalog aus:

    container->get(Connection::class);

          foreach ($data as $item) {
              $shippingId = Uuid::fromHexToBytes(md5($item['technical_name']));
              $deliveryTimeId = $this->getAnyEntityId('delivery_time');
              $ruleId = $this->getAnyEntityId('rule');
    
              $connection->insert(
                  'shipping_method',
                  [
                      'id' => $shippingId,
                      'availability_rule_id' => $ruleId,
                      'delivery_time_id' => $deliveryTimeId,
                      'created_at' => (new \DateTime())->format(Defaults::STORAGE_DATE_TIME_FORMAT),
                  ]
              );
    
              $connection->insert(
                  'shipping_method_price',
                  [
                      'id' => Uuid::randomBytes(),
                      'shipping_method_id' => $shippingId,
                      'calculation' => 1,
                      'currency_id' => Uuid::fromHexToBytes(Defaults::CURRENCY),
                      'price' => 6.9,
                      'created_at' => (new \DateTime())->format(Defaults::STORAGE_DATE_TIME_FORMAT),
                  ]
              );
    
              foreach ($item['locale'] as $locale => $localeItem) {
                  $languageId = $this->getLanguageIdByLocale($locale);
    
                  $connection->insert(
                      'shipping_method_translation',
                      [
                          'shipping_method_id' => $shippingId,
                          'name' => $localeItem['name'],
                          'description' => $localeItem['description'],
                          'language_id' => $languageId,
                          'created_at' => (new \DateTime())->format(Defaults::STORAGE_DATE_TIME_FORMAT),
                      ]
                  );
              }
          }
      }
    
     ...
    

    }

 

Aber will nicht alles nur bemängeln :stuck_out_tongue: Sonst nen top System und super dokumentiert. Beschäftige mich jetzt intensiv seit 8 Monaten mit Shopware 6 und verstehe so langsam die Sinnhaftigkeit des Systems  Angry-Face

VG

  • Bei den meisten Entities sind keine technischen Namen vorhanden -> ich muss mir selbst eine feste ID für meine Entries bestimmen -> Fehlerquelle weil kein (INSERT IGNORE) via DAL möglich ist?!

=> upsert benutzen von der Repository

 

  • Hauptproblem: Ich kann “Shopware\Core\Framework\Plugin” 

=> Du könntest eine eigene Composer Dependency erstellen und diese verwenden. Das hier wird jedoch sehr anstregend, weil es kein globales Managment von Dependencies gibt. So könnte eine ältere Version deiner Dependency verwendet werden. 

 

1 „Gefällt mir“

@Shyim schrieb:

  • Bei den meisten Entities sind keine technischen Namen vorhanden -> ich muss mir selbst eine feste ID für meine Entries bestimmen -> Fehlerquelle weil kein (INSERT IGNORE) via DAL möglich ist?!

=> upsert benutzen von der Repository

 

  • Hauptproblem: Ich kann „Shopware\Core\Framework\Plugin“ 

=> Du könntest eine eigene Composer Dependency erstellen und diese verwenden. Das hier wird jedoch sehr anstregend, weil es kein globales Managment von Dependencies gibt. So könnte eine ältere Version deiner Dependency verwendet werden. 

 

Also eine Composer Dependency ist vorhanden, jedoch wird die Main Klasse des Plugins direkt nach dem Upload ausgeführt bevor die Dependency durch Composer geprüft wird -> Resultat sieht dann so aus:

Fatal error: Uncaught Error: Class 'MoorlFoundation\MoorlPlugin' not found in /var/www/html/custom/plugins/MoorlFormBuilder/src/MoorlFormBuilder.php:14 Stack trace: #0 /var/www/html/vendor/composer/ClassLoader.php(444): include() #1 /var/www/html/vendor/composer/ClassLoader.php(322): Composer\Autoload\includeFile('/var/www/html/c...') #2 [internal function]: Composer\Autoload\ClassLoader->loadClass('MoorlFormBuilde...') #3 /var/www/html/vendor/shopware/core/Framework/Plugin/KernelPluginLoader/KernelPluginLoader.php(273): spl_autoload_call('MoorlFormBuilde...') #4 /var/www/html/vendor/shopware/core/Framework/Plugin/KernelPluginLoader/KernelPluginLoader.php(115): Shopware\Core\Framework\Plugin\KernelPluginLoader\KernelPluginLoader->instantiatePlugins('/var/www/html') #5 /var/www/html/vendor/shopware/core/Kernel.php(133): Shopware\Core\Framework\Plugin\KernelPluginLoader\KernelPluginLoader->initializePlugins('/var/www/html') #6 /var/www/html/vendor/shopware/core/HttpKernel.php(133): Shopware\Core\Kernel->boot() #7 /var/www/h in /var/www/html/custom/plugins/MoorlFormBuilder/src/MoorlFormBuilder.php on line 14

 

Nachtrag:

Ist es geplant hierzu ein Confirm oder ähnliches im Backend Bereich anzubieten?

$context->keepUserData()

 

Kannst du das Plugin mal posten?

@Shyim‍

Klar gerne, hab den ursprungszustand wiederhergestellt und die builds erstellt. Das Phänomen tritt nur auf wenn man das Plugin hochlädt, ohne dass Foundation bereits auf dem System ist. Vllt kannst du damit etwas anfangen.

http://demo-shop.moorleiche.com/builds.zip

Erstell gern ein Issue. Wir hatten damals das Problem auch in Shopware 5. Hatten das dann gelöst, dass man das Plugin nicht hochladen kann, bis die Abhängigkeiten da sind.

Zurzeit passiert das nur beim Installieren, und das ist viel zu spät

1 „Gefällt mir“

@Shyim schrieb:

Erstell gern ein Issue. Wir hatten damals das Problem auch in Shopware 5. Hatten das dann gelöst, dass man das Plugin nicht hochladen kann, bis die Abhängigkeiten da sind.

Zurzeit passiert das nur beim Installieren, und das ist viel zu spät

Danke für den Hinweis, aktuell hilft mir das kaum weiter, da aufgrund dieses Fehlers meine Plugins bei der Prüfung abgelehnt werden. Ich sammle jedoch fleißig weiter und sobald in eurem Issuetracker etwas Luft ist - kann ich euch wieder mit Arbeit versorgen :smiley: VG