Magento- 1ページのチェックアウト中に注文アイテムを一意に参照する
-
16-10-2019 - |
質問
私が取り組んでいる店は、ダウンロード可能な製品のみ用です。チェックアウト中に、特定の属性セットの本がある場合は、外部企業に石鹸リクエストを送信します(電子ブックのダウンロード可能なURLを外部企業から入手するため)。オーバーライドするモジュールを書きました saveOrderAction
の OnepageController.php
アイテムのダウンロード可能なURLに関する情報を保存する追加のデータベーステーブルを作成しました。 saveOrderAction
.
チェックアウト中に注文IDが生成されていないように、保存されているイベントをチェックするオブザーバーを作成しました。この間、作成したデータベーステーブルを更新する現在の製品の注文IDを見つけます。
私が現在抱えている問題は、ユーザーが顧客アカウントのダウンロード可能な製品セクションでダウンロードをクリックしたときにダウンロード可能なURLを更新する方法です。
の中に DownloadController.php
機能を見つけました linkAction
これは、製品のダウンロードボタンがクリックされたときに呼び出されると思います。そこに私は持っています print_r
$linkPurchasedItem
Aを示す変数 purchased_id
と item_id
製品にとってユニークなようです。
データベースに保存されているダウンロード可能なURL(カスタムテーブル)を返すには、外部会社から指定されているために、ある時点で作成したデータベーステーブルを更新する必要があります。 DownloadController.php
に linkAction
別のデータベース呼び出しを実行して、この機能が求められている製品に適切なダウンロード可能なURLを取得できます。
したがって、私の質問は次のとおりです。
- どの時点で
purchased_id
および/またはitem_id
生成されましたか? - それらを入れることは可能ですか?
OnepageController.php
? - カスタムデータベーステーブルの各注文で各製品を一意に識別する最良の方法は何ですか。
DownloadController.php
?
事前に助けてくれてありがとう。
解決
順番にあなたの主な質問をしましょう:
1.どの時点で purchased_id
および/または item_id
生成されましたか?
両方 purchased_id
と item_id
内で生成されます Mage_Downloadable_Model_Observer
メソッドから saveDownloadableOrderItem
. 。このオブザーバーは、イベントを聴くために登録されています sales_order_item_save_commit_after
- これは、注文アイテムが保存され、DBトランザクションコミットが完了するたびに呼び出されます。
これが設定されている特定の行は〜105*です。
$linkPurchasedItem = Mage::getModel('downloadable/link_purchased_item')
->setPurchasedId($linkPurchased->getId())
->setOrderItemId($orderItem->getId());
これは、ダウンロードリンクのハッシュを生成する直前に発生します。明示的に設定されていないことがわかります item_id
- 確かに、それはテーブルの自動侵入の主キーであるため、それは必要ではありません。
要約すれば、 IDは、注文アイテムがデータベースに正常に保存された後に設定されます。つまり、注文自体も保存されます。
2. OnePageController.phpでそれらを取得することは可能ですか?
注文アイテムを生成するために保存する必要があるため purchased_id
, 、 答えはいいえだ。
3.ダウンロードController.phpで参照できるように、カスタムデータベーステーブルの各注文で各製品を一意に識別する最良の方法は何ですか?
モデルセッターに上記のように示すのとほぼ同じ方法で setOrderItemId
, 、彼らは販売注文項目のIDを使用して、その特定の製品を参照しました。また、この戦略を使用する必要があります。これをあなた自身のテーブルに注入するために、書き直してください Mage_Downloadable_Model_Observer
ダウンロード可能なテーブルの保存と並行して自分のテーブルに保存するには、そのクラスに記載されているパターンをコピーして、製品タイプIDがダウンロード可能であることを確認するために多くのチェックを行う必要があります。
概要:
注文が完了するまで、SOAPサービスからダウンロードリンクを生成することはできません。主要なリファクタルがなければ、アクセスする方法はありません purchased_id
OnePage.phpで。
*少なくともCE 1.8 Alpha / EE 1.13.0.1