Nhận giá của các tùy chọn sản phẩm có thể cấu hình


9

Tôi cần xuất tất cả các sản phẩm có giá từ Magento 1.7.

Đối với các sản phẩm đơn giản, điều này không có vấn đề gì, nhưng đối với các sản phẩm có thể định cấu hình tôi gặp phải vấn đề này: Giá xuất khẩu là giá được đặt cho sản phẩm đơn giản đi kèm! Như bạn đã biết, Magento bỏ qua giá này và sử dụng giá của sản phẩm có thể định cấu hình cộng với các điều chỉnh cho các tùy chọn đã chọn.

Tôi có thể nhận được giá của sản phẩm mẹ, nhưng làm cách nào để tính chênh lệch tùy thuộc vào các tùy chọn đã chọn?

Mã của tôi trông giống như thế này:

foreach($products as $p)
   {
    $price = $p->getPrice();
            // I save it somewhere

    // check if the item is sold in second shop
    if (in_array($otherShopId, $p->getStoreIds()))
     {
      $otherConfProd = Mage::getModel('catalog/product')->setStoreId($otherShopId)->load($p->getId());
      $otherPrice = $b2cConfProd->getPrice();
      // I save it somewhere
      unset($otherPrice);
     }

    if ($p->getTypeId() == "configurable"):
      $_associatedProducts = $p->getTypeInstance()->getUsedProducts();
      if (count($_associatedProducts))
       {
        foreach($_associatedProducts as $prod)
         {
                            $p->getPrice(); //WRONG PRICE!!
                            // I save it somewhere
                        $size $prod->getAttributeText('size');
                        // I save it somewhere

          if (in_array($otherShopId, $prod->getStoreIds()))
           {
            $otherProd = Mage::getModel('catalog/product')->setStoreId($otherShopId)->load($prod->getId());

            $otherPrice = $otherProd->getPrice(); //WRONG PRICE!!
                            // I save it somewhere
            unset($otherPrice);
            $otherProd->clearInstance();
            unset($otherProd);
           }
         }
                     if(isset($otherConfProd)) {
                         $otherConfProd->clearInstance();
                            unset($otherConfProd);
                        }
       }

      unset($_associatedProducts);
    endif;
  }

Câu trả lời:


13

Dưới đây là cách bạn có thể nhận được giá của các sản phẩm đơn giản. Ví dụ này dành cho một sản phẩm có thể cấu hình duy nhất nhưng bạn có thể tích hợp nó trong vòng lặp của mình.
Có thể có một vấn đề với hiệu suất vì có rất nhiều foreachvòng lặp nhưng ít nhất bạn có một nơi để bắt đầu. Bạn có thể tối ưu hóa sau.

//the configurable product id
$productId = 126; 
//load the product - this may not be needed if you get the product from a collection with the prices loaded.
$product = Mage::getModel('catalog/product')->load($productId); 
//get all configurable attributes
$attributes = $product->getTypeInstance(true)->getConfigurableAttributes($product);
//array to keep the price differences for each attribute value
$pricesByAttributeValues = array();
//base price of the configurable product 
$basePrice = $product->getFinalPrice();
//loop through the attributes and get the price adjustments specified in the configurable product admin page
foreach ($attributes as $attribute){
    $prices = $attribute->getPrices();
    foreach ($prices as $price){
        if ($price['is_percent']){ //if the price is specified in percents
            $pricesByAttributeValues[$price['value_index']] = (float)$price['pricing_value'] * $basePrice / 100;
        }
        else { //if the price is absolute value
            $pricesByAttributeValues[$price['value_index']] = (float)$price['pricing_value'];
        }
    }
}

//get all simple products
$simple = $product->getTypeInstance()->getUsedProducts();
//loop through the products
foreach ($simple as $sProduct){
    $totalPrice = $basePrice;
    //loop through the configurable attributes
    foreach ($attributes as $attribute){
        //get the value for a specific attribute for a simple product
        $value = $sProduct->getData($attribute->getProductAttribute()->getAttributeCode());
        //add the price adjustment to the total price of the simple product
        if (isset($pricesByAttributeValues[$value])){
            $totalPrice += $pricesByAttributeValues[$value];
        }
    }
    //in $totalPrice you should have now the price of the simple product
    //do what you want/need with it
}

Mã ở trên đã được thử nghiệm trên CE-1.7.0.2 với dữ liệu mẫu Magento cho 1.6.0.0.
Tôi đã thử nghiệm trên sản phẩm Zolof The Rock And Roll Kẻ hủy diệt: Áo phông LOL LOL và nó có đường may để hoạt động. Tôi nhận được kết quả với giá tương tự như tôi thấy ở lối vào sau khi định cấu hình sản phẩm bằng SizeColor


3

Nó có thể được rằng bạn cần phải thay đổi $pđể $prodtrong các mã dưới đây?

 foreach($_associatedProducts as $prod)
         {
                            $p->getPrice(); //WRONG PRICE!!

2

Đây là cách tôi làm điều đó:

$layout = Mage::getSingleton('core/layout');
$block = $layout->createBlock('catalog/product_view_type_configurable');
$pricesConfig = Mage::helper('core')->jsonDecode($block->getJsonConfig());

Ngoài ra, bạn có thể chuyển đổi nó thành Varien_Object:

$pricesConfigVarien = new Varien_Object($pricesConfig);

Vì vậy, về cơ bản tôi đang sử dụng cùng một phương pháp được sử dụng để tính giá cho trang sản phẩm có thể định cấu hình của bạn trong lõi magento.


0

Không chắc chắn nếu điều này có ích hay không, nhưng nếu bạn thêm mã này vào trang có thể định cấu hình. Nó sẽ nhổ ra các thuộc tính siêu sản phẩm có thể định cấu hình với giá của từng tùy chọn và nhãn của nó.

   $json =  json_decode($this->getJsonConfig() ,true);


    foreach ($json as $js){
        foreach($js as $j){

      echo "<br>";     print_r($j['label']); echo '<br/>';

            foreach($j['options'] as $k){
                echo '<br/>';     print_r($k['label']); echo '<br/>';
                print_r($k['price']); echo '<br/>';
            }
        }
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.