簡體   English   中英

在Magento中向購物車項目添加屬性,在購物車中單獨顯示

[英]Add attribute to cart items in Magento, show separate in cart

我找到了解決這個問題的很多答案,但是有些矛盾並且對我而言還不是很清楚,所以我希望Magento專家可以為我指明正確的方向。

對於Magento中的某些產品,有一個復雜的自定義過程。 有一個自定義編輯器,每個“設計”均由唯一值標識。 我需要將此ID與產品一起存儲在購物車和訂單中。 它不應該直接顯示,而是可以在代碼中訪問(例如,在購物車中顯示其他縮略圖或發票上的某些信息)。

此外,由於產品是定制的,因此如果此ID不同,則同一產品在購物車和發票中應有單獨的一行!

因此,例如,某個客戶打開產品頁面,進行了一些自定義,此自定義獲得的ID為“ 1”。 客戶將其放入購物車。 他再次打開相同的產品,對其進行不同的自定義,並獲得ID“ 2”。 客戶還將其放入購物車!

現在,購物車應為:

  • ProductX [使用ID 1的代碼生成的自定義文本] 1件x€
  • ProductX [使用ID 2由代碼生成的自定義文本] 1件x€

並不是:

  • 產品X 2件x€

但是客戶仍然應該能夠訂購多個具有相同ID的相同產品! 所以例如

  • ProductX [使用ID 1的代碼生成的自定義文本] 4件x€
  • ProductX [使用ID 2由代碼生成的自定義文本] 2件x€

定制發生在magento之外。 Magento僅有一個帶有彈出窗口的鏈接,然后獲取一些ID,然后可以使用PHP附加該ID。 它僅存儲ID,並且必須能夠在購物車/發票/ ...中獲取每種產品的ID。

重要的是要存儲ID,並且如果ID不同,則不會將具有相同sku / customizable選項的產品合並到購物車中! 另外,ID必須是文本字符串,並且不能從列表中選擇,例如magento可自定義選項!

我發現的方法可以滿足我的要求:

  1. http://www.atwix.com/magento/custom-product-attribute-quote-order-item/這對我來說似乎是最好的,有一個成品模塊可以修改。 但是我不確定這是否正確。 產品會在購物車中分開嗎? 另外,ID的值在此處設置為“產品”選項,並在后端可見嗎? 在我的情況下,客戶定制產品之前沒有任何價值!

    1. https://magento.stackexchange.com/a/1382我不太確定...如何獲取觀察者內部產品詳細信息頁面上可用的ID ...

    2. 如何將每個產品作為新商品添加到購物車中?也許我需要在1.或2之外進行修改?

如果Magento Expert可以為我提供一些幫助,我將不勝感激!

您說過可以將ID添加到產品頁面中。 太好了 必要時,您需要將該值寫入產品頁面上“添加到購物車”表單中的隱藏輸入字段中。 假設輸入看起來像這樣;

<input type="hidden" name="myid" id="myid" value="123" />

在您的自定義模塊中,添加一個事件觀察器。 我在這里假設您將其添加到購物車后仍留在產品頁面上,而不是直接轉到購物車。

<catalog_product_load_after>
<observers>
    <Company_Module_Model_Observer>
        <type>model</type>
        <class>Company_Module_Model_Observer</class>
        <method>addPostData</method>
    </Company_Module_Model_Observer>
</observers>
</catalog_product_load_after>   

在您的模塊文件夾中,創建或打開Company / Module / Model / Observer.php並創建此功能;

class Company_Module_Model_Observer {


public function addPostData(Varien_Event_Observer $observer) {

      $action = Mage::app()->getFrontController()->getAction();
      if ($action->getFullActionName() == 'checkout_cart_add') {
         if($action->getRequest()->getParam('myid')) {
             // ID IS PRESENT, SO LETS ADD IT
             $item = $observer->getProduct();
             $additionalOptions = array();
             $additionalOptions[] = array(
                'label' => 'The unique ID',
                'value' => $action->getRequest()->getParam('myid')
            );
             $item->addCustomOption('additional_options', serialize($additionalOptions));
         }
      }

   }


}

設置好此位置后,您將在購物車和報價中看到該產品的ID,就像該值來自超級屬性一樣。 任何唯一的ID將被視為新的訂單項。

要針對銷售訂單保存此值,使其在銷售電子郵件中和后端顯示,請添加此觀察者;

<sales_convert_quote_item_to_order_item>
<observers>
    <Company_Module_Model_Observer>
        <type>model</type>
        <class>Company_Module_Model_Observer</class>
        <method>salesConvertQuoteItemToOrderItem</method>
    </Company_Module_Model_Observer>
</observers>
</sales_convert_quote_item_to_order_item>

並將此功能添加到Company / Module / Model / Observer.php

public function salesConvertQuoteItemToOrderItem(Varien_Event_Observer $observer)
{


   $quoteItem = $observer->getItem();
   if ($additionalOptions = $quoteItem->getOptionByCode('additional_options')) {
    $orderItem = $observer->getOrderItem();
    $options = $orderItem->getProductOptions();
    $options['additional_options'] = unserialize($additionalOptions->getValue());
    $orderItem->setProductOptions($options);
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM