Operatore Mappatura
L'operatore custom può essere utilizzato quando si ha necessità di trasformare un singolo campo, come ad esempio estrarre solo l'unità di misura da un campo quantity value.
Per creare un operatore custom per elaborare il campo da sincronizzare è necessario:
- Estendere la classe astratta
Sintra\SyncBundle\Service\CustomOperatorFieldClassProvider\AbstractCustomOperatorFieldProvider - Registrarla come servizio
Esempio di operatore custom:
<?php
namespace Sintra\SyncBundle\Service\CustomOperatorFieldClassProvider;
use Pimcore\Model\DataObject\Data\QuantityValue;
use Pimcore\Model\DataObject\SalesChannel;
use Pimcore\Model\DataObject\SalesChannelMapping;
use Sintra\SyncBundle\Exception\InvalidCustomOperatorTypeException;
use Symfony\Component\DependencyInjection\Attribute\AutoconfigureTag;
#[AutoconfigureTag(self::CUSTOM_OPERATOR_FIELD_CLASS_KEY)]
class QuantityValueExtractUnit extends AbstractCustomOperatorFieldProvider
{
public function getPrettyName(): string
{
return 'Quantity Value → Only unit';
}
public function getCustomOperatorFieldResult(SalesChannel $saleChannel, SalesChannelMapping $channelMapping, mixed $fieldValue): string
{
if (empty($fieldValue)) {
return '';
}
if (!$fieldValue instanceof QuantityValue) {
throw new InvalidCustomOperatorTypeException("Invalid value for custom operator {$this->getPrettyName()},
the value is not an instance of QuantityValue");
}
return $fieldValue->getUnit()->getAbbreviation() ?? '';
}
}
informazioni
Per mantenere armonia nel front-end è preferibile che getPrettyName() ritorni i valori separati da freccia Quantity Value → Only unit.
Una volta fatto questo sarà disponibile nella select all'interno del SalesChannelMapping.

Operatori disponibili
Elenco dei data transformer selezionabili nel Data Transform della mappatura. L'ordine è quello della select.
| Operatore | Trasformazione |
|---|---|
Asset → Url string | URL pubblico dell'asset |
Boolean → Integer | true, 1, yes, on → 1, altrimenti 0 |
Color → Trim last 2 chars from hex color | #RRGGBBAA → #RRGGBB. Se il risultato non è un hex a 6 caratteri, stringa vuota |
Comma-separated String → Array | a, b, c → array ["a", "b", "c"] (spazi rimossi, valori vuoti esclusi) |
Comma-separated String → Encoded Array | a, b, c → stringa JSON ["a","b","c"]. Se non è una stringa → [] |
Empty Product 404 Handle → Sales Channel Default 404 Handle | Se il valore è vuoto, usa il Default 404 Handle del SalesChannel |
Int/string → Boolean | Valore non vuoto → true, vuoto → false |
Multiselect → Array string escape | a,b → stringa JSON ["a","b"] |
Null → Empty string | null → stringa vuota; gli altri valori restano invariati |
Quantity Value → Only unit | Solo l'abbreviazione dell'unità, es. kg |
Quantity Value → Only value | Solo il valore numerico, senza unità |
Quantity Value → String | Valore e unità, es. 10 kg |
String → Capitalize First ≥ 3.23.1 | seta foulard → Seta foulard. Solo il primo carattere diventa maiuscolo |
String → Lower String | Seta Foulard → seta foulard. Se non è una stringa, stringa vuota |
String → Title Case ≥ 3.23.1 | seta foulard → Seta Foulard. Iniziale maiuscola su ogni parola |
String/Int/Bool -> Array | Avvolge il valore in un array, es. seta → ["seta"] |
Timestamp → Date (YYYY-MM-DD) | Timestamp intero → 2026-10-26. Se non è un intero → null |
Timestamp → Date (YYYY-MM-DDTHH:MM:SS) | Timestamp intero → 2026-10-26T09:12:00. Se non è un intero → null |