ExtJs Backend Module Model Storage

Hallo Shopware Community!

Ich würde gerne einen neuen Tab für die Detailansicht eines Artikels erstellen und mit eigenen Feldern befüllen. Die Idee dahinter ist es eine eigene Tabelle anzulegen und darin verschiedene Werte sowie die Relation zum Artikel zu speichern. Bisher konnte ich mit Müh und Not den Tab generieren lassen auch ein Feld konnte ich bereits implementieren jedoch ist dieses nicht mit den Models verknüpft? Wie kann ich ein Feld Item hinzufügen das auch gespeichert wird?

Meine aktuelle Implementation:

  1. ArticleSubscriber : Ich beginne mit einem Subscriber welcher den Event Enlight_Controller_Action_PostDispatch_Backend_Article erweitern soll:

    <?php namespace CustomerCanvas\Subscriber; use Enlight\Event\SubscriberInterface; class ArticleSubscriber implements SubscriberInterface { public static function getSubscribedEvents() { return [ 'Enlight_Controller_Action_PostDispatch_Backend_Article' => 'onArticlePostDispatch' ]; } public function onArticlePostDispatch(\Enlight\_Event\_EventArgs $arguments) { /\*\* @var \Shopware\_Controllers\_Backend\_Article $controller \*/ $controller = $arguments-\>getSubject(); $view = $controller-\>View(); $request = $controller-\>Request(); if ($request-\>getActionName() == 'index') { $view-\>extendsTemplate('backend/ccw2p\_editor/app.js'); } if ($request-\>getActionName() === 'load') { $view-\>extendsTemplate( 'backend/ccw2p\_editor/view/detail/window.js' ); } } }
  2. Article Detail Window (backend/ccw2p_editor_view/detail/window.js): Hier wird das Backend um den Tab erweitert:

    //{block name=„backend/article/view/detail/window“ append} Ext.define(‚Shopware.apps.CCW2PEditor.view.detail.Window‘, { override:‚Shopware.apps.Article.view.detail.Window‘, createMainTabPanel: function() { let me = this; let formTab = me.callParent(arguments); me.editorTab = Ext.create(‚Ext.container.Container‘, { title: ‚Web2Print‘, disabled: true, name: ‚ccw2p-tab‘, layout: ‚border‘ }); me.mainTab.insert(me.editorTab); return formTab; }, onStoresLoaded: function(article, stores) { let me = this; me.callParent(arguments); me.editorTab.add(me.createContainer()); me.editorTab.setDisabled(false); }, createContainer: function () { let me = this; return [{ xtype: ‚fieldset‘, margin: 10, title: ‚Editor‘, items: [me.createCustomContainer(), { xtype: ‚textfield‘, fieldLabel: ‚Front Page‘, name: ‚ccw2p-editor-front-page‘ }] }]; }, createCustomContainer: function() { return Shopware.Notification.createBlockMessage( ‚These configuration can only be stored once and will be locked after saving. So choose wisely and create a duplication of the article if necessary.‘, ‚notice‘ ); } }); //{/block}

In der Funktion createContainer wird dann der Container mit dem Inhalt befüllt. Aktuell wird eine Notifikation und ein Feld ausgeben - das Ganze sieht dann am Ende wie folgt aus:

  1. Das Doctrine ORM Model : Nachfolgend liste ich einmal das Doctrine Model welches zwar noch im Aufbau ist aber bereits das gewünschte Feld enthält:

    <?php namespace CustomerCanvas\Models; use Doctrine\ORM\Mapping as ORM; use Shopware\Components\Model\ModelEntity; /** * @ORM\Entity * @ORM\Table(name="ccw2p_article_editor_attributes") */ class EditorAttributes extends ModelEntity { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @ORM\Column(name="front_page", type="string", nullable=false) */ private $front_page; public function getId() { return $this->id; } public function getFrontPage() { return $this-\>front\_page; } public function setFrontPage($template) { $this-\>front\_page = $template; } }

Darin fehlt jedoch noch die Relation zum Artikel welcher im Feld article_id hinterlegt werden soll - diese Relation sollte ich hinbekommen.

Ich habe noch weitere Dateien hinzugefügt wie beispielsweise einen Controller und die App.js da diese jedoch nicht funktionieren poste ich diese einmal nicht. Nun muss ich irgendwie das Model definieren - wahrscheinlich in der App.js. Ausserdem brauche ich wahrscheinlich einen Controller und die Models der das Ganze speichert? Mein Ziel ist es ein Feld generieren zu lassen anhand des Models das ich übergebe und dieses dann in den Items des Tab contents darzustellen und zu speichern.

Da ich neu in der Entwicklung mit ExtJS bin freue ich mich über jeden Tipp und bin gerne bereit die Struktur anzupassen. Hoffe Ihr versteht mein Anliegen und freue mich auf Eure Rückmeldung!

Cheerio

Alexander Bösch