0

すぐに、Magento プラットフォームでは、顧客がアカウントを登録し、アイテムをカートに追加してチェックアウトする必要があります。この煩わしさをすべて取り除き、カートに追加することなくワンクリック注文機能を実装するにはどうすればよいでしょうか?

実証するには、次のリンクをご覧ください: http://royalglasses.pk/index.php/brands/ray-ban-pakistan/ray-ban-aviator-exclusive.html

右側に「注文フォーム」セクションが表示されます。ここで、顧客は情報を入力してチェックアウトし、購入したい個々のアイテムごとにそれを行うことができます.

また、発送は都内のみで、支払い方法は「代金引換」しかありません。したがって、通常の Magento トランザクション (配送方法と支払い情報) の最後の 2 つのステップは、クライアントにとって役に立たないものになります。

4

1 に答える 1

0

通常の流れを壊すことなく、Magento のロジックに従います。以前に行ったスクリプトのコード スニペットは、ゲスト顧客の完全なチェックアウト プロセスを説明しています。あなたのものはそれほど変わらないはずです。コピーして貼り付けないでください。コードを確認し、必要に応じて微調整してください。

//投稿されたフォームとカートおよび見積もりモデルから製品を読み込みます。
$product = Mage::getModel('catalog/product')->load((int) $_POST['product_id']);
$cart = Mage::getSingleton('checkout/cart');
$quote = $cart->getQuote();

// 商品をカートに追加し、セッションを更新済みに設定します
$params = array('product' => $product->getId(), 'qty' => (int) $_POST['qty']);
$cart->addProduct($product, $params);
$cart->save();
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);

//注文プロセスとトランザクション オブジェクトに必要な変数をロードして、注文を保存します。
$transaction = Mage::getModel('core/resource_transaction');
$storeId = $customer->getStoreId();
$reservedOrderId = Mage::getSingleton('eav/config')->getEntityType('order')->fetchNewIncrementId($storeId);

//注文モデルをロードし、いくつかのデフォルト値を設定します
$order = Mage::getModel('sales/order')
                ->setIncrementId($reservedOrderId)
                ->setStoreId($storeId)
                ->setQuoteId($quote->getId())
                ->setGlobalCurrencyCode('USD')
                ->setBaseCurrencyCode('USD')
                ->setStoreCurrencyCode('USD')
                ->setOrderCurrencyCode('USD');

//顧客をゲストとして割り当てます。$customer は $_POST['customer'] の配列です      
$order->setCustomerEmail($customer['email'])
                ->setCustomerFirstname($customer['firstname'])
                ->setCustomerLastname($customer['lastname'])
                ->setCustomerGroupId(0)
                ->setCustomerIsGuest(1);

//請求先住所を準備し、注文に追加します
$billingAddress = Mage::getModel('sales/order_address')
                ->setStoreId($storeId)
                ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_BILLING)
                ->setCustomerId(0)
                ->setCustomerAddressId(0)
                ->setCustomerAddressId(0)
                ->setFirstname($customer['firstname'])
                ->setLastname($customer['lastname'])
                ->setStreet($customer['address'])
                ->setCity($customer['city'])
                ->setCountryId($customer['country_id'])
                ->setPostcode($customer['postcode'])
                ->setTelephone($customer['phone']);
$order->setBillingAddress($billingAddress);

//配送先住所を準備して注文に追加し、配送方法を設定します
$shippingAddress = Mage::getModel('sales/order_address')
                ->setStoreId($storeId)
                ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_SHIPPING)
                ->setCustomerId(0)
                ->setCustomerAddressId(0)
                ->setCustomerAddressId(0)
                ->setFirstname($customer['firstname'])
                ->setLastname($customer['lastname'])
                ->setStreet($customer['address'])
                ->setCity($customer['city'])
                ->setCountryId($customer['country_id'])
                ->setPostcode($customer['postcode'])
                ->setTelephone($customer['phone']);

//配送先住所と配送方法を追加します。             
$order->setShippingAddress($shippingAddress)
                ->setShippingMethod('yourshipping_code')
                ->setShippingDescription('配送の説明');

//お支払い方法を追加します。
$orderPayment = Mage::getModel('sales/order_payment')
                                    ->setStoreId($storeId)
                                    ->setCustomerPaymentId(0)
                                    ->setMethod('cod'); // 代金引換は代金引換
$order->setPayment($orderPayment);


//見積もりの​​アイテムをループし、注文アイテムを作成して注文に追加します。製品は 1 つしかないため、注文アイテムは 1 つだけ追加されます。
foreach ($quote->getItemsCollection() as $item)
{
    $_prod = Mage::getModel('catalog/product')->load($item->getProduct()->getId());
    $rowTotal = $item->getCalculationPrice() * $item->getQty();
    $orderItem = Mage::getModel('sales/order_item')
                    ->setStoreId($storeId)
                    ->setQuoteItemId(0)
                    ->setQuoteParentItemId(NULL)
                    ->setProductId($_prod->getId())
                    ->setProductType($_prod->getTypeId())
                    ->setQtyBackordered(NULL)
                    ->setTotalQtyOrdered($item->getQty())
                    ->setQtyOrdered($item->getQty())
                    ->setName($_prod->getName())
                    ->setSku($_prod->getSku())
                    ->setPrice($item->getPrice())
                    ->setBasePrice($item->getPrice())
                    ->setOriginalPrice($item->getPrice())
                    ->setRowTotal($rowTotal)
                    ->setBaseRowTotal($rowTotal);
    $order->addItem($orderItem);
}

//合計を設定する
$subTotal = $quote->getGrandTotal();
$order->setSubtotal($subTotal)
        ->setBaseSubtotal($subTotal)
        ->setGrandTotal($subTotal)
        ->setBaseGrandTotal($subTotal);


//まず、注文してから保存します。     
$transaction->addObject($order);
$transaction->addCommitCallback(array($order, 'place'));
$transaction->addCommitCallback(array($order, 'save'));
$transaction->save();
$quote->save();

// セッションとカートをクリアします。
Mage::getSingleton('チェックアウト/セッション')->clear();
foreach($quote->getItemsCollection() as $_item)
{
     Mage::getSingleton('checkout/cart')->removeItem($_item->getId())->save();
}

//ユーザーを目的の場所にリダイレクトします。
于 2013-03-01T21:05:47.250 に答える