mkl1525mkl1525 MemberComments: 148 Received thanks: 23 Member since: February 2014 edited April 2015
Hallo,

ich schaue mir gerade die Backendentwicklung an. Ich hangele mich mittels http://wiki.shopware.com/Shopware-Backe ... 2_871.html an SwagProduct entlang. Das heruntergeladene Plugin funktioniert bei mir im Testshop wie erwartet. Wenn ich aber zusätzlich z.B. die Spalte notifications aus s_articles ausgeben will komme ich leider seit einigen Stunden keinen Schritt weiter.

Ich habe Models/Product/Product.php um die notification-Variable + get + set erweitert. Trotzdem wird bei der Installation die Tabelle s_product ohne notification-Spalte angelegt. Muss ich noch etwas anderes dafür anfassen? Komplettes Model unter http://pastebin.com/6WgwjwCZ

Aus lauter "Verzweiflung" habe ich testhalber die createDate-Definition entfernt. Danach kann ich das Plugin nicht mehr installieren, Fehlermeldung: "Unable to install, got exception: Property Shopware\CustomModels\Product\Product::$createDate does not exist" - grep meint, das kein createDate mehr im ganzen Plugin-Verzeichnis vorkommt. Woher nimmt Shopware es dann? Gibt es noch eine Beziehung die ich übersehen habe?

Gruß
Mario

Comments

  • mkl1525mkl1525 MemberComments: 148 Received thanks: 23 Member since: February 2014
    Ein Hoch auf xdebug und nieder mit dem Cache! ;)

    Mittels des Debuggers habe ich herausgefunden, das der Cache das Model scheinbar noch vorgehalten hat. Nach Deaktivierung des Caches im Backend hat es jetzt problemlos funktioniert. Wie unter http://wiki.shopware.com/Shopware-Backe ... ml#Vorwort angegeben sollte man bei der Backend-Entwicklung in der config.php den Cache deaktivieren.

    Die config.php sollte dann so aussehen (Datenbankdaten natürlich anpassen):
    <?php return array (
      'db' =>
      array (
        'host' => '192.168.2.106',
        'port' => '3306',
        'username' => 'shopware',
        'password' => 'xxx',
        'dbname' => 'shopware',
      ),
    
      'front' =>
      array (
        'noErrorHandler' => true,
            'throwExceptions' => true
      ),
    
      'template' =>
      array (
        'forceCompile' => true
      ),
    
      'model' =>
      array(
        'cacheProvider' => 'Array'
      ),
    
      'cache' =>
      array(
        'backend' => 'Black-Hole',
        'backendOptions' => array(),
        'frontendOptions' => array('write_control' => false),
      ),
    );
    
    Und da es einiges an Zeit gekostet hat, die Lösung wie man eine weitere Spalte, hier notifications, ausgibt gleich mit anbei:

    In der Bootstrap.php muss in der Methode addDemoData der SQL-Query zweimal um notfication erweitert werden:
    $sql = "
                INSERT IGNORE INTO s_product (id, name, active, description, descriptionLong, lastStock, createDate, notification)
                SELECT
                    a.id,
                    a.name,
                    a.active,
                    a.description,
                    a.description_long as descriptionLong,
                    a.laststock as lastStock,
                    a.datum as createDate,
                    a.notification
                FROM s_articles a
            ";
    
    In Models/Product/Product.php muss die Variable gesetzt und die get- und set-Methoden hinzugefügt werden:
    /**
         * @var integer $notification
         *
         * @ORM\Column(type="integer", nullable=false)
         */
        private $notification = false;
    
        /**
         * @param int $notification
         */
        public function setNotification($notification)
        {
            $this->notification = $notification;
        }
    
        /**
         * @return int
         */
        public function getNotification()
        {
            return $this->notification;
        }
    
    
    Als letztes noch in Views/backend/swag_product/model/product.js die neue Spalte ergänzen:
    fields: [
            { name : 'id', type: 'int', useNull: true },
            { name : 'name', type: 'string' },
            { name : 'active', type: 'boolean' },
            { name : 'createDate', type: 'date' },
            { name : 'description', type: 'string', useNull: true },
            { name : 'descriptionLong', type: 'string', useNull: true },
            { name : 'lastStock', type: 'boolean' },
            { name : 'notification', type: 'integer' }
        ]
    
    Danach das Plugin installieren und aktivieren. Das sollte es gewesen sein.

    Gruß
    Mario
Sign In or Register to comment.