Articles de ligne Drupal Commerce: modifiez le prix?

Je dois ajouter à mon panier quelques éléments de ligne avec un montant personnalisé.
Le commerce est enregistrée avec le prix = 0, et mon module de calcul du prix et ajoutez la ligne article au panier/commande, mais je ne comprends pas comment définir par programmation le prix.

J'ai lu sur l'aide de Règles, mais j'ai besoin de mon module pour être en mesure de définir/modifier le prix, sans invoquer les règles de.

J'ai essayé avec une entité wrapper, j'ai essayé de modifier la ligne de l'élément créé avec commerce_product_line_item_new(), mais rien, lorsque l'élément de ligne pénètre dans le panier a toujours le produit d'origine prix (dans mon cas, 0).

Comment modifier un élément de ligne de prix par programme?

Mon code ressemble tellement loin:

//For debugging, this function is called by hook_menu()
function mymodule_test($product_id)
{
    global $user;
    $user = user_load($user->uid);

    $order = commerce_cart_order_load($user->uid);
    $order_wrapper = entity_metadata_wrapper('commerce_order', $order);

    $product = commerce_product_load($product_id);

    $line_item = commerce_product_line_item_new(
            $product,
            1,
            0,
            array(
            ),
            'cover'
    );

    $line_item_wrapper = entity_metadata_wrapper("commerce_line_item", $line_item);

    $line_item_wrapper->commerce_unit_price->data = commerce_price_component_add(
            $line_item_wrapper->commerce_unit_price->value(),
            'base_price',
            array(
                            'amount' => 1234,
                            'currency_code' => 'EUR',
                            'data' => array(),
            ),
            TRUE
    );

    $insert_line_item = commerce_cart_product_add($user->uid, $line_item_wrapper->value(), FALSE);

    return 'done';
}

La chose étrange, c'est que j'ai essayé d'adapter le code de commerce_line_item_unit_price_amount() trouvé dans le commerce/modules/line_item/commerce_line_item.des règles.inc, mais ce test:

<?php
    global $user;
    $product = commerce_product_load(4); //my commerce product for test

    $line_item = commerce_product_line_item_new(
        $product,
        1,
        0,
        array(
        ),
        'cover' //I do have this line_items type
    );

    //manually set amount and component name
    $amount = 1234;
    $component_name = 'base_price'; //tryed with discount, nothing change

    $wrapper = entity_metadata_wrapper('commerce_line_item', $line_item);
    $unit_price = commerce_price_wrapper_value($wrapper, 'commerce_unit_price', TRUE);

    //Calculate the updated amount and create a price array representing the
    //difference between it and the current amount.
    $current_amount = $unit_price['amount'];
    $updated_amount = commerce_round(COMMERCE_ROUND_HALF_UP, $amount);

    $difference = array(
        'amount' => $updated_amount - $current_amount, 
        'currency_code' => $unit_price['currency_code'], 
        'data' => array(),
    );

    //Set the amount of the unit price and add the difference as a component.
    $wrapper->commerce_unit_price->amount = $updated_amount;

    $wrapper->commerce_unit_price->data = commerce_price_component_add(
        $wrapper->commerce_unit_price->value(), 
        $component_name, 
        $difference, 
        TRUE
    );

    $insert_line_item = commerce_cart_product_add($user->uid, $line_item, FALSE);
?>

encore échouer, le line_item entrer dans le panier, mais avec le prix d'origine du produit référencé.

Une idée?

source d'informationauteur Strae