У меня есть много продуктов с настраиваемыми параметрами, теперь у меня есть требование обновить только настраиваемые параметры через файл csv. так как мы можем сделать это программно?
Я думаю, что это тоже полезно …
Если вы настраиваете продукты.
<?php $magePath = 'app/Mage.php'; require_once $magePath; Varien_Profiler::enable(); Mage::setIsDeveloperMode(true); ini_set('display_errors', 1); umask(0); Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); $product_ids = array(1,2,167); $productmodel = Mage::getModel('catalog/product'); foreach ($product_ids as $product_id) { /**i use this two arrays for collecte value because i uses inside setData of current option*/ $cos=array(); $co=array(); $product = $productmodel->load($product_id); $options = $product->getProductOptionsCollection(); if (isset($options)) { foreach ($options as $o) { $title = $o->getTitle(); /** this block is for changing information of specific option from collection options inside current product the save method for this option in end of code */ if ($title == "Line 1/Front") { $o->setProduct($product); $o->setTitle("Line 1/Ftont"); $o->setType("drop_down"); $o->setIsRequire(1); $o->setSortOrder(0); } /** this block for update or add information of specific value inside current option */ $optionType = $o->getType(); //test type if ($optionType == "drop_down") { //getting collection of value related to current option $values = $o->getValuesCollection(); $found = false; foreach ($values as $k => $v) { //test existing of value for update if (1 == preg_match("/said$/i", $v->getTitle())) { //update and save $v->setTitle("morad") ->setSku("kk") ->setPriceType("fixed") ->setSortOrder(0) ->setPrice(floatval(13.0000)); $v->setOption($o)->save(); /** this ligne is important i collecte all value required for normalize save function related to current option */ $cos[]=$v->toArray($co); } } /** create new value object you can use $option->getValueInstance() for working with getSingleton */ $value = Mage::getModel('catalog/product_option_value'); $value->setOption($o) ->setTitle('valueiwant') ->setSku("nn") ->setPriceType("fixed") ->setSortOrder(1) ->setPrice(12) /** this ligne is important (relation forigien key) for related this new value to specific option */ ->setOptionId($o->getId()); $value->save(); /** this ligne is important i collecte all value required for normalize save function related to current option */ $cos[]=$value->toArray($co); } $o->setData("values",$cos)->save(); //var_dump($cos); } } }
я нашел одно решение для обновления пользовательских опций программным путем, вот решение
$product = Mage::getModel('catalog/product')->load($product_id); $values = array(); foreach ($product->getOptions() as $o) { $p = $o->getValues(); } } foreach($p as $v) { $values[$v->getId()]['option_type_id']= $v->getId(); $values[$v->getId()]['title']= 'test'; $values[$v->getId()]['price']= 23; $values[$v->getId()]['price_type']= 'fixed'; $values[$v->getId()]['sku']= $value1; } $v->setValues($values); $v->saveValues(); $product->save();
надеюсь, что это поможет кому-то, это только обновление значения специальных опций
Создаете ли вы модуль для этого? Если вы это сделаете, вы должны использовать систему cron Magento и вызвать метод пользовательской модели:
<config> <!--...--> <crontab> <jobs> <company_test> <schedule> <cron_expr>0,15,30,45 * * * *</cron_expr> </schedule> <run> <model>test/testmodel::testMethod</model> </run> </company_module> </jobs> </crontab> </config>
Когда это будет сделано, вы можете обновить опцию определенного продукта с помощью модели Mage_Catalog_Model_Product_Option
. Я не знаю, как создается CSV, но алгоритм может быть примерно таким:
// foreach option /** @var $opt Mage_Catalog_Model_Product_Option */ $opt = Mage::getModel('catalog/product_option'); $opt->setProduct($product); $optionArray = array( 'is_delete' => 0, 'title' => 'Blabla', 'previous_group' => '', 'previous_type' => '', 'type' => 'field', //can be radio, drop_down, file, area... 'is_require' => 0, 'sort_order' => 42, 'values' => array() ); $opt->addOption($optionArray); $opt->saveOptions(); // end foreach
Также проверьте эту ссылку: http://subesh.com.np/2009/12/adding-custom-options-product-magento/