Es ist an sich ganz einfach bei der Installation oder des Updates seines Plugins auch gleich sich alle benötigten Freittextfelder anlegen zu lassen.
Hier ein kleines Beispiel aus meinem POS-Plugin:
public function install(InstallContext $context)
{
parent::install($context);
/** @var CrudService $service */
$service = $this->container->get('shopware_attribute.crud_service');
$list = $service->getList('s_user_attributes');
$balance = false;
$overdue = false;
/** @var ConfigurationStruct $item */
foreach ($list as $item){
if($item->getColumnName() == 'hpr_balance'){
$balance = true;
}
else if($item->getColumnName() == 'hpr_overdue'){
$overdue = true;
}
}
if(!$balance){
$service->update('s_user_attributes', 'hpr_balance', 'float',
[
'label' => 'Prepaid Guthaben',
'displayInBackend' => true,
]
);
}
if(!$overdue){
$service->update('s_user_attributes', 'hpr_overdue', 'boolean',
[
'label' => 'Guthaben überschreitbar',
'displayInBackend' => true,
]
);
}
}
Manchmal ist es nötig das Generieren der Doctrine Models selbst zu erzwingen. Das geht dann so:
Shopware()->Models()->generateAttributeModels(['s_user_attributes']);
Ich mache grundsätzlich, weil es doch einige Male nicht ganz von allein funktioniert hat.