Drupal Commerce-Line-Elemente: verändern der Preis?

Ich noch hinzufügen zu meinem Wagen einige Werbebuchungen mit einer benutzerdefinierten Menge.
Die commerce-Produkt gespeichert wird, mit Preis = 0, und mein Modul berechnen Sie den Preis und fügen Sie die Zeile Artikel in den Warenkorb legen/bestellen, aber ich verstehe nicht, wie Sie programmgesteuert der Preis.

Ich gelesen habe über die Verwendung von Regeln, aber ich muss mein Modul in der Lage sein zu setzen/ändern den Preis, ohne Berufung auf Regeln.

Habe ich versucht mit einem entity-wrapper, ich habe versucht, zu ändern, die Einzelposten mit commerce_product_line_item_new(), aber nichts, wenn die werbebuchung wird in den Warenkorb gelegt hat immer die original-Produkt-Preis (in meinen Fall 0).

Wie ändern, um eine werbebuchung Preis programmgesteuert?

Mein code bisher sieht so aus:

//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';
}

Das merkwürdige ist, dass ich versuchte, die eine Anpassung des code of commerce_line_item_unit_price_amount() gefunden in commerce/Module/line_item/commerce_line_item.Regeln.inc, aber dieser 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);
?>

immer noch nicht, die line_item in die Karre aber mit der original Preis für das entsprechende Produkt.

Irgendeine Idee?

Sie sind sich nicht speichern Sie Ihre Wrapper...das könnte das problem sein (d.h. $line_item_wrapper->save();)
ich glaube, ich habe tryed, dass auch, aber lassen Sie mich geben, die anderen versuchen, nur für den Fall
Oh, Sie müssen auch speichern Sie die $order_wrapper (das hatte man mir als ich etwas ähnliches vor ein paar Monaten wieder)
Tryed, immer noch nicht funktioniert.. ich Hinzugefügt $line_item_wrapper->save(); $order_wrapper->save(); vor (und nach zu, nur für den Fall) commerce_cart_product_add aber nichts ändern... ich bekomme kein Fehler, der werbebuchung erhalten Sie in den Warenkorb legen, aber mit dem original-Produkt ist der Preis!
Mmmhh ich habe ein seltsames Verhalten btw, wenn ich call save() auf die order_wrapper, wird die werbebuchung nicht in den Warenkorb (aber immer noch kein Fehler)

InformationsquelleAutor Strae | 2012-11-21

Schreibe einen Kommentar