Créer un produit par programme

7

J'ai un produit avec un champ personnalisé, selon cela . Je sais que je peux créer un produit avec

$cp = commerce_product_new('product');
$cp->is_new = TRUE;
$cp->revision_id = NULL;
$cp->uid = 1;
$cp->status = 1;
$cp->created = $cp->changed = time();
$cp->sku = $product[sku];
$cp->title = $product[name];
$cp->language = LANGUAGE_NONE;
$cp->commerce_price = array(LANGUAGE_NONE => array( 0 => array(
 'amount' => $product[sale_price] ? $product[sale_price] : $product[retail_price],
 'currency_code' => 'USD',
)));$product[retail_price];
commerce_product_save($cp);

mais j'ai un champ personnalisé.

Comment puis-je créer un produit Drupal Commerce par programme avec des champs personnalisés complets?

Est $cp->myfield1='22';suffisant?

Yuseferi
la source

Réponses:

7

Un produit commercial est une entité comme une autre, alors ...

$cp->field_my_field[LANGUAGE_NONE][0]['value'] = '22';
Clive
la source
3

Juste un ajustement: la méthode create sur le contrôleur de produit a déjà des valeurs par défaut, donc pas besoin d'ajouter des choses comme is_new ou status.

  public function create(array $values = array()) {
    $values += array(
      'product_id' => NULL,
      'is_new' => TRUE,
      'sku' => '',
      'revision_id' => NULL,
      'title' => '',
      'uid' => '',
      'status' => 1,
      'created' => '',
      'changed' => '',
    );

    return parent::create($values);
  }

Je ferais donc juste:

$cp = commerce_product_new('product');
$cp->uid = 1;
$cp->sku = $product[sku];
$cp->title = $product[name];
$cp->language = LANGUAGE_NONE;
$cp->commerce_price = array(LANGUAGE_NONE => array( 0 => array(
 'amount' => $product[sale_price] ? $product[sale_price] : $product[retail_price],
 'currency_code' => 'USD',
)));$product[retail_price];
$cp->my_field[LANGUAGE_NONE][0]['value'] = 22;
commerce_product_save($cp);
pcambra
la source
1
Merci pour votre réponse, mais mon code était correct et j'y parviens en notant que clive me mentionne, tnx pour passer du temps
Yuseferi
1
Je viens de le laisser ici au cas où quelqu'un d'autre se heurterait à ça :). Vous pouvez marquer la réponse de Clive comme acceptée pour plus de clarté.
pcambra