# \[GELÖST\] Hersteller Modul um Checkbox erweitern

**URL:** <https://forum.shopware.com/t/gelost-hersteller-modul-um-checkbox-erweitern/12491>\
**Category:** Shopware 3.5\
**Tags:** programming\
**Created:** [4. April 2013 um 11:29 UTC](https://forum.shopware.com/t/gelost-hersteller-modul-um-checkbox-erweitern/12491 "2013-04-04T11:29:04Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![eins23](https://avatars.discourse-cdn.com/v4/letter/e/bc8723/32.png) [@eins23](https://forum.shopware.com/u/eins23)\
**Post date:** [4. April 2013 um 11:29 UTC](https://forum.shopware.com/t/gelost-hersteller-modul-um-checkbox-erweitern/12491/1 "2013-04-04T11:29:04Z")

</div>

Hallo zusammen, ich versuche seit Stunden das Hersteller Modul im Backend um ein weiteres Attribut (Checkbox) zu erweitern. Bin jetzt an dem Punkt dass ich im „Hersteller Editieren“-Fenster meine Checkbox angezeigt bekomme die Änderunge an dieser aber leider nicht gespeichert wird (Firebug sagt bei „action“:„updateSupplier“ leider „attribute“:null) Bootstrap.php ` public function install() { $metaDataCache = Shopware()-\>Models()-\>getConfiguration()-\>getMetadataCacheImpl(); $metaDataCache-\>deleteAll(); Shopware()-\>Models()-\>addAttribute( 's\_articles\_supplier\_attributes', 'e23', 'brand\_selector', 'tinyint(1)', false, 0 ); $metaDataCache = Shopware()-\>Models()-\>getConfiguration()-\>getMetadataCacheImpl(); $metaDataCache-\>deleteAll(); Shopware()-\>Models()-\>generateAttributeModels( array('s\_articles\_supplier\_attributes') ); $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Backend\_Supplier', 'postDispatchSupplier' ); return array('success' =\> true, 'invalidateCache' =\> array('backend', 'proxy')); } /\*\* \* backendmodul bei Aufruf erweitern \*/ public function postDispatchSupplier(Enlight\_Event\_EventArgs $args) { $args-\>getSubject()-\>View()-\>addTemplateDir( $this-\>Path() . 'Views/' ); //if the controller action name equals "load" we have to load all application components. if ($args-\>getRequest()-\>getActionName() === 'load') { $args-\>getSubject()-\>View()-\>extendsTemplate( 'backend/e23brandselector/supplier/model/attribute.js' ); $args-\>getSubject()-\>View()-\>extendsTemplate( 'backend/e23brandselector/supplier/view/main/edit.js' ); } }` Dazu die Erweiterung des Models (backend/e23brandselector/supplier/model/attribute.js): `//{block name="backend/supplier/model/attribute/fields" append} { name: 'e23\_brand\_selector', type: 'boolean', defaultValue: 0 }, //{/block}` Und die Erweiterung des Edit-Views (backend/e23brandselector/supplier/view/main/edit.js): `//{block name="backend/supplier/view/main/edit" append} Ext.override(Shopware.apps.Supplier.view.main.Edit, { getFormTopPart : function() { var me = this, fields = me.callParent(arguments); fields.push({ xtype : 'checkbox', name : 'attribute[eins23BrandSelector]', anchor : '95%', fieldLabel : 'Sichtbar im Brand Selector' }); return fields; } }); //{/block}` Wie gesagt, Erweiterung der s\_articles\_supplier\_attributes passiert, das Event wird richtig abgefangen, ich sehe meine CHeckbox im Edit-View des Herstellers: aber leider wird nichts gespeichert, die Checkbox steht immer auf false. Vielleicht kann mir jemand weiterhelfen, die diversen „Hersteller erweitern“-Themen hier im Forum haben mich bis hierher gebracht jetzt aber nicht mehr weiter… Gruß und Danke schon mal, Christian

---

<div class="post-metadata">

**Author:** ![Stefan\_Hamann](https://avatars.discourse-cdn.com/v4/letter/s/5e9695/32.png) [@Stefan\_Hamann](https://forum.shopware.com/u/Stefan_Hamann)\
**Post date:** [4. April 2013 um 11:53 UTC](https://forum.shopware.com/t/gelost-hersteller-modul-um-checkbox-erweitern/12491/2 "2013-04-04T11:53:21Z")

</div>

Kannst du mal folgende Dinge überprüfen? [list] [\*] Werden die Daten (True/False) der Checkbox korrekt an den Controller übertragen beim Speichern ? Stehen die also im Post-Request?[/\*] [\*] Werden die Daten in der Datenbank-Tabelle gespeichert und ggf. nur nicht korrekt wieder ausgelesen?[/\*] [\*] Ist das Hersteller-Attribut-Model im Filesystem korrekt / aktuell ? Siehe /engine/Shopware/Models/Attribute/Supplier.php[/\*][/list]

---

<div class="post-metadata">

**Author:** ![eins23](https://avatars.discourse-cdn.com/v4/letter/e/bc8723/32.png) [@eins23](https://forum.shopware.com/u/eins23)\
**Post date:** [4. April 2013 um 14:46 UTC](https://forum.shopware.com/t/gelost-hersteller-modul-um-checkbox-erweitern/12491/3 "2013-04-04T14:46:23Z")

</div>

Hallo Stefan, danke für den schnellen Beistand! Soweit ich sehe werden die Daten nicht an den Controller übergeben… Post Request beim speichern unchecked: [code]{„success“:true,„data“:{„module“:„backend“,„controller“:„supplier“,„action“:„updateSupplier“,"\_dc":„1365077109464“,„id“:5,„name“:„Access Oires Sisters“,„count“:0,„image“:„media/image/accessoires.png“,„media-manager-selection“:"",„link“:"",„description“:"

Access Oires Sisters Beschreibung",„articleCounter“:0,„attribute“:null}[/code] Post Request beim speichern checked: [code]{„success“:true,„data“:{„module“:„backend“,„controller“:„supplier“,„action“:„updateSupplier“,"\_dc":„1365077179588“,„id“:5,„name“:„Access Oires Sisters“,„count“:0,„image“:„media/image/accessoires.png“,„media-manager-selection“:"",„link“:"",„description“:"

Access Oires Sisters Beschreibung",„articleCounter“:0,„attribute“:null}}[/code] Sollten die Daten nicht bei „attribute“ auftauchen? Infolge dessen wird natürlich auch nichts in die Datenbank geschrieben. Ich finde unter deinem angegebenen Pfad (/engine/Shopware/Models/Attribute/) in meiner Installation kein File „Supplier.php“, aber ein File „ArticleSupplier.php“ welches für mich auch korrekt aussieht. ArticleSupplier.php [code]\<?php /\*\*

- Shopware 4.0  
…  
\*/

namespace Shopware\Models\Attribute;  
use Shopware\Components\Model\ModelEntity,  
Doctrine\ORM\Mapping AS ORM,  
Symfony\Component\Validator\Constraints as Assert,  
Doctrine\Common\Collections\ArrayCollection;

/\*\*

- @ORM\Entity

- @ORM\Table(name=„s\_articles\_supplier\_attributes“)  
\*/  
class ArticleSupplier extends ModelEntity  
{

---

<div class="post-metadata">

**Author:** ![Stefan\_Hamann](https://avatars.discourse-cdn.com/v4/letter/s/5e9695/32.png) [@Stefan\_Hamann](https://forum.shopware.com/u/Stefan_Hamann)\
**Post date:** [4. April 2013 um 14:58 UTC](https://forum.shopware.com/t/gelost-hersteller-modul-um-checkbox-erweitern/12491/4 "2013-04-04T14:58:35Z")

</div>

Häng dein Zusatzfeld bitte mal direkt in das Supplier Model, also: //{block name=„backend/supplier/model/supplier/fields“ append} { name: ‚attribute[e23\_brand\_selector]‘, type: ‚boolean‘, defaultValue: 0 }, //{/block} Wg. dem PHP-Model, sorry hatte mich vertan, ArticleSupplier passt soweit.

---

<div class="post-metadata">

**Author:** ![eins23](https://avatars.discourse-cdn.com/v4/letter/e/bc8723/32.png) [@eins23](https://forum.shopware.com/u/eins23)\
**Post date:** [4. April 2013 um 15:20 UTC](https://forum.shopware.com/t/gelost-hersteller-modul-um-checkbox-erweitern/12491/5 "2013-04-04T15:20:49Z")

</div>

hmm, leider kein Erfolg, [code]{“success”:true,“data”:{“module”:“backend”,“controller”:“supplier”,“action”:“updateSupplier”,"\_dc":“1365081443425”,“e23\_brand\_selector”:false,“id”:5,“name”:“Access Oires Sisters”,“count”:0,“image”:“media/image/accessoires.png”,“media-manager-selection”:"",“link”:"",“description”:"

Access Oires Sisters Beschreibung",“articleCounter”:0,“attribute”:null}}[/code] “e23\_brand\_selector”:false ist jetzt im Post-Request, kommt aber nirgends an und wird immer als false übergeben egal ob angehakt oder nicht

---

<div class="post-metadata">

**Author:** ![Benjamin\_Cremer](https://avatars.discourse-cdn.com/v4/letter/b/a8b319/32.png) [@Benjamin\_Cremer](https://forum.shopware.com/u/Benjamin_Cremer)\
**Post date:** [4. April 2013 um 15:55 UTC](https://forum.shopware.com/t/gelost-hersteller-modul-um-checkbox-erweitern/12491/6 "2013-04-04T15:55:16Z")

</div>

Hallo, du verwendest im Model den Namen e23\_brand\_selector im Formular jedoch den Namen eins23BrandSelector. Des Weitern solltest du noch inputValue und uncheckedValue in der Checkbox mit angeben. Folgendes Codesnippet sollte dein Problem lösen: ` fields.push({ xtype : 'checkbox', name : 'attribute[e23\_brand\_selector]', anchor : '95%', fieldLabel : 'Sichtbar im Brand Selector', inputValue: 1, uncheckedValue: 0, }); ` Viele Grüße, Benjamin Cremer :shopware:

---

<div class="post-metadata">

**Author:** ![eins23](https://avatars.discourse-cdn.com/v4/letter/e/bc8723/32.png) [@eins23](https://forum.shopware.com/u/eins23)\
**Post date:** [4. April 2013 um 17:19 UTC](https://forum.shopware.com/t/gelost-hersteller-modul-um-checkbox-erweitern/12491/7 "2013-04-04T17:19:44Z")

</div>

Hallo Benjamin, erstmal dickes Lob an den Support hier im Forum echt der Hammer. Zu meinem Problem: Habe den Namen im Model und im Formular angeglichen wie du sagtest und Values angegeben. Ergebnis, ein SQL Fehler (siehe Bild) ansonsten sieht die Übergabe gut aus obwohl ich mich über supplierId=null etwas wundere darauf hin den $nullable Wert in der addAttribute-Methode meiner Bootstrap.php auf true gesetzt und nochmal getestet und siehe da: übergabe sieht gut aus, keine SQL Fehler mehr, Eintrag in der Datenbank wird geschrieben aber leider als NULL im e23\_brand\_selector ??? (siehe Bild) Ergebnis des getSuppliers Aufruf ist dann logischerweise „e23BrandSelector“:null Jetzt bin ich komplett verwirrt…

---

<div class="post-metadata">

**Author:** ![MaTe](https://avatars.discourse-cdn.com/v4/letter/m/51bf81/32.png) [@MaTe](https://forum.shopware.com/u/MaTe)\
**Post date:** [4. April 2013 um 18:23 UTC](https://forum.shopware.com/t/gelost-hersteller-modul-um-checkbox-erweitern/12491/8 "2013-04-04T18:23:13Z")

</div>

Hi ich hatte das selbe Problem… Versuch mal den type deines Attributes von boolean in type int zu setzen und dann auch die inputValue/uncheckedValue 1/0 nehmen und nicht true/false… das hat es bei mir verhauen Gruß Matze

---

<div class="post-metadata">

**Author:** ![eins23](https://avatars.discourse-cdn.com/v4/letter/e/bc8723/32.png) [@eins23](https://forum.shopware.com/u/eins23)\
**Post date:** [4. April 2013 um 22:23 UTC](https://forum.shopware.com/t/gelost-hersteller-modul-um-checkbox-erweitern/12491/9 "2013-04-04T22:23:30Z")

</div>

Hi Matze, danke für den Tip ich denke du hast Recht alle Felder/Attribute auf int umzustellen da ja in der Datenbank im Falles eines Booleans sowieso ein tinyint angelegt wird. Habe nun alles umgestrickt, meine Bootsrap legt das Attribut jetzt als tiniynt an: `Shopware()-\>Models()-\>addAttribute( 's\_articles\_supplier\_attributes', 'e23', 'brand\_selector', 'TINYINT(1)', true, 0 );` Mein model ist jetzt vom type:‘int’ mit dem defaultValue:0 `//{block name="backend/supplier/model/attribute/fields" append} { name: 'e23\_brand\_selector', type: 'int', defaultValue: 0 }, //{/block}` und mein EditView handelt input- und uncheckedValue mit 1 und 0: `//{block name="backend/supplier/view/main/edit" append} Ext.override(Shopware.apps.Supplier.view.main.Edit, { getFormTopPart : function() { var me = this, fields = me.callParent(arguments); fields.push({ xtype : 'checkbox', name : 'attribute[e23\_brand\_selector]', anchor : '95%', fieldLabel : 'Sichtbar im Brand Selector', inputValue : 1, uncheckedValue : 0 }); return fields; } }); //{/block}` Leider bleibt das Problem bestehen, dass zwar beim speichern des Herstellers (updateSupplier) alles korrekt (“e23\_brand\_selector”:1) übergeben wird: [code]{“success”:true, “data”:{“module”:“backend”,“controller”:“supplier”,“action”:“updateSupplier”, “\_dc”:“1365105548212”,“id”:5,“name”:“Access Oires Sisters”,“count”:0, “image”:“media/image/accessoires.png”,“media-manager-selection”:"", “link”:"",“description”:"

Access Oires Sisters Beschreibung", “articleCounter”:0, “attribute”:{“e23\_brand\_selector”:1,“id”:5,“supplierId”:null}}}[/code] jedoch in der Datenbank im e23\_brand\_selector Feld keine 1 ankommt sondern ein null. weswegen der nächste Aufruf des Herstellers (getSupplier) auch ein null liefert: [code]{“success”:true, “data”:[{“id”:5,“name”:“Access Oires Sisters”, “image”:“media/image/accessoires.png”,“link”:"", “description”:"

Access Oires Sisters Beschreibung", “attribute”:{“id”:5,“articleSupplierId”:5,“e23BrandSelector”:null}}], “total”:1}[/code] und da fällt mir gerade auf dass beim Absenden das attribute “e23\_brand\_selector” heisst beim Abrufen jedoch “e23BrandSelector” hmmm… Gruß Christian

---

<div class="post-metadata">

**Author:** ![eins23](https://avatars.discourse-cdn.com/v4/letter/e/bc8723/32.png) [@eins23](https://forum.shopware.com/u/eins23)\
**Post date:** [5. April 2013 um 00:04 UTC](https://forum.shopware.com/t/gelost-hersteller-modul-um-checkbox-erweitern/12491/10 "2013-04-05T00:04:00Z")

</div>

Danke an alle die mitgedacht haben! Jetzt funktioniert das. Das Datenbankfeld als tinyint anzulegen war wohl keine gute Idee von mir… Das Datenbankfeld in der Bootstrap.php ist nun also als Boolean angelegt, das Model ist um ein Feld vom type: ‚boolean‘ mit defaultValue: false erweitert und die Checkbox die den Edit View erweitert hat den inputValue : true sowie den uncheckedValue : false Hier noch die Codesnippets: addAttribute in der Bootstrap.php `Shopware()-\>Models()-\>addAttribute( 's\_articles\_supplier\_attributes', 'e23', 'brand\_selector', 'BOOLEAN', false, true );` Modelerweiterung in der attribute.js `//{block name="backend/supplier/model/attribute/fields" append} { name: 'e23BrandSelector', type: 'boolean', defaultValue: false }, //{/block}` Edit View Erweiterung in der edit.js `//{block name="backend/supplier/view/main/edit" append} Ext.override(Shopware.apps.Supplier.view.main.Edit, { getFormTopPart : function() { var me = this, fields = me.callParent(arguments); fields.push({ xtype : 'checkbox', name : 'attribute[e23BrandSelector]', anchor : '95%', fieldLabel : 'Sichtbar im Brand Selector', inputValue : true, uncheckedValue : false }); return fields; } }); //{/block}` Vielleicht hilfts ja noch jemandem. Grüße Christian

---

<div class="post-metadata">

**Author:** ![eins23](https://avatars.discourse-cdn.com/v4/letter/e/bc8723/32.png) [@eins23](https://forum.shopware.com/u/eins23)\
**Post date:** [25. Juni 2013 um 11:07 UTC](https://forum.shopware.com/t/gelost-hersteller-modul-um-checkbox-erweitern/12491/11 "2013-06-25T11:07:17Z")

</div>

Auf Nachfrage [hier](http://downloads.eins23.tv/e23BrandSelector.zip) das Plugin als Zip. Viel Spass damit Grüße Christian

---

<div class="post-metadata">

**Author:** ![7thsense](https://avatars.discourse-cdn.com/v4/letter/7/edb3f5/32.png) [@7thsense](https://forum.shopware.com/u/7thsense)\
**Post date:** [9. Juli 2013 um 11:43 UTC](https://forum.shopware.com/t/gelost-hersteller-modul-um-checkbox-erweitern/12491/12 "2013-07-09T11:43:30Z")

</div>

Hallo, Bei mir funktioniert alles, nur habe ich das Problem, dass das backend Modul nicht um die Checkbox erweitert wird… Bootstrap.php (onPost Methode) ` public function onPostDispatchSupplier(Enlight\_Event\_EventArgs $args) { $view = $args-\>getSubject()-\>View(); $view-\>addTemplateDir($this-\>Path() . 'Views/'); //if the controller action name equals "load" we have to load all application components. if ($args-\>getRequest()-\>getActionName() === 'load') { $view-\>extendsTemplate('backend/supplier/model/markenfilter/attribute.js'); $view-\>extendsTemplate('backend/supplier/view/main/markenfilter/edit.js'); } if ($args-\>getRequest()-\>getActionName() === 'index') { $view-\>extendsTemplate('backend/supplier/markenfilter\_app.js'); } }` markenfilter\_app.js `//{block name="backend/supplier/app" append} /\*\* \* Views \*/ //{include file="backend/supplier/view/main/markenfilter/edit.js"} //{/block}` attribute.js `//{block name="backend/supplier/model/attribute/fields" append} { name: 'SeventhSense\_markenfilter\_isActive', type: 'int', defaultValue: 1 }, //{/block}` edit.js `//{block name="backend/supplier/view/main/edit" append} Ext.override(Shopware.apps.Supplier.view.main.Edit, { getFormTopPart : function() { var me = this, fields = me.callParent(arguments); fields.push({ xtype : 'checkbox', name : 'attribute[SeventhSense\_markenfilter\_isActive]', anchor : '95%', fieldLabel : 'Aktiv', inputValue : 1, uncheckedValue: 0 }); return fields; } }); //{/block}` was habe ich hier vergessen? Alle Methoden werden korrekt aufgerufen und das speichern der Daten funktioniert ebenfalls; d.h. es werden alle Attribut Einstellungen korrekt geladen. Vielen Dank schonmals! Edit: hat sich erledigt siehe [http://jira.shopware.de/Widgets/Jira/?ticket=SW-5147](http://jira.shopware.de/Widgets/Jira/?ticket=SW-5147)

---

<div class="post-metadata">

**Author:** ![ShopFreelancer](https://avatars.discourse-cdn.com/v4/letter/s/fbc32d/32.png) [@ShopFreelancer](https://forum.shopware.com/u/ShopFreelancer)\
**Post date:** [6. Oktober 2013 um 15:30 UTC](https://forum.shopware.com/t/gelost-hersteller-modul-um-checkbox-erweitern/12491/13 "2013-10-06T15:30:18Z")

</div>

Ich hätte das Ganze dann im Frontend gerne noch ohne Select. Sonst kann ich mir ja das ganze Model-Gedöhns sparen, wenn ich dann am Ende doch wieder bei SQL-Queries lande. In dem Fall konnte ich nicht rausfinden, ob die -\>find() Methode erweiterbar ist, denn im Unterschied zu dem Schuhgrößen-Tutorial gibt es beim ArticleSupplier keine eigenen Builder-Methoden, die hookable wären. Im konkreten Fall ging es um eine Erweiterung der Herstellerdaten im Listing und ich hätte mich entweder an sGetSupplierById() in sArticles hängen können oder eben Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Listing erweitern. Ich habe das dann für das Listing so erweitert in meinem Plugin: $articleSupplierRepository = Shopware()-\>Models()-\>getRepository( ‚Shopware\Models\Attribute\ArticleSupplier‘ ); $articleSupplier = $articleSupplierRepository-\>findOneByArticleSupplierId($supplierId); $view-\>additionalSupplierImage = $articleSupplier-\>getMyTopmarkenImg();
