Hi, ich bin dabei ein Plugin zu schreiben was einen zweiten Beschreibungstext für die Produkte nachzurüsten. Plugin lässt sich auch installieren und aktivieren. In der Datenbank wird auch der richtige Eintrag angelegt. Allerdings wird die neue Textbox/TinyMCE nicht angezeigt. Ausschnitt bootstrap: public function install() { $metaDataCache = Shopware()-\>Models()-\>getConfiguration()-\>getMetadataCacheImpl(); $metaDataCache-\>deleteAll(); Shopware()-\>Models()-\>addAttribute( 's\_articles\_attributes', 'kaon', 'secondaryDescription', 'VARCHAR(256)', false, 0 ); $metaDataCache = Shopware()-\>Models()-\>getConfiguration()-\>getMetadataCacheImpl(); $metaDataCache-\>deleteAll(); Shopware()-\>Models()-\>generateAttributeModels( array('s\_articles\_attributes') ); $event = $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Backend\_Article', 'postDispatchArticle' ); return array('success' =\> true, 'invalidateCache' =\> array('backend', 'proxy')); }
Eigentlich würde ich gerne ein reines Textdatenfeld nehmen da das Ziel im Backend ja ein TinyMCE sein soll, allerdings bekomme ich bei allen anderen Werten ausser VARCHAR diverse Fehlermeldungen beim installieren. Gibt es kein “string”, oder “text” ? Model: //{block name="backend/article/model/article/fields" append} { name: 'secondaryDescription', type: 'string' }, //{/block}
View: //{block name="backend/article/view/detail" append} Ext.override(Shopware.apps.Article.view.detail.Window, { createDescriptionFieldSet: function() { var me = this, fields = me.callParent(arguments); fields.push({ xtype: 'tinymce', name: 'attribute[secondaryDescription]', margin: '0 0 15', cls: Ext.baseCSSPrefix + 'article-description-long', height: 100 }); return fields; } }); //{/block}
Hier bin ich mir nicht sicher ob ich das Feld korrekt hinzufüge, vermutlich auch hier der Fehler.
Hi, das ganze sieht schon sehr gut aus. Ein kleiner Fehler hat sich eingeschlichen: Model: //{block name=„backend/article/model/[color=red]article[/color]/fields“ append} { name: ‚secondaryDescription‘, type: ‚string‘ }, //{/block} Der Smarty Block im Artikel Attribute Model ist noch falsch gesetzt. Hier hat sich ein kleiner Flüchtigkeitsfehler eingeschlichen. Bitte ersetzte die „templates/_default/backend/article/model/attribute.js“ durch die Datei die ich beigefügt habe. Diese wird mit der Version 4.0.4 gefixt sein. Hier wurde der Smarty Block korrigiert. Danach kannst du in deinem Plugin den folgenden Blog überschreiben: //{block name="backend/article/model/[u][b][color=red]attribute[/color][/b][/u]/fields" append} { name: 'kaonSecondaryDescription', type: 'string' }, //{/block}
Ps.: Das Prefix beim hinzufügen der Spalten wird mit als Spaltennamen verwendet. Dein Attribute heißt daher: kaonSecondaryDescription
Danke für die Antwort, allerdings ist wohl irgendwo noch ein Fehler versteckt. Installation etc läuft immernoch problemlos, allerdings ist im Backend nichts vom neu angelegten Feld zu finden. Ich hänge die Quellcodes nochmal an inkl aller (wenn auch kleiner) Änderungen: Bootstrap: public function install() { $metaDataCache = Shopware()-\>Models()-\>getConfiguration()-\>getMetadataCacheImpl(); $metaDataCache-\>deleteAll(); Shopware()-\>Models()-\>addAttribute( 's\_articles\_attributes', 'kaon', 'SecondaryDescription', 'VARCHAR(256)', true, NULL ); $metaDataCache = Shopware()-\>Models()-\>getConfiguration()-\>getMetadataCacheImpl(); $metaDataCache-\>deleteAll(); Shopware()-\>Models()-\>generateAttributeModels( array('s\_articles\_attributes') ); $event = $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Backend\_Article', 'postDispatchArticle' ); return array('success' =\> true, 'invalidateCache' =\> array('backend', 'proxy')); } /\*\* \* Plugin uninstall method \* \* @return bool success \*/ public function uninstall() { Shopware()-\>Models()-\>removeAttribute( 's\_articles\_attributes', 'kaon', 'SecondaryDescription' ); $metaDataCache = Shopware()-\>Models()-\>getConfiguration()-\>getMetadataCacheImpl(); $metaDataCache-\>deleteAll(); Shopware()-\>Models()-\>generateAttributeModels( array('s\_articles\_attributes') ); return true; } /\*\* \* @param Enlight\_Event\_EventArgs $args \* @return string \*/ public function postDispatchArticle(Enlight\_Event\_EventArgs $args) { $assignedData = $args-\>getSubject()-\>View()-\>getAssign('data'); $articleData = $assignedData['article'][0]; $args-\>getSubject()-\>View()-\>addTemplateDir( $this-\>Path() . 'Views/' ); if ($args-\>getRequest()-\>getActionName() === 'loadStores') { $file = @fopen(dirname(\_\_FILE\_\_) . '/log.txt', 'w+'); fwrite($file, print\_r($articleData, true)); fclose($file); $args-\>getSubject()-\>View()-\>extendsTemplate( 'backend/SecondaryDescription/article/model/article.js' ); $args-\>getSubject()-\>View()-\>extendsTemplate( 'backend/SecondaryDescription/article/view/detail/secondaryDescription\_window.js' ); } }
secondaryDesription_window.js //{block name="backend/article/view/detail" append} Ext.override(Shopware.apps.Article.view.detail.Window, { createDescriptionFieldSet: function() { var me = this, fields = me.callParent(arguments); fields.push({ xtype: 'tinymce', name: 'attribute[kaonSecondaryDescription]', margin: '0 0 15', cls: Ext.baseCSSPrefix + 'secondary-article-description-long', height: 100 }); return fields; } }); //{/block}
Wie geht man bei der Entwicklung von einem Plugin eigentlich am besten vor in Sachen Debugging ? Wie hier, es wird nirgends eine Fehlermeldung geworfen. Im s_core_log wir nur vermeldet das Plugin Upload und installation erfolgreich waren.
Hallo, wenn das PlugIn fertig ist, hätte ich Interesse daran Gruß Dirk
[quote=„jensfiedler“] Wie geht man bei der Entwicklung von einem Plugin eigentlich am besten vor in Sachen Debugging ? Wie hier, es wird nirgends eine Fehlermeldung geworfen. [/quote] Ja, liebes Shopware-Team mit der Pluginentwicklung ist es momentan noch richtig problematisch. Wenn Ihr wenigstens wieder funktionierende Beispiele ins Wiki stellen könntet?
Hey, man könnte doch auch einfach eine Eigenschaftsgruppe erstellen, der man eine Option “Zweiter Beschreibungstext” zuweist. Oder spricht da etwas dagegen?
Hi, wie ich gesehen habe funktioniert das Plugin jetzt. Daher habe ich den Beitrag mal als gelöst markiert. Mit freundlichen Grüßen Oliver Denter
Nunja… es funktioniert nicht wirklich. Das ganze befindet sich noch in eurem Ticketsystem zu Klärung. Zwischenzeitlich gab es mal eine Version die soweit ging, nur hat die nichts gespeichert. Seitdem lässt sich das Plugin nicht mehr installieren, bringt beim Versuch sogar den Apache zum absturz (Sogar beim Cache leeren etc.).
Hi! Ich hab dieses Problem inzwischen für mich erfolgreich gelöst und meine Lösung in einem neuen Thread veröffentlicht, damit sich andere nicht erst durch diesen hier durchscrollen müssen… Gruß, Nico.
Wäre cool wenn du noch den Link zu deinem Thread posten würdest und Danke