Weitere Preisinformationen bei Artikel

Ich möchte gerne eine weitere Spalte im Front sowie Backend bei den Produktpreisen hinzufügen. Aber irgendwie ist das ganze System entweder zu kompliziert aufgebaut oder ich bin einfach nur zu dumm… Genau hier sind die Einhängepunkte die ich benötige: [quote]

[/quote] Im Backend möchte ich eine weitere Tabellenspalte hinzufügen um für diesen Preis zusätzliche Informationen anzugeben, im Frontend muss das ganze dann auch dementsprechend direkt unter/neben dem Preis angezeigt werden. Im Backend weiß ich wohl dass ich irgendein Event registrieren muss damit ich eine ExtJS Datei inkludiert bekomme - Hier drüber erweiter ich ja dann einfach die UI, aber wie genau? Warum gibt es 5.000 Ordner und 5.000 Javascript Dateien ([color=gray]Views/backend/XXX/controller/main.js[/color], [color=gray]Views/backend/XXX/model/XXX.js[/color], [color=gray]Views/backend/XXX/store/main.js[/color], [color=gray]Views/backend/XXX/detail/XXX.js[/color], [color=gray]Views/backend/XXX/detail/window.js[/color], [color=gray]Views/backend/XXX/app.js[/color]) - Ich weiß zwar was OOP ist und mir sind auch Controller, Views und Models bekannt, aber muss das ganze auch für JS sein? Kann man das nicht auch über eine einzige File lösen? Wie finde ich nun die Events die ich selbst Hooken möchte? Noch eine andere Frage: Warum gibt es (die Antwort finde ich nicht) „3 Plugin Arten“? Core-Plugins mal bei Seite,… Wenn ich ein Plugin erstellen möchte was nur für’s Frontend ist, gut kann ich auch verstehen… Aber was nun wenn man ein Frontend UND Backend Plugin hat, was für beide Seiten gedacht ist? Teile ich es in den Ordnern zu Front- und Backend auf, dann gibt es eine Art „am Arschlecken“-Effekt: Das Plugin existiert zwei mal - Logisch, sind ja auch jeweils ein Backend und ein Frontend Plugin. Ich will aber eines entwickeln was für BEIDE Seiten gedacht ist und was auch nur EINMAL installiert werden muss - Kann mich da jemand aufklären?

Die Anzeige im Frontend habe ich nun beeinflussen können: public function install() { /\* Events :: Article \*/ $this-\>subscribeEvent('Enlight\_Controller\_Action\_PostDispatch\_Backend\_Article', 'onPostDispatchBackendArticle'); $this-\>subscribeEvent('Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Detail', 'onPostDispatchFrontendArticle'); return parent::install(); } /\* Events :: Article \*/ public function onPostDispatchFrontendArticle(Enlight\_Event\_EventArgs $args) { $controller = $args-\>getSubject(); $view = $controller-\>View(); Shopware()-\>Template()-\>addTemplateDir(dirname(\_\_FILE\_\_) . '/Views/'); $view-\>extendsTemplate('Frontend/Article/Price.tpl'); $view-\>assign('coins', 1337); } {block name="frontend\_detail\_data\_block\_price\_include" append} Coins #1 {/block} {block name='frontend\_detail\_data\_price\_info' append} COINS #2 {/block} {block name='frontend\_detail\_data\_price' append} COINS #3 {/block} {block name='frontend\_detail\_data\_pseudo\_price' append} COINS #4 {/block} Das ganze brauche ich dann später nur noch mit Inhalte füllen. Jetzt ist nur noch die Frage wie ich die Table erweitern kann. Wie/Woran erkenne ich dass eine Javascript-file an der richtigen Stelle geladen wurde? Scheint mir so als würde beim installieren die Files mit den Smarty-Comments “//{block…}” geparsed werden. Jedenfalls tut sich immer erst etwas wenn man das Plugin neu installiert - Ist beim development auch sehr zeitraubend, selbst wenn man die console nutzt! Ich glaub ich werde mir da eine eigene bash-file basteln die per exec einfach das Plugin neu installiert.

Leider konnte mir noch keiner eine Antwort geben. Ich sitze immer noch an der Price-Table fest.

  1. Ich habe dein Problem nicht so ganz verstanden. Was hast du vor und wo liegen konkret deine Probleme? 2. Die Plugin Ordner sind nur eine Richtlinie / Namenskonvention. Du kannst auch Plugins, die ausschließlich das Frontend betreffen in den Backend Ordner packen und dementsprechend benennen. Das Plugin darfst du -in jedem Fall- nur 1 mal hochladen und installieren. Viele Grüße

Wenn man ein Artikel erstellt oder bearbeitet gibt es dort eine Preistabelle (siehe Screenshot oben) - Hier möchte ich eine weitere Table-Column über ein Plugin hinzufügen, und ich weiß nicht welche Einhängepunkte ich hier nutzen muss. Kurz und Knapp: Neben den Artikel-Preis soll man dort auch hinzufügen wieviele Payback-Punkte man bekommt. Ich möchte dies in diesem Abschnitt unterbringen da man ja auch mehrere Preise angeben kann. Wenn ich dort z.B. nun eintrage: Von 1 bis 10 Artikel beträgt der Preis 1,00 EUR und man bekommt dafür 10 PayBack Punkte. Von 10 bis 50 Artikel beträgt der Preis 0,95 EUR und man bekommt dafür 100 PayBack Punkte.

Du kannst du s_articles_prices_attributes nutzen. Siehe als Einstiegspunkt: http://wiki.shopware.com/Schuhgr%C3%B6% … _1052.html Um die Preise um eine Spalte zu erweitern, müsstest du die Datei /templates/_default/backend/article/view/detail/prices.tpl anpassen. Viele Grüße

s_articles_prices_attributes hatte mir als Information gefehlt, da ich nirgendwo etwas dadrüber gefunden hatte, vielen Dank :slight_smile: Es gibt sogar eine Datenbank-Tabelle mit dem gleichen Namen - Diese wurd auch nun mit einer weiteren Datenspalte erweitert. Die Template-File /templates/_default/backend/article/view/detail/prices.tpl hatte ich bereits anfassen können (Siehe Beitrag posting.php?mode=reply&f=56&t=25610#pr111906). Ich habe nun folgende ExtJS-Templatefile gefunden: /templates/_default/backend/article/view/detail/prices.js Dies scheint ja das Template für die Preisliste zu sein. Ich habe jetzt probiert diese zu “erweitern”, komme aber zu keinem Ergebnis dass diese auch im Backend angezeigt wird. Ich habe das Tutorial was du verlinkt hast (http://wiki.shopware.com/Schuhgr%C3%B6% … _1052.html) als Vorlage genommen und jeweils die Werte ersetzt: //{block name="backend/article/view/detail/prices" append} //{namespace name="main"} Ext.define('Shopware.apps.Article.view.detail.Prices.PayBack', { override: 'Shopware.apps.Article.view.detail.Prices', getColumns: function() { var me = this; var columns = me.callParent(arguments); var columnSize = { header: '{s name=detail/price/PayBack}PayBack Punkte{/s}', dataIndex: 'coins', flex: 1 }; return Ext.Array.insert(columns, 8, [columnSize, columnColor]); } }); //{/block}

Woheyy, ich hab es geschafft! Fehler lag am Cache, den musste ich mal leeren - Kann man das irgendwie für’s development komplett deaktivieren? Also, nun wird unter der Preistabelle “PayBack Punkte” angezeigt - Wenn ich jedoch speichern möchte, wird nichts in die Tabelle s_articles_prices_attributes geschrieben, die Werte werden auch nach dem speichern aus der Liste wieder entfernt. Muss ich irgendwo noch ein Event definieren dass die Attribute speichert? Hier mal die ExtJS erweiterung für die Preistabelle: //{block name="backend/article/view/detail/prices" append} Ext.define('Shopware.apps.Article.view.detail.Prices.PayBack', { override: 'Shopware.apps.Article.view.detail.Prices', bulkLoad: true, getColumns: function() { var me = this; var columns = me.callOverridden(arguments); return Ext.Array.insert(columns, 3, [{ xtype: 'numbercolumn', header: '{s name=detail/price/payback}PayBack Points{/s}', dataIndex: 'attribute[coinsvalue]', editor: { xtype: 'numberfield', decimalPrecision: 2, minValue: 0 } }]); } }); //{/block}

Bis jetzt habe ich immer noch nicht herausgefunden warum das ganze weder gespeichert noch geladen wird. Wenn ich manuell in der Datenbank zum Artikel s_articles_prices_attributes die Punkte eintrage, sehe ich im Network-Inspector unter dem Ajax-Request den jeweiligen Wert stehen. Nur wird der weder eingetragen noch wird etwas gespeichert.

*push*

Ich Pushe das ganze hier noch einmal. Ich komme immer noch zu keinem Ergebnis, probiert habe ich schon so ziemlich alles. Ich möchte nochmals auflisten, was bereits funktioniert und was noch nicht geht. [color=green]1. Ich füge mit addAttribute() bei s_articles_prices_attributes einen neuen double-Wert hinzu. Dieser erscheint auch in der gleichnamigen Datenbank-Tabelle. [/color] [color=green]2. Durch PostDispatch für das Backend setze ich die ExtJS Dateien, die dann die Table-Columns im Artikel die Preistabelle erweitern.[/color] [color=red]3. Setze ich im Backend einen neuen Wert, wird dieser nicht in der Datenbank gespeichert. Im Ajax-Request/Response erscheint die Datenbank-Spalte mit einem NULL-Wert.[/color] [color=red]4. Setze ich in der Datenbank-Tabelle manuell den Wert und rufe dann den Artikel im Backend auf, erscheint der Wert auch im Ajax-Response - Dieser wird aber nicht in der Preistabelle gesetzt.[/color] Informationen oder gar Beispiele zu den Price-Attributes gibt es keine.