2012-12-11 40 views
2

我有一個名爲位置要和地點從產品相關的2自定義選項的文本字段,如何從觀察者事件訪問Magento的產品的自定義選項

我已經設置了對checkout_cart_add_product_complete觀察員一個模塊使用getLocationCoords方法,我將如何從傳遞給我的方法的事件對象訪問這兩個字段。

我需要這些2場,所以我可以反向地理他們,我想我能做到我自己。

一旦我得到了2套座標我將如何去與產品存儲他們,所以我能看到他們與該產品相關訂單一旦節奏?

======================= 編輯addded ==================== ========

我曾嘗試迄今

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', 
) 

沒有價值的對象

回答

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

而且,這種行爲也可以通過給這些產品基於自定義類型的模型來實現。

令人頭暈目眩。

+0

你讓我在正確的方向,但我發現我的選擇不同的方式,我已經回答下面 – molleman

3

也有此事件

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

隨着processMode完全或精簡版。該buy_request應該有你的詳細信息,然後你可以添加一個新的選項對產品

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

未經測試,但也讓我們知道你是怎樣。

0

我能得到以訪問報價項目,並從我能夠訪問自定義屬性的值。我有兩個選項,經過一些調試後,我意識到我的選項被稱爲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); 

} 
+0

哪個事件...? – benmarks

相關問題