รับราคาของตัวเลือกผลิตภัณฑ์ที่กำหนดค่าได้


9

ฉันต้องการส่งออกผลิตภัณฑ์ทั้งหมดที่มีราคาจาก Magento 1.7

สำหรับผลิตภัณฑ์ที่เรียบง่ายไม่มีปัญหา แต่สำหรับผลิตภัณฑ์ที่กำหนดค่าได้ฉันมีปัญหานี้: ราคาที่ส่งออกเป็นราคาที่กำหนดไว้สำหรับผลิตภัณฑ์อย่างง่ายที่เกี่ยวข้อง! อย่างที่คุณทราบวีโอไอพีจะไม่สนใจราคานี้และใช้ราคาของผลิตภัณฑ์ที่สามารถกำหนดค่าได้และการปรับสำหรับตัวเลือกที่เลือก

ฉันสามารถรับราคาผลิตภัณฑ์หลัก แต่ฉันจะคำนวณความแตกต่างได้อย่างไรขึ้นอยู่กับตัวเลือกที่เลือก

รหัสของฉันมีลักษณะดังนี้:

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;
  }

คำตอบ:


13

นี่คือวิธีที่คุณจะได้รับราคาของผลิตภัณฑ์ที่เรียบง่าย ตัวอย่างสำหรับผลิตภัณฑ์ที่กำหนดค่าได้เพียงอย่างเดียว แต่คุณสามารถรวมไว้ในลูปของคุณได้
อาจมีปัญหากับประสิทธิภาพเนื่องจากมีforeachลูปมากมาย แต่อย่างน้อยคุณก็มีสถานที่ที่จะเริ่ม คุณสามารถปรับให้เหมาะสมในภายหลัง

//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
}

รหัสข้างต้นได้รับการทดสอบกับ CE-1.7.0.2 พร้อมกับข้อมูลตัวอย่าง Magento สำหรับ 1.6.0.0
ฉันทดสอบผลิตภัณฑ์Zolof The Rock And Roll Destroyer: เสื้อยืด LOL Catและมันทำงานได้ดี ฉันได้รับผลลัพธ์ตามราคาเดียวกับที่ฉันเห็นในส่วนหน้าหลังจากกำหนดค่าผลิตภัณฑ์โดยSizeและColor


3

มันอาจจะเป็นที่คุณจำเป็นต้องมีการเปลี่ยนแปลง$pไป$prodในโค้ดด้านล่างนี้ได้หรือไม่

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

2

นี่คือวิธีที่ฉันทำ:

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

นอกจากนี้คุณสามารถแปลงเป็น Varien_Object:

$pricesConfigVarien = new Varien_Object($pricesConfig);

ดังนั้นโดยทั่วไปฉันใช้วิธีเดียวกันกับที่ใช้ในการคำนวณราคาสำหรับหน้าผลิตภัณฑ์ที่สามารถกำหนดค่าได้ในแกนกลางวีโอไอพี


0

ไม่แน่ใจว่าสิ่งนี้จะช่วยได้หรือไม่ แต่ถ้าคุณเพิ่มรหัสนี้ในหน้า configurable.phtml ควรคายแอตทริบิวต์ super ผลิตภัณฑ์ที่กำหนดค่าได้ด้วยราคาของแต่ละตัวเลือกและป้ายกำกับของมัน

   $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/>';
            }
        }
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.