2012-04-03 28 views
11

Tôi có một số câu hỏi hấp dẫn liên quan đến Tùy chọn Tuỳ chỉnh của sản phẩm: -Magento - Nhận Tuỳ chỉnh chi tiết Lựa chọn giá trị gia tăng từ Tùy chọn Giá trị ID

  1. Có sự khác biệt giữa Tùy chọn & Tuỳ chọn? Điều này là do tôi đã tìm thấy hai thuộc tính khác nhau cho mỗi chi tiết sản phẩm, trong hầu hết tất cả các module sản phẩm liên quan đến: -

    • options
    • custom_options

    Tuy nhiên chỉ có một lớp học cho chỉ Tùy chọn sản phẩm, có xu hướng chăm sóc Tùy chọn tùy chỉnh. Xin vui lòng ai đó làm rõ điểm này.

  2. Tôi đang cố gắng tìm nạp Tuỳ chọn tùy chỉnh của một mục được đặt hàng, bao gồm Giá tùy chọn tùy chỉnh và loại giá. Vấn đề là Magento chỉ lưu trữ Giá trị tùy chọn cho Mặt hàng được đặt hàng tương ứng và không phải tất cả chi tiết của nó (như Giá tùy chọn tùy chỉnh & Loại giá).
    Vì vậy, tôi đã tạo một đối tượng của lớp này Mage_Catalog_Model_Product_Option_Value, chỉ xem xét drop_down Loại tùy chọn tùy chỉnh. Tôi đã cung cấp mã của tôi dưới đây, nhưng nó vẫn vô ích và không tìm nạp kết quả mong muốn. Ai đó có thể vui lòng sửa mã này và giúp tôi không?

Mã cho điểm # 2: -

echo "<pre>"; 
// $collection contains the whole Order Collection 
foreach ($collection as $order) { 
    foreach ($order->getAllItems() as $item) { 
     $customOptions = $item->getProductOptions(); 

     foreach ($customOptions['options'] as $_eachOption) { 
      // Value ID is stored in this field "option_value" 
      $objModel = Mage::getModel('catalog/product_option_value')->load($_eachOption['option_value']); 

      // This should provide all the details of this particular Option Value as chosen by the Customer when ordering this Product, but unfortunately it doesn't 
      print_r($objModel->getData()); 

      /** 
      * This gives the output as, without any details on Price and Price Type:- 
      * Array 
      * { 
      *  [option_type_id] => 13014 
      *  [option_id] => 4921 
      *  [sku] => XBPS22 
      *  [sort_order] => 0 
      * } 
      */ 

      unset($objModel); 
     } 
    } 
} 
echo "</pre>"; 

Sau khi thực hiện một số kiểm tra, tôi thấy rằng giá liên quan đến từng Lựa chọn giá trị được lưu trữ trong catalog_product_option_type_price bảng cơ sở dữ liệu, và giá liên quan với nhau Các tùy chọn được lưu trữ trong bảng cơ sở dữ liệu catalog_product_option_price. Vì vậy, phải có một số cách để Magento lấy giá trị Giá trị tùy chọn tùy chỉnh tương ứng. Hãy khai sáng cho tôi, và sửa lại đoạn mã trên?

Cảm ơn tất cả, trước!

Trả lời

15

Tôi biết đây là một câu hỏi cũ, nhưng thiếu câu trả lời và sau khi tìm kiếm câu trả lời trong khi gặp vấn đề tương tự, tôi nghĩ tôi sẽ trả lời ở đây cho những người khác có thể tìm thấy câu trả lời này. Trong mã này, tôi tải sản phẩm theo id, lấy bộ sưu tập tùy chọn, mà trong các thử nghiệm của tôi chỉ chứa các tùy chọn tùy chỉnh cho một sản phẩm, không phải thuộc tính hoặc các tùy chọn khác, lặp qua các tùy chọn và tải bộ sưu tập giá trị cho mỗi Tùy chọn. Mã trình diễn này có thể kiểm tra được khá nhiều ở mọi nơi miễn là bạn có ID sản phẩm.

<?php 

$productID = $this->getProductId(); //Replace with your method to get your product Id. 

$product = Mage::getModel('catalog/product')->load($productID); 
$options = Mage::getModel('catalog/product_option')->getProductOptionCollection($product); 

foreach ($options as $option) { 
    Mage::log('Name: ' . $option->getDefaultTitle()); 
    Mage::log(' Type: ' . $option->getType()); 
    Mage::log(' Class: ' . get_class($option)); 
    Mage::log(' Price/Type: ' . ($option->getPrice() ? $option->getPrice() : '0.00') . '/' . $option->getType()); 

    if ($option->getType() === 'drop_down') { 
     $values = Mage::getSingleton('catalog/product_option_value')->getValuesCollection($option); 
     Mage::log(' Values: (name/price/type)'); 

     foreach ($values as $value) { 
      Mage::log('  ' . $value->getTitle() . '/' . $value->getPrice() . '/' . $value->getPriceType());; 
     } 
    } 
} 
?> 

Ví dụ Log Output:

2014-02-18T20:15:25+00:00 DEBUG (7): Name: Turtle Color 
2014-02-18T20:15:25+00:00 DEBUG (7):  Type: drop_down 
2014-02-18T20:15:25+00:00 DEBUG (7):  Class: Mage_Catalog_Model_Product_Option 
2014-02-18T20:15:25+00:00 DEBUG (7):  Price/Type: 0.00/drop_down 
2014-02-18T20:15:25+00:00 DEBUG (7):  Values: (name/price/type) 
2014-02-18T20:15:25+00:00 DEBUG (7):   Red/0.0000/fixed 
2014-02-18T20:15:25+00:00 DEBUG (7):   White/0.0000/fixed 
2014-02-18T20:15:25+00:00 DEBUG (7):   Blue/0.0000/fixed 

Ví dụ dữ liệu có sẵn cho $ tùy chọn Mage :: log ($ tùy chọn-> toArray());

lưu ý: giá và price_type chỉ có sẵn trên các giá trị tùy chọn cho tùy chọn loại drop_down.

2014-02-18T20:19:44+00:00 DEBUG (7): Array 
(
    [option_id] => 135 
    [product_id] => 80 
    [type] => field 
    [is_require] => 0 
    [sku] => 
    [max_characters] => 25 
    [file_extension] => 
    [image_size_x] => 
    [image_size_y] => 
    [sort_order] => 90 
    [description] => 
    [default_title] => Turtle Name 
    [store_title] => 
    [title] => Turtle Name 
    [default_price] => 0.0000 
    [default_price_type] => fixed 
    [store_price] => 
    [store_price_type] => 
    [price] => 0.0000 
    [price_type] => fixed 
) 

Ví dụ về dữ liệu sẵn có cho $ Mage :: log ($ values-> toArray());

2014-02-18T20:25:21+00:00 DEBUG (7): Array 
(
    [totalRecords] => 2 
    [items] => Array 
     (
      [0] => Array 
       (
        [option_type_id] => 1149 
        [option_id] => 229 
        [sku] => 
        [sort_order] => 10 
        [default_price] => 0.0000 
        [default_price_type] => fixed 
        [store_price] => 0.0000 
        [store_price_type] => fixed 
        [price] => 0.0000 
        [price_type] => fixed 
        [default_title] => 31" 
        [store_title] => 31" 
        [title] => 31" 
       ) 
      [1] => Array 
       (
        [option_type_id] => 1150 
        [option_id] => 229 
        [sku] => 
        [sort_order] => 20 
        [default_price] => 0.0000 
        [default_price_type] => fixed 
        [store_price] => 0.0000 
        [store_price_type] => fixed 
        [price] => 0.0000 
        [price_type] => fixed 
        [default_title] => 31.5" 
        [store_title] => 31.5" 
        [title] => 31.5" 
       ) 
     ) 
) 
+0

Hey, làm thế nào tôi có thể sử dụng '$ value-> setPrice()' tôi muốn thay đổi giá tùy chọn nhờ. –

+0

Tôi thấy rằng bạn đang xuất các giá trị từ các loại tùy chọn thả xuống, cách hiển thị giá trị trường văn bản? Tôi đang cố gắng thu thập dữ liệu của mình sau khi mục đã được thêm vào giỏ hàng. Cảm ơn trước. – NotJay

3

tải đầu tiên các sản phẩm từ bộ sưu tập sau đó vòng lặp như sau:

$product = 100; // product id, you should get first 

foreach($product->getOptions() as $options) 
{ 
    $options->getType(); // get option type 

    $optionValues = $options->getValues(); 

    foreach($optionValues as $optVal) 
    { 
     print_r($optVal->getData()); 
     // or $optVal->getData('option_id') 
    } 
} 

* Modified *

$prdSku = 125; // sample sku 
$product = Mage::getModel('catalog/product'); 
$prdId = $product->getIdBySku($prdSku); 
$product->load($prdId); 

if ($product->getId()) { 
    if ($product->hasCustomOptions()) { 
    foreach ($product->getOptions() as $opt) { 
     $optionType = $opt->getType(); 

     if ($optionType == 'drop_down') { 
     $values = $opt->getValues(); 

     foreach ($values as $k => $v) { 
      Mage::log("Array Key = $k;"); 
      Mage::log("Array Value: $v"); 
     } 
     } 
    } 
} 
+0

Cảm ơn bạn đã thử, nhưng điều này tôi đã thử, cung cấp cho tôi các giá trị trống cho Giá tùy chọn giá tùy chỉnh và loại giá. Đó là lý do tại sao tôi tiếp tục tải một phiên bản Giá trị tùy chọn tùy chỉnh riêng biệt để có thể cung cấp cho tôi Loại giá và giá thực tế của Giá trị tùy chọn đó; nhưng ngay cả cách này cũng không cung cấp cho tôi bất cứ thứ gì. Xin lỗi, nhưng vẫn cảm ơn vì đã cố gắng! –

+0

Điều này cung cấp giá trị trống – Muk

+0

@Muk Tôi đã sửa đổi mã, bạn có thể vui lòng thử điều này không? –

1
$session= Mage::getSingleton('checkout/session'); 
$getotal = Mage::helper('checkout')->getQuote()->getGrandTotal(); 
foreach($session->getQuote()->getAllItems() as $item) 
{ 
$options = Mage::getModel('catalog/product')->load($item->getProduct()->getId())->getProductOptionsCollection(); 
    foreach ($options as $o) 
    { 
     $title = $o->getTitle(); 
     $values = $o->getValues(); 

     foreach($values as $v) 
     { 
     $mydata = $v->getPrice();       
     } 

    } 
} 

Bạn có thể sử dụng mã này để nhận giá được đặt cho các tùy chọn tùy chỉnh cho các sản phẩm trong giỏ hàng.

0

Một câu hỏi tương tự đã được hỏi ở đây:

get selected custom option price for simple product in observer

Tôi đưa ra câu trả lời sau đó:


Nếu bạn có ID tùy chọn giá trị mà bạn cũng có thể làm tôi chỉ đạo truy vấn để có được giá tùy chọn. Tôi biết điều này không phải là hoàn toàn cách Magento và bạn có thể phải làm một số tùy chỉnh tính toán (đối với giá procent chẳng hạn), nhưng bạn có thể làm điều gì đó như thế này:

$optionValueId = 1234; // replace with you option value ID 

$resource = Mage::getSingleton('core/resource'); 
$connection = $resource->getConnection('read'); 

$optionvaluePrice = $connection->fetchRow(
    sprintf('SELECT * FROM %1$s WHERE option_type_id = %2$d', 
     $resource->getTableName('catalog/product_option_type_price'), 
     $optionValueId 
    ) 
); 

Đáng buồn thay, Magento dường như không có một mô hình để tải riêng giá tùy chọn.

Các vấn đề liên quan