2

Location To と Location From という製品に関連付けられた 2 つのカスタム オプション テキスト フィールドがあります。

getLocationCoords というメソッドを使用してオブザーバーを持つモジュールをセットアップしましたcheckout_cart_add_product_complete。メソッドに渡されたイベント オブジェクトからこれら 2 つのフィールドにアクセスするにはどうすればよいでしょうか。

これらの 2 つのフィールドが必要なので、自分でできると思うリバース ジオコーディングを行うことができます。

2 セットの座標を取得したら、それらを製品と一緒に保管して、注文のペースが調整されたときにそれらが製品に関連付けられているのを確認できるようにするにはどうすればよいですか?

=======================編集追加======================== ===

私がこれまでに試したこと

 public function getLocationCoords(Varien_Event_Observer $observer)
{
    // Retrieve the product being updated from the event observer
    $product = $observer->getEvent()->getProduct();

    // Write a new line to var/log/product-updates.log
    $name = $product->getName();
    $sku = $product->getSku();
    Mage::log(
        "{$name} ({$sku}) updated",
        null, 
        'product-updates.log'
    );
    foreach ($product->getOptions() as $o) {
        $type = "Custom Option TYPE: " . $o->getType();
        $title = "Custom Option TITLE: " . $o->getTitle();
         Mage::log(
            "{$type} ({$title}) custom option {$o}",
            null, 
            'product-updates.log'
        );
    }
}

カスタムオプションの値を取得する以外はすべて機能します。以下の回答を試して、どこで取得できるかを確認します

オプション オブジェクトの var ダンプを出力すると、これが得られます

2012-12-11T15:19:45+00:00 DEBUG (7): array (
  'option_id' => '1',
  'product_id' => '1',
  'type' => 'field',
  'is_require' => '1',
  'max_characters' => '0',
  'sort_order' => '0',
  'default_title' => 'Location To',
  'title' => 'Location To',
  'default_price' => '0.0000',
  'default_price_type' => 'fixed',
  'price' => '0.0000',
  'price_type' => 'fixed',
)

オブジェクトに価値はない

4

3 に答える 3

3

こんなイベントもあります

 $eventName = sprintf('catalog_product_type_prepare_%s_options', $processMode);
    Mage::dispatchEvent($eventName, array(
        'transport'   => $transport,
        'buy_request' => $buyRequest,
        'product' => $product
    ));

processMode は full または lite のいずれかです。buy_request には詳細が含まれている必要があり、製品に新しいオプションを追加できます。

$product->addCustomOption('my_option','my_value');

テストされていませんが、あなたの調子を教えてください。

于 2012-12-11T13:27:45.903 に答える
2

そのイベントがディスパッチされるまでに、カート セッションから販売見積オブジェクトにアクセスする必要があると思います。checkout_cart_product_add_after[link]イベントを試して、次のように見積もりアイテムにアクセスしてください。

public function geoConversion ($obs)
{
    $item = $obs->getQuoteItem();
    /* @var $item Mage_Sales_Model_Quote_Item */

    //I believe the custom options will be in here, not sure
    $buyRequest = $item->getBuyRequest();

    // your logic 
}

私はこれをチェックしていませんが、使用するのに少し良いイベントです。ただし、カートに追加するプロセスをカスタマイズする際には考慮すべき点がたくさんあるため (管理者が作成した注文や既存のカート項目の更新など)、テスト、テスト、テストを繰り返します。また、役に立つ/より適切な別のイベントがあります: sales_quote_product_add_after[link]

さらに、この動作は、これらの製品に - に基づくカスタム型モデルを与えることによって、または - でディスパッチされるイベントを観察することによっても実現できますMage_Catalog_Model_Product_Type_Abstract

めまいがする。

于 2012-12-11T12:58:12.307 に答える
0

見積もりアイテムにアクセスでき、そこからカスタム属性の値にアクセスできました。私には2つのオプションがあり、いくつかのデバッグの後、オプションが option_1 と option_2 と呼ばれていることに気付きました。そこから、値を取得して変数に設定することができました。

public function getLocationCoords(Varien_Event_Observer $observer)
{
    $item = $observer->getQuoteItem();

    $locationFrom = '';
    $locationTo = '';

    foreach ($item->getOptions() as $o) {   
        if($o['code'] == 'option_2'){
            $locationFrom = $o['value'];
        }
        if($o['code'] == 'option_1'){
            $locationTo = $o['value'];
        }

    }
     Mage::log("the location from = ".$locationFrom);
     Mage::log("the location to = ".$locationTo);

 }
于 2012-12-12T00:10:55.233 に答える