Ajout d’attributs de produit par programmation au flux Data Exporter
Vous pouvez étendre les attributs de produit sans les enregistrer dans Adobe Commerce en créant un module externe pour ajouter les attributs pendant le processus de synchronisation des données.
Ajout d’attributs de produit
Créez un module externe qui ajoute un customer_attribute
à la classe Magento\CatalogDataExporter\Model\Provider\Product\Attributes
.
-
Mettez à jour le fichier de configuration d’injection de dépendance (
di.xml
) pour définir le module externe.code language-xml <type name="Magento\CatalogDataExporter\Model\Provider\Product\Attributes"> <plugin name="product_customer_attributes" type="Vendor\CatalogDataExporter\Model\Plugin\AddAttribute"/> </type>
-
Créez le module externe .
code language-php <?php declare(strict_types=1); namespace Vendor\CatalogDataExporter\Model\Plugin; use Magento\CatalogDataExporter\Model\Provider\Product\Attributes; class AddAttribute { /** * @param Attributes $subject * @param array $result * @param $arguments * @return array * @throws \Zend_Db_Statement_Exception */ public function afterGet(Attributes $subject, array $result, $arguments): array { $productIds = \array_column($arguments, 'productId'); foreach ($productIds as $productId) { $result[] = [ 'productId' => $productId, // "storeViewCode" must be specified for products where the customer attribute value should be set 'storeViewCode' => 'default', 'attributes' => [ // specify the customer attribute code 'attributeCode' => 'customer_attribute', // provide single or multiple values for the attribute 'value' => [ rand(41,43) ] ] ]; } return $result; } }
Une fois le module externe ajouté, les modifications sont synchronisées avec les services storefront connectés lors de la prochaine synchronisation planifiée. Pour envoyer immédiatement les mises à jour, utilisez la commande d’interface de ligne de commande suivante pour lancer manuellement le processus de synchronisation.
code language-none bin/magento saas:resync --feed=products
Déclarer les métadonnées d’attribut de produit personnalisé
Si vous créez dynamiquement un attribut de produit personnalisé et souhaitez l’utiliser pour l’affichage, la recherche ou le filtrage dans les services storefront, ajoutez les métadonnées d’attribut de produit pour configurer le comportement storefront.
-
Mettez à jour le fichier de configuration d’injection de dépendance (
di.xml
) pour définir le module externe pour les métadonnées d’attribut de produit.code language-xml <type name="\Magento\CatalogDataExporter\Model\Provider\ProductMetadata"> <plugin name="product_customer_attributes_metadata" type="Vendor\CatalogDataExporter\Model\Plugin\AddAttributeMetadata"/> </type>
-
Créez le module externe auprès du fournisseur suivant
\Magento\CatalogDataExporter\Model\Provider\ProductMetadata
.Vérifiez
ProductAttributeMetadata
dansvendor/magento/module-catalog-data-exporter/etc/et_schema.xml
pour les champs obligatoires.code language-php <?php declare(strict_types=1); namespace Vendor\CatalogDataExporter\Model\Plugin; use Magento\CatalogDataExporter\Model\Provider\ProductMetadata; class AddAttributeMetadata { /** * @param ProductMetadata $subject * @param array $result * @param $arguments * @return array * @throws \Zend_Db_Statement_Exception */ public function afterGet(ProductMetadata $subject, array $result, $arguments): array { $result[] = [ 'id' => '123', 'storeCode' => 'default', 'websiteCode' => 'base', 'storeViewCode' => 'default', // specify the customer attribute code - should be the same as used in the products attributes plugin 'attributeCode' => 'customer_attribute', // only product attributes are supported 'attributeType' => 'catalog_product', // specify the data type 'dataType' => 'int', 'multi' => false, 'label' => 'Customer Attribute', 'frontendInput' => 'select', 'required' => false, 'unique' => false, 'global' => true, 'visible' => true, 'searchable' => true, 'filterable' => true, // This value must be set to true to export it to the storefront services 'visibleInCompareList' => true, 'visibleInListing' => true, 'sortable' => true, 'visibleInSearch' => true, 'filterableInSearch' => true, 'searchWeight' => 1.0, 'usedForRules' => true, 'boolean' => false, 'systemAttribute' => false, 'numeric' => false, // specify the list of attribute options 'attributeOptions' => [ 'option1', 'option2', 'option3' ] ]; return $result; } }
Une fois le module externe ajouté, les modifications sont synchronisées avec les services storefront connectés lors de la prochaine synchronisation planifiée. Pour envoyer immédiatement les mises à jour, utilisez la commande d’interface de ligne de commande suivante pour lancer manuellement le processus de synchronisation.
code language-none bin/magento saas:resync --feed=productattributes