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;
}
}