Magento के विन्यास योग्य उत्पाद की कीमत सरल उत्पाद की कीमत से अधिक है


21

मेरे पास पहचान के तौर पर स्थापित किए गए उत्पाद हैं (जहां तक ​​मैं बता सकता हूं) और वे सभी एक सार्वभौमिक सीएसवी टेम्पलेट के साथ आयात किए गए थे।

  • विन्यास योग्य मूल्य 29.99 है
  • एसोसिएटेड सिंपल प्रोडक्ट शॉर्ट स्लीव 29.99 है
  • एसोसिएटेड सिंपल प्रोडक्ट लॉन्ग स्लीव 39.99 है

एक चालान ने हाल ही में एक लंबी आस्तीन के उत्पाद ( ZTWS-SBLS-XL ) को बिल किया है जिसकी कीमत 29.99 के विन्यास उत्पाद के साथ 39.99 है। मैं विन्यास योग्य उत्पाद मूल्य को ओवरराइड करने के लिए साधारण उत्पाद मूल्य को कैसे मजबूर कर सकता हूं? नीचे दिए गए दोनों उत्पादों को उनके माता-पिता के विन्यास योग्य उत्पाद और साधारण उत्पादों के रूप में पहचाना जाता है।

चालान:

Item             Sku             Qty    Subtotal
Item one         ZLOB-SBLS-XL    1      $39.99
Item Two         ZTWS-SBLS-XL    1      $29.99

EDIT: अभी भी इसे हल करने पर काम कर रहा है। Magento किस कारण से विन्यास योग्य उत्पाद मूल्य या संबंधित उत्पाद विशेषता मूल्य पर सरल उत्पाद मूल्य को पसंद करेगा?


क्या मुझे मदद मिल सकती है magento.stackexchange.com/q/291238/57334 @TylersSN
zus

जवाबों:


18

जब आप एक विन्यास योग्य उत्पाद बनाते हैं तो इससे कोई फर्क नहीं पड़ता कि साधारण उत्पादों की कीमत क्या है - इन कीमतों को पूरी तरह से नजरअंदाज कर दिया जाता है। इसलिए यदि आप एक साधारण उत्पाद A को बेचना चाहते हैं जिसकी कीमत $ 29.99 है और एक साधारण उत्पाद B ($ 39.99) है तो आपको एक विन्यास योग्य उत्पाद बनाना होगा, इसकी कीमत $ 29.99 निर्धारित करें और संबद्ध उत्पाद टैब खोलें । वे उत्पाद जोड़ें जिन्हें आप इस कॉन्फ़िगर करने योग्य उत्पाद के साथ जोड़ना चाहते हैं। उन्हें जोड़ने के बाद सुपर उत्पाद विशेषताओं नाम का एक ब्लॉक दिखाई देता है जिसमें विकल्प और मूल्य अंतर होते हैं। उत्पाद छोड़ दो एक कीमत खाली और 10 (+ $ 10) उत्पाद बी मूल्य क्षेत्र और voila करने के लिए: विभिन्न सरल उत्पाद अलग कीमत है।

वास्तव में एक एक्सटेंशन है जो आपको कीमत के अंतर के बजाय सरल उत्पाद की कीमतों का उपयोग करने की अनुमति देता है, लेकिन इसे स्थापित करने के लिए मुश्किल है। चूंकि यह मुफ्त विस्तार है, मुझे आशा है कि कोई भी मेरे बारे में शिकायत नहीं करता है कि मैं यहां इसकी लिंक चिपका रहा हूं:

https://github.com/organicinternet/magento-configurable-simple


आपने मेरी समस्या को समझने में मेरी मदद की। मैंने अपनी मूल्य निर्धारण योजना को अपडेट कर दिया है ताकि उत्पादों की कीमत 29.99 हो जाए। संबंधित उत्पादों से हम $ 10 से लंबी आस्तीन की विशेषताओं और $ 2 के लिए = = 2x विशेषताओं से निपटते हैं। मजे की बात यह है कि यह कुछ उत्पादों के लिए काम करता है जबकि यह अन्य विन्यास योग्य उत्पादों पर काम नहीं करता है।
टायलर एसएन

जिन उत्पादों पर यह काम नहीं करता है, उनके लिए magento सरल उत्पाद की कीमत को कॉन्फ़िगर करने योग्य कीमत पर पसंद करता है चाहे वह उत्पाद पर या संबंधित उत्पादों की कीमत पर निर्धारित हो।
टायलरएसएन

5
विस्तार बकवास और छोटी गाड़ी है।
एलिजा फालना

क्या मुझे विन्यास योग्य उत्पादों के संबंध में मदद मिल सकती है magento.stackexchange.com/q/291238/57334 @Pronto
zus

16

इसलिए, मैं नीचे दिए गए कोड का उपयोग ऑर्गेनिक इंटरनेट सरल विन्यास उत्पादों जैसे विस्तार के साथ करता हूं।

नीचे दिया गया कोड गाड़ी / चेकआउट प्रक्रिया के लिए है, अनिवार्य रूप से, यह विन्यास योग्य मूल्य मॉडल का एक अद्यतन है जो उत्पाद में कार्ट में जोड़े जाने की स्थिति में एक साधारण उत्पाद के लिए मूल्य गणना से गुजरता है --- यह समाधान प्रदर्शित नहीं करता है मूल्य निर्धारण उत्पाद पृष्ठ पर ही (हालांकि कई एक्सटेंशन हैं जो पहले से ही ऐसा करते हैं)।

अपडेट ऐप / कोड / कोर / मैज / कैटलॉग / मॉडल / उत्पाद / प्रकार / विन्यास / मूल्य.php (आदर्श रूप से आप ऐप / कोड / स्थानीय में एक्सटेंशन या स्थानीय ओवरराइड का उपयोग करते हैं)

विधि को अपडेट करें: getFinalPrice, में बदलें

public function getFinalPrice($qty=null, $product)
{
    //Start edit
    $selectedAttributes = array();
    if ($product->getCustomOption('attributes')) {
        $selectedAttributes = unserialize($product->getCustomOption('attributes')->getValue());
    }
    //End edit
    if (sizeof($selectedAttributes)) return $this->getSimpleProductPrice($qty, $product);

    if (is_null($qty) && !is_null($product->getCalculatedFinalPrice())) {
        return $product->getCalculatedFinalPrice();
    }

    $basePrice = $this->getBasePrice($product, $qty);
    $finalPrice = $basePrice;
    $product->setFinalPrice($finalPrice);
    Mage::dispatchEvent('catalog_product_get_final_price', array('product' => $product, 'qty' => $qty));
    $finalPrice = $product->getData('final_price');

    $finalPrice += $this->getTotalConfigurableItemsPrice($product, $finalPrice);
    $finalPrice += $this->_applyOptionsPrice($product, $qty, $basePrice) - $basePrice;
    $finalPrice = max(0, $finalPrice);

    $product->setFinalPrice($finalPrice);
    return $finalPrice;
}

फिर getFinalPrice के ठीक नीचे इस फ़ंक्शन को जोड़ें:

public function getSimpleProductPrice($qty=null, $product)
    {
        $cfgId = $product->getId();
        $product->getTypeInstance(true)
            ->setStoreFilter($product->getStore(), $product);
        $attributes = $product->getTypeInstance(true)
            ->getConfigurableAttributes($product);
        $selectedAttributes = array();
        if ($product->getCustomOption('attributes')) {
            $selectedAttributes = unserialize($product->getCustomOption('attributes')->getValue());
        }
        $db = Mage::getSingleton('core/resource')->getConnection('core_read');
        $dbMeta = Mage::getSingleton('core/resource');
        $sql = <<<SQL
SELECT main_table.entity_id FROM {$dbMeta->getTableName('catalog/product')} `main_table` INNER JOIN
{$dbMeta->getTableName('catalog/product_super_link')} `sl` ON sl.parent_id = {$cfgId}
SQL;
        foreach($selectedAttributes as $attributeId => $optionId) {
            $alias = "a{$attributeId}";
            $sql .= ' INNER JOIN ' . $dbMeta->getTableName('catalog/product') . "_int" . " $alias ON $alias.entity_id = main_table.entity_id AND $alias.attribute_id = $attributeId AND $alias.value = $optionId AND $alias.entity_id = sl.product_id";
        }
        $id = $db->fetchOne($sql);
        return Mage::getModel("catalog/product")->load($id)->getFinalPrice($qty);
    }

आप देख सकते हैं, अगर उपयोगकर्ता ने उत्पाद को "अनुकूलित" किया है (IE, चयनित विन्यास योग्य विकल्प) तो हम संबंधित सरल उत्पाद का निर्धारण करते हैं और उसके मूल्य निर्धारण मॉडल पर नियंत्रण रखते हैं, अन्यथा यदि उत्पाद "अनुकूलित" नहीं है (IE, हम 'उत्पाद पृष्ठ पर पुनः ब्राउज़ करना) हम सामान्य रूप से आगे बढ़ते हैं


यह जवाब प्रतिभाशाली है, ब्रावो!
पिक्सीमेडिया

5

Magento संस्करण 1.9.2.2 का उपयोग करना

थोड़ा बेहतर समाधान हो सकता है, कोर को हैक करने के बजाय 'ऑब्जर्वर' के दृष्टिकोण का उपयोग करें या यहां तक ​​कि डिफ़ॉल्ट मॉडल मूल्य वर्ग यानी ऐप / कोड / कोर / मैज / कैटलॉग / मॉडल / उत्पाद / प्रकार / विन्यास / मूल्य.php को ओवरराइड करें।

आपको बस इतना करना है कि अपने नए बनाए गए ऑब्ज़र्वर के भीतर एलन के कोड का उपयोग करना है, वापसी के बजाय एकमात्र अंतर है

Mage::getModel("catalog/product")->load($id)->getFinalPrice($qty);

इसे निम्न के साथ बदलें:

$fp = Mage::getModel("catalog/product")->load($id)->getFinalPrice($qty);
return $product->setFinalPrice($fp);

इस Observer.php का पालन करें

class YourFolderinLOCAL_YourModulename_Model_Observer 
{

     public function simpleProductPrice(Varien_Event_Observer $observer) {
        $event   = $observer->getEvent();
        $product = $event->getProduct();
        $qty     = $event->getQty();
        //Mage::log($observer, null, 'confPricing.log');
        // process percentage discounts only for simple products


            $selectedAttributes = array();
            if ($product->getCustomOption('attributes')) {
                Mage::log('yes-----', null, 'confPricing.log');
                $selectedAttributes = unserialize($product->getCustomOption('attributes')->getValue());
            }

            if (sizeof($selectedAttributes)) return $this->getSimpleProductPrice($qty, $product);



    }


    public function getSimpleProductPrice($qty=null, $product)
    {

        $cfgId = $product->getId();
        $product->getTypeInstance(true)
            ->setStoreFilter($product->getStore(), $product);
        $attributes = $product->getTypeInstance(true)
            ->getConfigurableAttributes($product);
        $selectedAttributes = array();
        if ($product->getCustomOption('attributes')) {
            $selectedAttributes = unserialize($product->getCustomOption('attributes')->getValue());
        }
        $db = Mage::getSingleton('core/resource')->getConnection('core_read');
        $dbMeta = Mage::getSingleton('core/resource');
        $sql = <<<SQL
SELECT main_table.entity_id FROM {$dbMeta->getTableName('catalog/product')} `main_table` INNER JOIN
{$dbMeta->getTableName('catalog/product_super_link')} `sl` ON sl.parent_id = {$cfgId}
SQL;
        foreach($selectedAttributes as $attributeId => $optionId) {
            $alias = "a{$attributeId}";
            $sql .= ' INNER JOIN ' . $dbMeta->getTableName('catalog/product') . "_int" . " $alias ON $alias.entity_id = main_table.entity_id AND $alias.attribute_id = $attributeId AND $alias.value = $optionId AND $alias.entity_id = sl.product_id";
        }
        $id = $db->fetchOne($sql);
        //Mage::log(Mage::getModel("catalog/product")->load($id)->getFinalPrice($qty), null, 'confPricing.log');
        //return 
        $fp = Mage::getModel("catalog/product")->load($id)->getFinalPrice($qty);
        return $product->setFinalPrice($fp);
    }


}

config.xml

<?xml version="1.0"?>
<config> 
 <modules>
        <YourFolderinLOCAL_YourModulename>
            <version>0.0.1</version>
        </YourFolderinLOCAL_YourModulename>
    </modules>
    <global>
        <models>
            <YourFolderinLOCALYourModulename><!-- Al lovwercase in my case -->
                <class>Your_Model</class><!-- not needed in my case -->
            </YourFolderinLOCALYourModulename>
        </models>

    </global>
    <frontend>
    <events>
            <catalog_product_get_final_price>
                <observers>
                    <YourFolderinLOCAL_YourModulename_model_observer>
                        <type>singleton</type>
                        <class> YourFolderinLOCAL_YourModulename_Model_Observer</class>
                        <method>simpleProductPrice</method>
                    </YourFolderinLOCAL_YourModulenameg_model_observer>
                </observers>
            </catalog_product_get_final_price>

        </events>
        </frontend>
</config>

आशा है कि यह समस्या को हल करता है .. :)


2

यदि साधारण उत्पाद अलग-अलग मूल्य के होते हैं, लेकिन निश्चित मूल्य या प्रतिशत के बिना विन्यास उत्पाद के खिलाफ सेट-अप होते हैं, तो विन्यास योग्य उत्पाद की कीमत ली जाएगी। कोई फर्क नहीं पड़ता कि कौन से साधारण उत्पाद खरीदे गए हैं, उनकी कीमत को ध्यान में नहीं रखा गया है।

इसे अपडेट करने के लिए बस व्यवस्थापक अनुभाग में मूल उत्पाद में जाएं, फिर टैब के तहत Associated Productsआप माता-पिता उत्पादों की कीमत पर एक अतिरिक्त मूल्य जोड़ने के लिए प्रत्येक बाल उत्पाद की कीमत को अपडेट कर सकते हैं।


हाय डेविड, मैंने यह कोशिश की है। मेरे वर्तमान प्रयास में विन्यास योग्य उत्पाद की कीमत $ 0.00 और एसोसिएटेड उत्पादों के खंड से कम आस्तीन की विशेषताओं पर $ 29.99 की एक निश्चित कीमत और लंबी आस्तीन की शर्ट पर $ 39.99 सेट करने का प्रयास है। जो भी कारण के लिए, अभी भी एक एकल विन्यास योग्य उत्पाद (लंबी आस्तीन) है जो निर्धारित मूल्य और साधारण उत्पाद के भीतर ही सेट होने के बावजूद $ 29.99 चार्ज करना चाहता है। आपकी प्रतिक्रिया के लिए धन्यवाद।
टायलरएसएन

@ user1812580 क्या आप इस उत्पाद को व्यवस्थापक या केवल सामने के अंत में देख सकते हैं?
डेविड मैनर्स

मैं इसे विन्यास योग्य उत्पाद से जुड़े एक अलग सरल उत्पाद के रूप में देख सकता हूं।
टायलरएसएन

हाय डेविड, मैंने @Pronto को अपनी प्रतिक्रिया में मूल्य निर्धारण योजना को अद्यतन किया है । उम्मीद है कि आप मेरी मदद करेंगे?
टायलरएसएन

@DavidManners मैंने विन्यास योग्य उत्पाद पर सुपर विशेषताएँ विन्यास अनुभाग के माध्यम से अपने मूल्य निर्धारण को अपडेट करने की कोशिश की है। हालाँकि, जब आप भिन्नता पर क्लिक करते हैं, तो मूल्य निर्धारण केवल शीर्ष मूल्य-जानकारी बॉक्स (जहां sku, उत्पाद का नाम आदि) पर अपडेट होता है। कैसे अद्यतन करने के लिए कम कीमत बॉक्स पाने के लिए पर कोई सुझाव?
एलवा सैंडोवल

2

मेरे पास भी यही समस्या है और मैंने नीचे दिए गए कोड का उपयोग करके तय किया है। यह एडमिन की तरफ से काम करेगा, अगर आप एडमिन से ऑर्डर लेंगे (टेलिफोनिक ऑर्डर के लिए)

इस घटना को ध्यान से देखें,

sales_quote_item_set_product 

और अपने Observer.php में कोड जोड़ें

public function loadQuote(Varien_Event_Observer $observer)
            {

                $event      = $observer->getEvent();
                $quote_item = $event->getQuoteItem();
                $storeId    = $quote_item->getStoreId();
                $item       = $observer->getQuoteItem();
                $product    = $observer->getProduct();
                $sku        = $product->getSku();
                $productDetails     =  Mage::getModel('catalog/product')
                            ->setStoreId($storeId)
                            ->loadByAttribute('sku',$sku);

                $price      = $productDetails->getPrice();
                $sprice     = $productDetails->getFinalPrice();

                $item->setOriginalCustomPrice($sprice);
                $item->setOriginalPrice($price);

            }

यह संबद्ध उत्पाद मूल्य प्राप्त करेगा और बोली में बचाया जाएगा।


+1 के लिए $item->setOriginalCustomPrice($sprice);और $item->setOriginalPrice($price);, यह कई विन्यास योग्य वस्तुओं की अनुमति देता है जो एक ही उत्पाद के लिए, कार्ट में, विभिन्न कीमतों के साथ इंगित करते हैं।
निलॉक्ट

2

सुपर विशेषता मूल्य को बदलने के लिए कृपया नीचे दिए गए चरणों का पालन करें

पहले पर्यवेक्षकों "कैटलॉग_प्रोडक्ट_गेट_फिनाल_प्राइस" का उपयोग करें। पर्यवेक्षकों को इस तरह बनाएं:

अपना मॉड्यूल config.xml खोलें और नीचे दिए गए कोड का उपयोग करें:

<events>
    <catalog_product_get_final_price>
        <observers>
            <Setblue_Banner_Model_Observer>
                <type>singleton</type>
                <class>Setblue_Banner_Model_Observer</class>
                <method>getFinalPrice</method>
            </Setblue_Banner_Model_Observer>
        </observers>
    </catalog_product_get_final_price>
</events>

अब Observer.php फाइल को मॉडल में बनाएं और कोड के नीचे पास्ट करें

<?php
class Setblue_Banner_Model_Observer
{

 public function getFinalPrice(Varien_Event_Observer $observer) {

  $event   = $observer->getEvent();
        $product = $event->getProduct();
        $qty     = $event->getQty();

  $selectedAttributes = array();
  if ($product->getCustomOption('attributes')) {
   Mage::log('yes-----', null, 'confPricing.log');
   $selectedAttributes = unserialize($product->getCustomOption('attributes')->getValue());
  }

  if (sizeof($selectedAttributes)) return $this->getSimpleProductPrice($qty, $product);

    }

 public function getSimpleProductPrice($qty=null, $product)
    {

  $cfgId = $product->getId();
        $product->getTypeInstance(true)
            ->setStoreFilter($product->getStore(), $product);
        $attributes = $product->getTypeInstance(true)
            ->getConfigurableAttributes($product);
        $selectedAttributes = array();
        if ($product->getCustomOption('attributes')) {
            $selectedAttributes = unserialize($product->getCustomOption('attributes')->getValue());
        }
        $db = Mage::getSingleton('core/resource')->getConnection('core_read');
        $dbMeta = Mage::getSingleton('core/resource');
        $sql = <<<SQL
SELECT main_table.entity_id FROM {$dbMeta->getTableName('catalog/product')} `main_table` INNER JOIN
{$dbMeta->getTableName('catalog/product_super_link')} `sl` ON sl.parent_id = {$cfgId}
SQL;
        foreach($selectedAttributes as $attributeId => $optionId) {
            $alias = "a{$attributeId}";
            $sql .= ' INNER JOIN ' . $dbMeta->getTableName('catalog/product') . "_int" . " $alias ON $alias.entity_id = main_table.entity_id AND $alias.attribute_id = $attributeId AND $alias.value = $optionId AND $alias.entity_id = sl.product_id";
        }
        $id = $db->fetchOne($sql);
        //Mage::log(Mage::getModel("catalog/product")->load($id)->getFinalPrice($qty), null, 'confPricing.log');
        //return
        $fp = Mage::getModel("catalog/product")->load($id)->getFinalPrice($qty);
        return $product->setFinalPrice($fp);
 }

}

?>

अब खुले एप्लिकेशन / डिज़ाइन / फ्रंटएंड / डिफ़ॉल्ट / yourtheme / टेम्पलेट / कैटलॉग / उत्पाद / दृश्य / प्रकार / विकल्प / configurable.phtml और फ़ाइल में कहीं भी नीचे कोड पेस्ट करें

<ul class="productIds" style="display:none;">
    <?php
        $configurableProduct = Mage::getModel('catalog/product')->load($_product->getId());
        $childProducts = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null,$configurableProduct);
        foreach($childProducts as $child) {
            $_productObj = Mage::getModel('catalog/product')->load($child->getId());
            ?>
            <li id='simple_<?php echo $child->getId(); ?>'><?php echo Mage::helper('core')->currency($_productObj->getFinalPrice()); ?></li>
        <?php   
        }
    ?>
</ul>

अब खुले हुए js / varien / configurable.js और नीचे दिए गए के रूप में reloadPrice फ़ंक्शन को बदलें या आप इस फ़ंक्शन को विदाई से बदल सकते हैं

reloadPrice: function(){
    if (this.config.disablePriceReload) {
        return;
    }
    var price    = 0;
    var oldPrice = 0;
    for(var i=this.settings.length-1;i>=0;i--){
        var selected = this.settings[i].options[this.settings[i].selectedIndex];
        if(selected.config){
            price    += parseFloat(selected.config.price);
            oldPrice += parseFloat(selected.config.oldPrice);
        }
    }

    /* Edit Code By Chandresh Rana*/

     //optionsPrice.changePrice('config', {'price': price, 'oldPrice': oldPrice});
     optionsPrice.reload();

     var existingProducts = new Object();
     for(var i=this.settings.length-1;i>=0;i--)
     {
         var selected = this.settings[i].options[this.settings[i].selectedIndex];
         if(selected.config)
         {
            for(var iproducts=0;iproducts<selected.config.products.length;iproducts++)
            {
                var usedAsKey = selected.config.products[iproducts]+"";
                if(existingProducts[usedAsKey]==undefined)
                {
                    existingProducts[usedAsKey]=1;
                }
                else
                {
                    existingProducts[usedAsKey]=existingProducts[usedAsKey]+1;
                }
             }
         }
     }

     for (var keyValue in existingProducts)
     {
        for ( var keyValueInner in existingProducts)
         {
            if(Number(existingProducts[keyValueInner])<Number(existingProducts[keyValue]))
            {
                delete existingProducts[keyValueInner];
            }
         }
     }

     var sizeOfExistingProducts=0;
     var currentSimpleProductId = "";
     for ( var keyValue in existingProducts)
     {
        currentSimpleProductId = keyValue;
        sizeOfExistingProducts=sizeOfExistingProducts+1
     }

     if(sizeOfExistingProducts==1)
     {
        if($('product-price-'+this.config.productId)){
            $('product-price-'+this.config.productId).innerHTML = jQuery("#simple_"+currentSimpleProductId).html();
        }

     }
    // End Code By Chandresh Rana

    return price;

    if($('product-price-'+this.config.productId)){
        $('product-price-'+this.config.productId).innerHTML = price;
    }
    this.reloadOldPrice();
},

से लिया गया कोड: http://chandreshrana.blogspot.in/2016/03/set-simple-product-price-instead-of.html


मैं मदद संबंध विन्यास उत्पादों मिल सकता है magento.stackexchange.com/q/291238/57334 @Chandresh राणा
zus
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.