2

我有 2 个自定义选项文本字段与名为 Location To 和 Location From 的产品相关联,

我已经使用称为 getLocationCoords 的方法设置了一个具有 Observer 的模块,checkout_cart_add_product_complete我将如何从传递给我的方法的事件对象访问这两个字段。

我需要这两个字段,所以我可以对它们进行反向地理编码,我认为我可以自己完成。

一旦我获得了 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。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

我能够访问报价项目,并且从中我能够访问自定义属性的值。我有两个选项,经过一些调试后,我意识到我的选项被称为 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 回答