Le billet "Magento DataFlow - L'échange de données rendu flexible [Partie 1]" a permis d'introduire le concept global du framework d'échange de données implémenté dans Magento. Aujourd'hui nous allons voir les adapters par défaut implémentés dans le module Dataflow.
-
Définition d'un Adapter
Les adapters sont responsables de se connecter dans une ressource de données externe et de récupérer les données ou de sauver les données transmises dans la ressource. Pour ce faire tous les adapters implémentent l'interface Mage_Dataflow_Model_Convert_Adapter_Interface qui contient deux méthodes : load() et save(). Le concept d'échange de données introduit dans le module Dataflow utilise les adapters dans trois contextes :
- pour lire des données depuis une ressource - en utilisant la méthode load()
- pour sauver des données vers une ressource - en utilisant la méthode save()
- pour traiter une ligne analysée - comme défini par les variables du parser
Pour les deux premiers contextes d'utilisation, la définition XML ressemblera à cela :
<action type="dataflow/convert_adapter_io" method="load">
...
</action>L'élément "action" a deux attributs : "type" et "method". Le "type" définit quelle classe d'apdapter doit être utilisée par cette action. Il est défini par son alias. L'élément "method" définit quelle méthode de la classe de l'adapter doit être appelée. Comme précisé plus tôt, il existe deux méthodes par défaut : load et save. Les éléments fils de l'élément "action" définissent les paramètres utilisés lors de l'exécution de la méthode de l'adapter. Les paramètres sont définis comme dans l'exemple qui suit :
<action type="dataflow/convert_adapter_io" method="load">
<var name="type">file</var>
<var name="path">var/import</var>
<var name="filename"><![CDATA[products.csv]]></var>
<var name="format"><![CDATA[csv]]></var>
</action> -
Les adapter par défaut de Magento DataFlow
Le module Magento DataFlow contient quelques classes par défaut que vous pouvez trouver dans le répertoire app/code/core/Dataflow/Model/Convert/Adapter. Toutes n'implémentent pas encore les méthodes load() et save().
Pour une utilisation classique de lecture ou d'écriture depuis un fichier local ou distant vous utiliserez dataflow/convert_adapter_io (Mage_Dataflow_Model_Convert_Adapter_Io).
Les variables suivantes vous permettrons de définir les fichiers locaux/distants comme sources de données :
- type - définit le type de source à traiter. Valeurs acceptées : file, ftp
- path - définit le chemin relatif du fichier
- filename - définit le nom du fichier
- host - pour le type ftp, définit l'hôte
- port - pour le type ftp, définit le port IP, 21 par défaut
- user - pour le type ftp, le om de l'utisateur. Par défaut 'anonymous' et le mot de passe associé est alors 'anonymous@noserver.com'
- password - pour le type ftp, définit le mot de passe
- timeout - pour le type ftp, le délai maximum de connexion, 90 par défaut
- file_mode - pour le type ftp, définit le mode de transfert, FTP_BINARY par défaut
- ssl - pour le type ftp, utilise ssl si non vide
- passive - pour le type ftp, définit le type de connexion, false par défaut
-
Les adapters clients et produits catalogue
Pour la plupart des entités échangées - client et produits - Magento fournit des adapters par défaut : customer/convert_adapter_customer (Mage_Customer_Model_Convert_Adapter_Customer) et catalog/convert_adapter_product (Mage_Catalog_Model_Convert_Adapter_Product). Les deux héritent de Mage_Eav_Model_Convert_Adapter_Entity.
Pour charger toutes les données clients d'un magasin sélectionné, vous pouvez utiliser le code XML suivant :
<action type="customer/convert_adapter_customer" method="load">
<var name="store">default</var>
</action>Vous aurez parfois besoin de ne pas charger tous les clients dans la base. Les variables suivantes sont disponibles à cet effet :
- filter/firstname - charge uniquement les clients dont le prénom commence par la valeur précisée
- filter/lastname - charge uniquement les clients dont le nom commence par la valeur précisée
- filter/email - tcharge uniquement les clients dont l'adresse électronique commence par la valeur précisée
- filter/group - charge uniquement les clients dont l'ID de groupe est égal à la valeur précisée
- filter/adressType - exporte uniquement les addressType précisés; les valeurs possibles sont : both, default_billing, default_shipping
- filter/telephone - charge uniquement les clients dont le téléphone commence par la valeur précisée
- filter/postcode - charge uniquement les clients dont le code postal commence par la valeur précisée
- filter/country - tcharge uniquement les clients dont le code ISO du pays est égal à la valeur précisée
- filter/region - charge uniquement les clients dont la région est égale à la valeur précisée (2 caractères pour les états américains)
- filter/created_at/from - charge uniquement les clients dont la date de création est postérieure à la valeur précisée
- filter/created_at/to - charge uniquement les clients dont la date de création est antérieure à la valeur précisée
Par exemple:
<action type="customer/convert_adapter_customer" method="load">
<var name="store"><![CDATA[0]]></var>
<var name="filter/firstname"><![CDATA[a]]></var>
<var name="filter/lastname"><![CDATA[a]]></var>
<var name="filter/email"><![CDATA[a]]></var>
<var name="filter/group"><![CDATA[1]]></var>
<var name="filter/adressType"><![CDATA[default_billing]]></var>
<var name="filter/telephone"><![CDATA[1]]></var>
<var name="filter/postcode"><![CDATA[7]]></var>
<var name="filter/country"><![CDATA[BS]]></var>
<var name="filter/region"><![CDATA[WA]]></var>
<var name="filter/created_at/from"><![CDATA[09/22/09]]></var>
<var name="filter/created_at/to"><![CDATA[09/24/09]]></var>
</action>De la même manière vous pouvez charger et filtrer les produits catalogue dans la base avec les variables suivantes :
- filter/name - charge les produits dont le nom commence par la valeur précisée
- filter/sku - charge les produits dont le SKU commence par la valeur précisée
- filter/type - charge les produits dont le type est la valeur précisée; Les valeurs possible sont : simple, configurable, grouped, bundle, virtual, downloadable
- filter/attribute_set - charge les produits dont l'ID de jeu d'attribut est la valeur précisée
- filter/price/from - charge les produits dont le prix est supérieur à la valeur précisée
- filter/price/to - charge les produits dont le prix est inférieur à la valeur précisée
- filter/qty/from - charge les produits dont le stock est supérieur à la valeur précisée
- filter/qty/to - charge les produits dont le stock est inférieur à la valeur précisée
- filter/visibility - charge les produits dont l'ID de visibilité est égal à la valeur précisée
- filter/status - charge les produits dont le statut est égal à la valeur précisée
Par exemple :
<action type="catalog/convert_adapter_product" method="load">
<var name="store"><![CDATA[0]]></var>
<var name="filter/name"><![CDATA[a]]></var>
<var name="filter/sku"><![CDATA[1]]></var>
<var name="filter/type"><![CDATA[simple]]></var>
<var name="filter/attribute_set"><![CDATA[29]]></var>
<var name="filter/price/from"><![CDATA[1]]></var>
<var name="filter/price/to"><![CDATA[2]]></var>
<var name="filter/qty/from"><![CDATA[1]]></var>
<var name="filter/qty/to"><![CDATA[2]]></var>
<var name="filter/visibility"><![CDATA[2]]></var>
<var name="filter/status"><![CDATA[1]]></var>
</action>
Il peut sembler rébarbatif de voir tous ces ID de valeurs que vous avez à fournir pour les filtres. Heureusement pour ces deux entités - clients et produits - il existe un assistant qui vous permet de générer ces filtres avec de simples boites de sélection.
Dans une prochaine partie, nous verrons comment utiliser parsers et adapters dans la contexte de parsers.
Traduction par Benjamin Bellamy





