In Hauptartikeln wird in der Artikelnummer z.B. kein / akzeptiert. Will ich einen Artikel über die lokal genutzte API importieren wirft SW eine (recht ungenaue) Fehlermeldung aus. Ups! Ein Fehler ist aufgetreten! Die nachfolgenden Hinweise sollten Ihnen weiterhelfen. in Shopware/Components/Api/Resource/Article.php on line 236 Stack trace: #0 Shopware/Plugins/Local/Frontend/LoemImportExport/Bootstrap.php(233): Shopware\Components\Api\Resource\Article-\>create(Array) #1 Enlight/Event/Handler/Plugin.php(149): Shopware\_Plugins\_Frontend\_LoemImportExport\_Bootstrap-\>onRunLoemImportCronJob(Object(Shopware\_Components\_Cron\_CronJob)) #2 Enlight/Event/EventManager.php(194): Enlight\_Event\_Handler\_Plugin-\>execute(Object(Shopware\_Components\_Cron\_CronJob)) #3 Enlight/Components/Cron/Manager.php(228): Enlight\_Event\_EventManager-\>notifyUntil('Shopware\_CronJo...', Object(Shopware\_Components\_Cron\_CronJob)) #4 Shopware/Plugins/Default/Core/Cron/Cron.php(61): Enlight\_Components\_Cron\_Manager-\>runJob(Object(Enlight\_Components\_Cron\_Job)) #5 Enlight/Controller/Action.php(135): Shopware\_Controllers\_Backend\_Cron-\>indexAction() #6 Enlight/Controller/Dispatcher/Default.php(521): Enlight\_Controller\_Action-\>dispatch('indexAction') #7 Enlight/Controller/Front.php(214): Enlight\_Controller\_Dispatcher\_Default-\>dispatch(Object(Enlight\_Controller\_Request\_RequestHttp), Object(Enlight\_Controller\_Response\_ResponseHttp)) #8 Shopware/Bootstrap.php(79): Enlight\_Controller\_Front-\>dispatch() #9 Enlight/Application.php(192): Shopware\_Bootstrap-\>run() #10 shopware.php(75): Enlight\_Application-\>run() #11 {main}
Wie kann man Sonderzeichen wie z.B. / in der Artikelnummer zulassen?
Hallo, die Regeln für den Aufbau der Artikelnummer sind in engine/Shopware/Models/Article/Detail.php definiert. /\*\* \* @var string $number \* @Assert\NotBlank \* @Assert\Regex("/^[a-zA-Z0-9-\_.]+$/") \* \* @ORM\Column(name="ordernumber", type="string", nullable=false, unique = true) \*/ private $number = '';
Man müsste also aus @Assert\Regex("/^[a-zA-Z0-9-_.]+/") z.B. @Assert\Regex("/^[a-zA-Z0-9-\_.\/]+/") machen um einen Slash zu erlauben - oder du entfernst die Validierung komplett. Du müsstest allerdings dann testen, ob die verschiedenen Webbrowser die Sonderzeichen korrekt maskieren / kodieren, wenn du etwas in den Warenkorb legst.
Ach ja, da steckt die Validierung…Danke! Die ersten Tests in diversen IEs, aktuellem Chrome, FF und Safari auf PC waren schonmal erfolgreich. Updatesicher kriegt man das aber nicht hin, oder? Das Backend-Template (/templates/_default/backend/article/view/detail/base.js) wurde - natürlich im eigenen Template - auch angepasst, so dass man im Backend auch noch etwas unabhängig vom Import ändern kann ohne dass die Nummer bemängelt wird.
Also mit der Änderung im Backend Template geht es dass ich im Backendtemplate die SKUs mit / und + darstelle. Aber wenn ich den Import fahre unter Inhalte / Import-Export dann wirft der bei Verwendung von / einen Fehler “invalid ordernumber”. Allerdings habe ich den Regex Bereich von der Detail.php komplett entfernt um sicher zu gehen. Any Ideas?
Im Controller für den Import/Export (engine\Shopware\Controllers\Backend\ImportExport.php) steht noch eine Prüfung im CSV-Import, die unabhängig vom Model arbeitet (Zeile 2355 ,SW 4.1.2) if(preg\_match('/[^a-zA-Z0-9-\_.]/', $articleData['ordernumber']) !== 0) {
Die dürfte den Fehler auswerfen. Da müsstest du die RegEx anpassen. Ist nicht updatesicher, wenn du das da direkt änderst.
Hey, super, also das klappt wunderbar so. Habe nun auch + und so drin. Vielen Dank!
Ach noch was… akutell ist es nicht updatesicher - das stimmt. Könnte man mittels Plugin nicht das Model und den Controller überschreiben? Dann könnte man für diesen Fall ein Plugin erstellen, macht doch Sinn oder?
Ja, das kann man. Ich habe jetzt nicht genau reingesehen, aber man wird die ganze Funktion überschreiben müssen. Solange sich die Funktion im SW-Standard nicht ändert ist das updatesicher, ab dann fehlen einem die Änderungen von SW in der eigenen Funktion bzw. muss man die dann nochmal anpassen.