konfigurowalna cena produktu nie zmienia się

11

Stworzyłem konfigurowalną „torbę” produktu z atrybutem koloru. kolor: niebieski, czerwony.

wprowadź opis zdjęcia tutaj podczas tworzenia samego produktu przegapiłem dodanie ceny.

Więc cena nie zmienia się, a ja zmieniam kolory w opcji.

wprowadź opis zdjęcia tutaj

Proszę, pomóżcie mi rozwiązać ten problem za pomocą kodów ...

Manikandan
źródło
Czy dodałeś cenę i ponownie zindeksowałeś katalog i wyczyściłeś pamięć podręczną?
Amasty,
chcę dodać więcej 1500 produktów. pomyślałem o napisaniu skryptu automatyzacji, aby dodać cenę.
Manikandan
Możesz dodać produkty za pomocą niestandardowego skryptu lub importu, a następnie uruchomić ponowne indeksowanie dla płaskiego katalogu i cen.
Amasty,

Odpowiedzi:

6
<?php

class Websanity_Cataloginventory_Adminhtml_StockController extends Mage_Adminhtml_Controller_action
{
    /* 
     * initial layout
    */
    private function _init(){
        return $this->loadLayout();
    }

    /* 
     *
    */
    public function indexAction() {
        $this->_init();
        $this->renderLayout();

    }
    public $productIdsExcel = array();  
    public $productsExcel = array();
    public $updatedSku = array();
    public $unUpdatedSku = array();

    /* 
     *  Import product with csv file
    */
    public function importCatalogInventoryAction(){

        try
        {       
            $path = Mage::getBaseDir() . DS . 'var' . DS . 'websanity' . DS . 'tmp' . DS ;  //desitnation directory     
            $fname = $_FILES['stockfile']['name'];

            $arrayData = array();
            $file_path= $path . $fname;
            $arrayData = $this->excelToArray($file_path);

            foreach($arrayData as $row)
            {
                $productSku = $row["sku"];
                $attribute = $row["attribute"];
                $attributeValue = $row['attribute_value'];
                $price = $row['attribute_price'];

                $attributeId = $this->getAttributeId($attribute);   

                $productId = $this->getProductId($productSku);

                //Product-id collection from excel

                $this->productIdsExcel[] = $productId;

                //Price for each product and it attrivbutevalues collection from excel

                $this->productsExcel[$productId][$attribute][$attributeValue] = $price;


                $optionId = $this->attributeOption($attributeId, $attributeValue);


                $superAttrbuteId = $this->getSuperAttributeId($productId, $attributeId);

                $addPrices = $this->addPrices($superAttrbuteId, $optionId, $price);

            }


            $this->productIdsExcel = array_unique($this->productIdsExcel);
            $productIds = $this->productIdsExcel;

            foreach($productIds as $pid){

                $_product = Mage::getModel("catalog/product")->load($pid);
                $prod = $this->getAssociatedProducts($_product);

                foreach($prod as $simpleprod)
                {

                    if($simpleprod->getData('LIGHTSPEED_PRODUCT_SIZE'))
                    {
                        $sizeId = $simpleprod->getData('LIGHTSPEED_PRODUCT_SIZE');
                        $sizeAttributeValues = $this->getAttributeValues($sizeId);
                        foreach($sizeAttributeValues as $size){
                            $sizeValue = $size['value'];
                        }
                        $sizeAddtional = $this->productsExcel[$pid]['size'][$sizeValue];
                        $updatedSku[] = $simpleprod->getSku() ."- Size";
                    }
                    else
                    { 
                        $unUpdatedSku[] = $simpleprod->getSku() ."- Size";
                    }

                    if($simpleprod->getData('LIGHTSPEED_PRODUCT_COLOR'))
                    {
                        $colorId =$simpleprod->getData('LIGHTSPEED_PRODUCT_COLOR');
                        $colorAttributeValues = $this->getAttributeValues($colorId);
                        foreach($colorAttributeValues as $color){
                            $colorValue = $color['value'];
                        }
                        $colorAddtional = $this->productsExcel[$pid]['color'][$colorValue];
                            $updatedSku[] = $simpleprod->getSku() ."- Color";
                    }

                    else
                    { 
                        $unUpdatedSku[] = $simpleprod->getSku() ."- Color";
                    }

                    $base = $_product->getPrice();
                    $basePriceAddition = $base + $colorAddtional + $sizeAddtional;
                    $simpleProductPrice = $simpleprod->setPrice($basePriceAddition)->save();

                }
            }
            $update = "";
            $update .= "<h2>Records Updated</h2>";
            foreach($updatedSku as $updated)
            {
                $update .= $updated ."<br/>";

            }

            $update .= "<h2>Records Not Updated</h2>";
            foreach($unUpdatedSku as $unUpdated)
            {
                $update .= $unUpdated ."<br/>";

            }
            Mage::getSingleton('adminhtml/session')->setMyValue($update);
            $this->_redirectUrl( Mage::helper('adminhtml')->getUrl('*/adminhtml_stock/') );
        }
        catch (Exception $e)
            {
                Mage::getSingleton('adminhtml/session')->addError( $e->getMessage() );
            }
    }


    public function getAssociatedProducts($productId)
    {
        try{
            $conf = Mage::getModel('catalog/product_type_configurable')->setProduct($productId);
            $prod = $conf->getUsedProductCollection()
            ->addAttributeToSelect('*')
            ->addFilterByRequiredOptions();
                return $prod;
        }
        catch(Exception $e){
            echo $e->getMessage();
        }
    }


    public function getAttributeValues($attributeId)
    {
        try{
            $resource = Mage::getSingleton('core/resource');
            $readConnection = $resource->getConnection('core_read');
            $table = $resource->getTableName('eav/attribute_option');
            $query = 'SELECT value FROM xyzeav_attribute_option_value WHERE option_id=' .$attributeId;

            $results = $readConnection->fetchAll($query);
            return $results;
        }
        catch(Exception $e){
            echo $e->getMessage();

        }
    }




    public function excelToArray($file_path)
    {
        try{
            chmod($file_path,0777);
            error_reporting(E_ALL ^ E_NOTICE);
            require_once Mage::getBaseDir().'/excel_reader2.php';

            $excel_reader = new Spreadsheet_Excel_Reader();
            $excel_reader->setUTFEncoder('iconv');
            $excel_reader->setOutputEncoding('CP1251');
            $file=$excel_reader->read($file_path,"UTF-16");
            $file_row=2;
            $column_count=$excel_reader->sheets[0]['numCols'];
            $row_count=$excel_reader->sheets[0]['numRows'];     
            $excelData = array();
            for($file_row;$file_row<=$excel_reader->sheets[0]['numRows'];$file_row++) 
            {   

                $excelData[$file_row]["sku"] = $excel_reader->sheets[0]['cells'][$file_row][1];
                $excelData[$file_row]["attribute"] = $excel_reader->sheets[0]['cells'][$file_row][2];
                $excelData[$file_row]["attribute_value"] = $excel_reader->sheets[0]['cells'][$file_row][3];
                $excelData[$file_row]["attribute_price"] = $excel_reader->sheets[0]['cells'][$file_row][4];
                if($excelData == "")
                {
                    break;
                }

            }
            return $excelData;
        }
        catch(Exception $e){
            echo $e->getMessage();
        }
    }


    public function attributeOption($attributeId, $color)
    {
        try{
            $resource = Mage::getSingleton('core/resource');
            $readConnection = $resource->getConnection('core_read');
            $table = $resource->getTableName('eav/attribute_option');

            $query = 'SELECT option_id FROM xyzeav_attribute_option_value WHERE value="'.$color.'" AND option_id in (SELECT option_id FROM ' . $table . ' WHERE attribute_id = '
            . (int)$attributeId.')';

            $results = $readConnection->fetchAll($query);
            return $results[0]['option_id'];
        }
        catch(Exception $e){
            echo $e->getMessage();
        }
    }


    public function getSuperAttributeId($productId, $attr1)
    {
        try{
            $getSuperAttributeId = Mage::getModel('catalog/product_type_configurable_attribute')->getCollection()
            ->addFieldToFilter('product_id', $productId)
            ->addFieldToFilter('attribute_id', $attr1)->getData();

            return  $getSuperAttributeId[0]['product_super_attribute_id'];                 
        }
        catch(Exception $e){
            echo $e->getMessage();
        }

    }


    public function addPrices($superAttrbuteId, $optionId, $price)
    {
        try{
            $resource = Mage::getSingleton('core/resource');
            $readConnection = $resource->getConnection('core_read');
            $writeConnection = $resource->getConnection('core_write');

            $query = 'SELECT * FROM xyzcatalog_product_super_attribute_pricing WHERE product_super_attribute_id='.$superAttrbuteId.' AND value_index='.$optionId;
            $results = $readConnection->fetchAll($query);

            $getExistingPrice = $results[0]['value_id'];

            if(!$getExistingPrice)
            {
                $insertQuery = 'INSERT INTO xyzcatalog_product_super_attribute_pricing (product_super_attribute_id, value_index, is_percent, pricing_value, website_id) VALUES('.$superAttrbuteId.','.$optionId.',"0",'.$price.',"0")';
                $QueryValue = $writeConnection->query($insertQuery);
                if(!$QueryValue)
                {
                    $result = "Mismatch Values";
                }
                else
                {
                    $result = "Inserted";
                }
            }
            else{

                $new_query = 'UPDATE xyzcatalog_product_super_attribute_pricing SET pricing_value='.$price.' WHERE product_super_attribute_id='.$superAttrbuteId.' AND value_index='.$optionId;
                $QueryValue = $writeConnection->query($new_query);

                if($QueryValue)
                {
                    $result = "Mismatch Values";
                }
                else
                {
                    $result = "Updated";
                }
            }
            return $result;
        }
        catch(Exception $e){
            echo $e->getMessage(addPrices,'Mismatch Values');
        }
    }

    function printError($fromFunction, $message){
        echo "<hr />";
            echo $fromFunction;
            echo $message;
        echo "<hr />";
    }

    public function getProductId($productSku)
    {
        try{
            $productId = Mage::getModel('catalog/product')->getCollection()
            ->addFieldToFilter('type_id', 'configurable')                           
            ->addFieldToFilter('sku', $productSku)->getFirstItem()->getId();
                return $productId;

        }
        catch(Exception $e){
            echo $e->getMessage();
        }
    }


    public function getAttributeId($attribute)
    {
        try{
            $resource = Mage::getSingleton('core/resource');
            $readConnection = $resource->getConnection('core_read');
            $superQuery ='select b.attribute_id from xyzcatalog_product_super_attribute_label a inner join xyzcatalog_product_super_attribute b on a.product_super_attribute_id  = b.product_super_attribute_id where a.value ="'.$attribute.'"' ;

            $superAttribute = $readConnection->fetchAll($superQuery);
            foreach($superAttribute as $super)
            {
                $superId=$super['attribute_id'];
            }
            return $superId;
        }
        catch(Exception $e){
            echo $e->getMessage();
        }
    }


    public function getParentProductId()
    {
        try{
            $resource = Mage::getSingleton('core/resource');
            $readConnection = $resource->getConnection('core_read');
            $childQuery = 'select product_id from xyzcatalog_category_product_index  where is_parent = 1';
            $childResults = $readConnection->fetchAll($childQuery);
                return $childResults;
        }
        catch(Exception $e){
            echo $e->getMessage();
        }
    }

}           

?>
  • Próbowałem tego kodu w moim module niestandardowym. przesłałem dane za pomocą Excela SKU, atrybutu, etykiety, ceny.
  • Użyłem czytnika programu Excel do pobrania wartości
Manikandan
źródło
2

core magento nie obsługuje uzyskiwania cen za inną konfigurację od prostych produktów, zamiast tego musisz ją skonfigurować, dodając powiązane produkty do produktu config.

Istnieje kilka rozszerzeń, które to robią, czego się spodziewasz, np. Proste konfigurowalne produkty , ale bądź ostrożny, wygląda na to, że nie jest już utrzymywany ...

Fabian Blechschmidt
źródło
wypróbowałem powyższy kod, aby dodać cenę powiązanych produktów
Manikandan