0

addAction 関数に CartController.php オーバーライドを使用します。

基本的に、ユーザーが入力したカスタム オプションを取得して、それらのオプションに基づいて新しい製品を生成し、代わりにカートに追加しようとしています。製品にカスタム属性のフラグが立てられていない場合は、通常どおり追加されますが、フラグが立てられている場合は、新しい製品が作成され、代わりにそれがカートに追加されます。

新しい製品を正常に生成してカートに追加していますが、顧客が入力したカスタム オプションを取得できません。

$defaultprod = $product->getDefaultprod();
$prodID = $product->getId();
$prodOpt = Mage::getModel("catalog/product")->load($prodID);

if (!$defaultprod == 1) {
$cart->addProduct($product, $params);
if (!empty($related)) {
    $cart->addProductsByIds(explode(',', $related));
}
$cart->save();
}
else
{
          // code to create/add new product here, adding new product + adding to cart functioning, but CANNOT retrieve customer's custom attribute input
}

何かアドバイス?

4

1 に答える 1

0

これは私が成功しようとしたものです:

  • 元の商品をカートに追加しないでください
  • カートに追加するときに最初に投稿されたカスタム オプションを取得する

1) オブザーバーを作成する

これはイベントを監視しますcontroller_action_predispatch_checkout_cart_add

<controller_action_predispatch_checkout_cart_add>
    <observers>
        <myobserver_identification>
            <class>module/observer</class>
            <method>myCustomMethod</method>
        </myobserver_identification>
    </observers>
</controller_action_predispatch_checkout_cart_add>

2) これを MyNamespace_Module_Model_Observer に追加します

public function myCustomMethod() {
    $request = Mage::app()->getFrontController()->getRequest();

    /**
     * Avoid adding original product
     */
    $request->setParam('product', (bool) false);

    /**
     * Retrieve custom options posted on add to cart
     */
    $customOptions = $request->getParam('options');
}
于 2012-08-27T21:46:45.800 に答える