hackbardhackbard MemberComments: 2 Received thanks: 0 Member since: March 2017 edited March 2017

Moin,

ich erstelle gerade mein erstes Shopware Plugin und hoffe ihr könnt mir helfen.

Ich habe im Backend unter dem Hauptmenüpunkt "Artikel" ein Punkt "Verkaufsargumente" angelegt.

Dies funktioniert soweit auch einwandfrei:

Nun habe ich im Backend unter den Artikeln ein neues Attribut hinzugefügt:


    private function createArticleAttribute() {
        /** @var CrudService $service */
        $service = $this->container->get('shopware_attribute.crud_service');
        $service->update('s_articles_attributes', 'selling_arguments', TypeMapping::TYPE_MULTI_SELECTION, [
            'label' => 'Verkaufsargumente',
            'entity' => 'SellingArguments\Models\Argument',
            'displayInBackend' => true,
            'custom' => true,
                ]
        );
    }

 

Allerdings spuckt er nun im Backend immer den Wert "null" aus und nicht den der Bezeichnungen (Displayname würde mir reichen).


 

Ich hoffe ihr könnt mir dazu helfen.
Grüße Benjamin

 

Model:

<?php

namespace SellingArguments\Models;

use Doctrine\ORM\Mapping as ORM;
use Shopware\Components\Model\ModelEntity;

/**
 * @ORM\Entity(repositoryClass="Repository")
 * @ORM\Table(name="zg_sellingarguments_argument")
 */
class Argument extends ModelEntity {

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var time
     * 
     * @ORM\Column(name="time", type="datetime", nullable=false)
     */
    private $time;

    /**
     * @var string
     * 
     * @ORM\Column(name="cssclassname", type="string", nullable=false, length=25)
     */
    private $cssclassname;

    /**
     * @var string
     * 
     * @ORM\Column(name="displayname", type="string", nullable=false, length=255)
     */
    private $displayname;

    public function __construct() {
        $this->time = new \DateTime();
    }

    public function getId() {
        return $this->id;
    }

    public function getTime() {
        return $this->time;
    }

    public function getCssclassname() {
        return $this->cssclassname;
    }

    public function getDisplayname() {
        return $this->displayname;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function setTime($time) {
        $this->time = $time;
    }

    public function setCssclassname($cssclassname) {
        $this->cssclassname = $cssclassname;
    }

    public function setDisplayname($displayname) {
        $this->displayname = $displayname;
    }

}

Repository:

<?php

namespace SellingArguments\Models;

use Shopware\Components\Model\ModelRepository;

class Repository extends ModelRepository
{
    public function getArgumentQuery()
    {
        $builder = $this->getQuestionQueryBuilder();
        
     
        return $builder->getQuery();
    }

    public function getQuestionQueryBuilder($articleId)
    {

        $builder = $this->getEntityManager()->createQueryBuilder()
            ->select(['cssclassname', 'displayname'])
            ->from(Argument::class, 'argument')
            ->leftJoin('argument.cssclassname', 'cssclassname')
            ->leftJoin('argument.displayname', 'displayname')
            ->where('article.id = :articleId')
            ->setParameter('articleId', $articleId);

        return $builder;
    }
}

Backend Controller:

<?php

use SellingArguments\Models\Argument;

/**
 * Backend controllers extending from Shopware_Controllers_Backend_Application do support the new backend components
 */
class Shopware_Controllers_Backend_SellingArguments extends Shopware_Controllers_Backend_Application {

    protected $model = 'SellingArguments\Models\Argument';
    protected $repository = 'SellingArguments\Models\Repository';
    protected $alias = 'argument';
    protected $filterFields = array('cssclassname', 'displayname');
    protected $sortFields = array('cssclassname', 'displayname');

    protected function getListQuery() {
        $builder = parent::getListQuery();

        return $builder;
    }

    protected function getDetailQuery($id) {
        $builder = parent::getDetailQuery($id);

        return $builder;
    }
}

 

Answers

  • hackbardhackbard MemberComments: 2 Received thanks: 0 Member since: March 2017

    ---=== UPDATE ===---

    Ich habe herausgefunden das wenn ich mein Attribut "displayname" einfach mal in "value" umbennen und das Plugin neu installiere der Text angezeigt wird!

    Also ist die Frage: Wo ändere ich das Mapping wenn dieser Aufruf kommt?

    /backend/EntitySearch/search?model=SellingArguments\Models\Argument

    {"success":true,"data":[{"id":1,"time":new Date(1489148800000),"cssclassname":"dfgdgdfg","value":"dsgfdgd"}],"total":1}

    Dort muss scheinbar value stehen und nen key möchte er bestimmt auch. Wie bringe ich ihm jetzt bei das er "displayname" als value rauswirft?

  • r.allensteinr.allenstein MemberComments: 10 Received thanks: 2 Member since: August 2015

    Note: The model must contain minimum one of the following fields to correctly display the item in the backend.

    • label
    • name
    • title
    • number
    • description
    • value

    If this is not done, the entry is displayed with the value null and works not properly.

     

    Siehe https://developers.shopware.com/developers-guide/attribute-system/#define-own-single-and-multi-selection

Sign In or Register to comment.