Magento API v2 : Création d’un attribut (1/2)

Nous avons créé un set d’attributs, puis un groupe à l’intérieur de ce set, maintenant nous allons créer l’attribut en lui même.

Pour réaliser cette opération nous allons utiliser la méthode catalogProductAttributeCreate() de l’API. Le code est un peu long, mais ne vous affolez pas, il y pas mal de commentaires.

<?php

// ===============================================
// --- Créer un attribut - Magento SOAP API v2 ---
// ===============================================
 
/* ->catalogProductAttributeCreate()
 *
 * Arguments :
 * 
 * - string             sessionId
 * - catalogProductAttributeEntityToCreate() data
 * 
 * Arguments pour 'data' :
 * 
 * - string             attribute_code
 * - string             frontend_input
 * - string             scope
 * - string             default_value
 * - int                is_unique
 * - int                is_required
 * - arrayOfString      apply_to
 * - int                is_configurable
 * - int                is_searchable
 * - int                is_visible_in_advanced_search
 * - int                is_comparable
 * - int                is_used_for_promo_rules
 * - int                is_visible_on_front
 * - int                used_in_product_listing
 * - associativeArray   additional_fields
 * - catalogProductAttributeFrontendLabelArray frontend_label
 * 
 * Arguments pour 'frontend_label' :
 * 
 * - string           store_id
 * - string           label
 *
 * Autres Informations :
 *
 * attribute_code : Identifiant de l'attribut. Doit être unique, 
 *                  sans espace, et de 30 caractères maximum.
 * frontend_input : 'text', 'textarea', 'date', 'boolean', 
 *                  'multiselect', 'select', 'price', 
 *                  'media_image', 'weee' 
 * scope          : 0 global ??, 1 store view ??, 2 website ??
 * apply_to       : '' tous , 'simple', 'grouped', 
 *                  'configurable', 'virtual', 'bundle', 
 *                  'downloadable'
 *
 * */

$urlApi   = 'http://magento.local/index.php/api/v2_soap?wsdl=1';
$username = 'username';
$apiKey   = 'apiKey';
 
$soapClient = new SoapClient($urlApi);

// Arguments :

$sessionId = $soapClient->login($username, $apiKey);

$additional_fields = array(
    array('key' => 'is_filterable',             'value' => 1),
    array('key' => 'is_filterable_in_search',   'value' => 0),
    array('key' => 'position',                  'value' => 0),
    array('key' => 'used_for_sort_by',          'value' => 0)
);

$frontend_label = array(
    array('store_id'  => '0', 'label' => 'monLabel'),
    array('store_id'  => '1', 'label' => '')
);
    
$data = array(
    'attribute_code'                => 'mon_attribut',
    'frontend_input'                => 'text',
    'scope'                         => 'global',
    'default_value'                 => '',
    'is_unique'                     => 0,
    'is_required'                   => 0,
    'apply_to'                      => array(   'simple', 
                                                'grouped', 
                                                'configurable', 
                                                'virtual', 
                                                'bundle', 
                                                'downloadable'),
    'is_configurable'               => 0,
    'is_searchable'                 => 0,
    'is_visible_in_advanced_search' => 0,
    'is_comparable'                 => 0,
    'is_used_for_promo_rules'       => 0,
    'is_visible_on_front'           => 0,
    'used_in_product_listing'       => 0,
    'additional_fields'             => $additional_fields,
    'frontend_label'                => $frontend_label
);

// ---

try {
    $soapClient->catalogProductAttributeCreate( $sessionId, 
                                                $data       );
} catch (Exception $e) {
    
    echo '
        FILE : '.$e->getFile()          .'<br>
        ERROR: '.$e->getMessage()       .'<br>
        <tt><pre>
    ';
    
    print_r($e);
}

echo 'FIN';
?>

Et là… une fois que vous avez lancé votre script … c’est le drame !
Vous obtenez irrémédiablement l’erreur « Frontend label is not defined »

Dans le post suivant, je donnerai quelques explications, et une solution pour contourner ce bug.

Le bug est remonté chez Magento sous le numéro #27420

Vous pouvez maintenant admirer le résultât sur l’interface d’administration.

Dans le post suivant, nous allons afficher les informations de notre attribut.

Les commentaires sont désactivés.