1

ユーザーがチェックアウトプロセスを中止したかどうか/いつ中止したかを知る必要があるカスタムモジュールに取り組んでいます。「中止」とは、単にチェックアウトのindexActionに到達したが、プロセスを完了しなかったことを意味します。これが発生するかどうか/いつ発生するかを知ることは絶対に不可欠です。

彼らがチェックアウトに入ったセッション変数を設定するかもしれないと思っていました。ページを読み込むたびに、この変数をチェックするコードブロックを実行します。の場合true、使用されているコントローラーを確認します。チェックアウトコントローラーでない場合は、彼らが去ったことがわかります。

私の考えに関する2つの問題:

  1. このコントローラーチェックコードをどこに配置すればよいかわからないので、ページが読み込まれるたびに実行されます。
  2. どのコントローラーがリクエストを処理しているかを見つける方法がわかりません。

これらの質問に答えるのを手伝っていただければ幸いです。さらに、より良いアプローチを提案していただければ幸いです。

4

2 に答える 2

2

放棄されたカートの問題に対しては、少し異なるアプローチを取ります。

商品を追加して「ショッピングカートを作成」するたびに、magentoがデータベースに保存するMage_Sales_Model_Quoteを作成します。注文を完了するたびに、Mage_Sales_Model_Orderオブジェクトを作成します。Mage_Sales_Model_Orderオブジェクトは、元の見積もりIDへの参照を保持します。

したがって、すべての注文をクエリして見積もりIDのリストを取得し、見積もりコレクションを作成して、注文がある見積もりをフィルタリングできます。これにより、カートが放棄されるたびにリストが表示されます。

//may start to degrade as orders pile up.  Add date filters to 
//prevent or look into properly joining things in.
$orders = Mage::getModel('sales/order')
->getCollection()
->addAttributeToSelect('*');

var_dump('Order Count', count($orders));

$quote_ids  = $orders->getColumnValues('quote_id');
$quote_ids = array_filter($quote_ids, 'is_numeric');

$carts      = Mage::getModel('sales/quote')
->getCollection();

var_dump('All Cart Count:');
var_dump(count($carts));

$carts      = Mage::getModel('sales/quote')
->getCollection()
->addFieldToFilter('entity_id',array('nin'=>$quote_ids));

var_dump('Filtered Cart Count:');
var_dump(count($carts));

foreach($carts as $cart)
{
    var_dump('abandoned cart', $cart);
}

あなたの他の質問に関しては、それらは単一のスタックオーバーフローの質問に入るにはあまりにも複雑です。私はMagentoを読んで基本的なアーキテクチャの感触をつかみ、ライブコマースバグのデモを使用して、どのコントローラーを探しているのかを把握しました。(上記にリンクされている両方のプロジェクトは、私のもの、自己リンク、購入者の注意などです)

于 2010-07-08T22:40:23.830 に答える
0

訪問者がチェックアウトを離れた瞬間をリアルタイムで知る必要があるため、という名前のセッション変数を使用しましたIsUserInCheckout。これはtrue、チェックアウトのindexAction()が実行されるときに設定されます。

次に、リクエストがコントローラーにディスパッチされる前に実行されるイベントオブザーバーを作成しました。どのコントローラーが呼び出されているかをチェックします。リクエストがチェックアウトコントローラーに対するものでない場合は、セッション変数を調べて、ユーザーがチェックアウトを開始したかどうかを確認します。カスタムロジックを実行したら、セッション変数IsUserInCheckoutをに変更しますfalse

十分軽量な気がします。ページが読み込まれるたびに実行されますが、98%の時間、セッション変数を読み取り、を確認falseし、何もしません。

于 2010-07-13T19:25:10.390 に答える