Hallo zusammen,
ich habe mir ein Administration Modul entwickelt, mit dem ich Produkten Bilder von Pixxio zuweisen kann, ohne sie herunter zu laden. Jetzt möchte ich Thumbnails dafür generieren lassen.
Leider sind die Felder width&height bei media_thumbnail WriteProtected und das Feld media:thumbnailsRo ist nicht ApiAware - kann soweit ich weis also nicht durch die API beschrieben werden?
Kann mir hier evt. jemand sagen, ob ich das umgehen kann? Ich habe mir gedacht ich „überschreibe“ temporär die Einstellung:
// remove write protection
Shopware.EntityDefinition.get('media_thumbnail').forEachField((field, fieldName) => {
if(fieldName === 'width' || fieldName === 'height') {
field.flags.write_protected = null;
delete field.flags.write_protected;
}
})
// get sizes and save thumbnails
this.getThumbnailSizes().then((sizes) => {
let aSizes = []
sizes.forEach((size) => {
let MediaThumbnail = this.mediaThumbnailRepository.create()
MediaThumbnail.mediaId = media.id
MediaThumbnail.pixxio = true
MediaThumbnail.width = size.width
MediaThumbnail.height = size.height
this.mediaThumbnailRepository.save(MediaThumbnail, Context.api)
// Produce error 500 because of write protection
})
});
In PHP müsste ich die Daten dann abfangen und selbst irgendwie über ein Event speichern, oder die EntityDefinition überschreiben.
public function onControllerArguments(ControllerArgumentsEvent $event): void
{
$request = $event->getRequest();
$controller = $event->getController()[0];
if ($this->matcher instanceof RequestMatcherInterface) {
$parameters = $this->matcher->matchRequest($request);
} else {
$parameters = $this->matcher->match($request->getPathInfo());
}
if($controller instanceof ApiController && $parameters['entityName'] === 'media-thumbnail') {
// SAVE TUMBNAILS OR ORVERRIDE MediaThumbnailDefinition
}
}
Klingt das für euch gut, oder gibt es da einen besseren Weg?
Danke & LG
Sio