English 中文(简体)
Magento 如何按方案更新捆绑产品
原标题:Magento How to update bundle product programmatically

我阅读了Csv文档中的产品库,我的剪辑含有 b产品库。 我正在通过剪辑数据,每张 b子的ku子,我想在它内添加我通过CSV通过的捆绑物品。

在这方面,我已经做了些什么。

ini_set( auto_detect_line_endings , TRUE);
$magentoPath = getcwd();
require_once ($magentoPath .  /includes/config.php );
require_once ($magentoPath .  /app/Mage.php );
Mage::app();

//read the csv
$bundleCsv = Mage::getBaseDir( var ). /import/bundleImport.csv ;
$rows = array_map( str_getcsv , file($bundleCsv));
$header = array_shift($rows);
$csv = array();

foreach ($rows as $row) {
    $csv[] = array_combine($header, $row);
}

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

echo Mage::app()->getStore()->getId(); exit;

foreach( $csv as $key => $val ){
    if( !isset($val[ sku ]) || empty($val[ sku ]) ||  $val[ sku ] ==    ){
        echo  Not Valid Sku ;
        continue;
    }

    $_product = Mage::getModel( catalog/product )->loadByAttribute( sku ,$val[ sku ]);

    $opt = $val[ bundle_options ];
    $optArr = explode( : , $opt);

    $bundleOptions = array();
    $bundleSelections = array();
    foreach ( $optArr as $key1 => $val1 ) {
        $valTemp = explode(  ( , $val1 );
        $title = trim($valTemp[0]);
        $bundleSub[$key1] = array(
                 title  => $title, // option title
                 option_id  => $key1,
                 delete  =>   ,
                 type  =>  select , // option type
                 required  =>  1 , // is option required
                 position  =>  1   // option position
        );

        $skuStr = trim($valTemp[1]);
        $skuStrTemp = explode(  ) , $skuStr );
        $skuStr = trim($skuStrTemp[0]);

        $skuTemp = explode(  + , $skuStr );

        foreach( $skuTemp as $key2 => $val2 ){
            $product = Mage::getModel( catalog/product );
            $id = Mage::getModel( catalog/product )->getResource()->getIdBySku($val2);

            if( $id ){
                $bundleSelectionsSub[$key2] = array ( // selection ID of the option (first product under this option (option ID) would have ID of 0, second an ID of 1, etc)
                         product_id  => $id, // if of a product in selection
                         delete  =>   ,
                         selection_price_value  =>  10 ,
                         selection_price_type  => 0,
                         selection_qty  => 1,
                         selection_can_change_qty  => 0,
                         position  => 0,
                         is_default  => 1
                );
                $product = null;
            }else{
                continue;
            }
        }
        $bundleSelections[$key1] = $bundleSelectionsSub;
    }

    $bundleOptions = $bundleSub;
    //echo  <pre> ; print_r($bundleOptions); exit;
    try{

        $_product->setCanSaveCustomOptions ( true );
        $_product->setCanSaveBundleSelections ( true );
        $_product->setAffectBundleProductSelections ( true );

        $_product->setBundleOptionsData ( $bundleOptions );
        $_product->setBundleSelectionsData ( $bundleSelections );

        $_product->save();
    }catch ( Exception $e ) {
        Mage::log ( $e->getMessage () );
        echo $e->getMessage ();
    }

    echo 1; exit;
    $_product = null;

}

但这使我看到错误。

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`aero_dev`.`catalog_product_bundle_option_value`, CONSTRAINT `FK_CAT_PRD_BNDL_OPT_VAL_OPT_ID_CAT_PRD_BNDL_OPT_OPT_ID` FOREIGN KEY (`option_id`) REFERENCES `catalog_product_bundle_option` (`opt), query was: INSERT INTO `catalog_product_bundle_option_value` (`option_id`, `store_id`, `title`) VALUES (?, ?, ?)

Any help would be appreciated.

最佳回答

我无法利用上述办法开展工作,因此,我试图撰写习惯问询,将捆绑物品放在现有的捆绑产品中。 当我看一看 d时,基本上有3张桌子用于制造dle。 这些

  • catalog_product_bundle_option
  • catalog_product_bundle_option_value
  • catalog_product_bundle_selection

I went through these tables and tried to looked for what magento puts If I create bundle items from magento admin.

So after some research I have done something like -

foreach( $csv as $key => $val ){
    if( !isset($val[ sku ]) || empty($val[ sku ]) ||  $val[ sku ] ==    ){
        echo  Not Valid Sku ;
        continue;
    }

    $_product = Mage::getModel( catalog/product )->loadByAttribute( sku ,trim($val[ sku ]));

    $_product->setCanSaveCustomOptions ( true );
    $_product->setCanSaveBundleSelections ( true );
    $_product->setAffectBundleProductSelections ( true );

    $opt = $val[ bundle_options ];
    $optArr = explode( : , $opt);

    //get the db write connection
    $connection = Mage::getSingleton( core/resource )->getConnection( core_write );
    $connection->beginTransaction();

    foreach ( $optArr as $key1 => $val1 ) {
        $valTemp = explode(  ( , $val1 );
        $title = trim($valTemp[0]);

        //insert into catalog_product_bundle_option with parent product id and type
        $__fields = array();
        $__fields[ parent_id ] = $_product->getId();
        $__fields[ required ] = 1;
        $__fields[ type ] =  select ;
        $__fields[ position ] = $key1+1;
        $connection->insert($catalog_product_bundle_option, $__fields);
        $opt_id = $connection->lastInsertId();
        $connection->commit();

        //inert into catalog_product_bundle_option_value with option id, store id, title 
        $__fields = array();
        $__fields[ option_id ] = $opt_id;
        $__fields[ store_id ] = 0;
        $__fields[ title ] = $title;
        $connection->insert($catalog_product_bundle_option_value, $__fields);
        $val_id = $connection->lastInsertId();
        $connection->commit();

        $skuStr = trim($valTemp[1]);
        $skuStrTemp = explode(  ) , $skuStr );
        $skuStr = trim($skuStrTemp[0]);

        $skuTemp = explode(  + , $skuStr );
        $pos = 1;
        foreach( $skuTemp as $key2 => $val2 ){
            $id = Mage::getModel( catalog/product )->getResource()->getIdBySku($val2);

            //insert into catalog_product_bundle_selection with option_id, parent product id, product id, position, is_default, selection_price_type, selection_price_value, selection_qty, selection_can_change_qty
            $__fields = array();
            $__fields[ option_id ] = $opt_id;
            $__fields[ parent_product_id ] = $_product->getId();
            $__fields[ product_id ] = $id;
            $__fields[ position ] = $pos + 1;
            $__fields[ selection_price_type ] = 0;
            $__fields[ selection_price_value ] = 10;
            $__fields[ selection_qty ] = 1;
            $__fields[ selection_can_change_qty ] = 0;
            $connection->insert($catalog_product_bundle_selection, $__fields);
            $connection->commit();
            $pos++;
        }
    }

    //update product
    $_product->save();
    $_product = null;

}

my csv contains 2 columns one is sku and another is bundle options example - sku - 12345678 bundle options - item01(ZIPLOCK18X24+ZIPLOCK16X20):item02(ZIPLOCK14X20+XEROMOCR84208X11)

in which item01 is the option title followed by simple products sku ZIPLOCK18X24, ZIPLOCK16X20 and : seperated incase of multiple options title.

我希望它可以帮助某人。

问题回答

暂无回答




相关问题
Brute-force/DoS prevention in PHP [closed]

I am trying to write a script to prevent brute-force login attempts in a website I m building. The logic goes something like this: User sends login information. Check if username and password is ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

定值美元

如何确认来自正确来源的数字。

Generating a drop down list of timezones with PHP

Most sites need some way to show the dates on the site in the users preferred timezone. Below are two lists that I found and then one method using the built in PHP DateTime class in PHP 5. I need ...

Text as watermarking in PHP

I want to create text as a watermark for an image. the water mark should have the following properties front: Impact color: white opacity: 31% Font style: regular, bold Bevel and Emboss size: 30 ...

How does php cast boolean variables?

How does php cast boolean variables? I was trying to save a boolean value to an array: $result["Users"]["is_login"] = true; but when I use debug the is_login value is blank. and when I do ...

热门标签