2012-05-29 2 views

ответ

5

я нашел одно решение для обновления пользовательских параметров программно здесь решение

$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(); 

надеюсь, что это поможет кому-то это только обновление пользовательских опций значение

1

Вы создаете модуль для этого? Если вы делаете, вы должны использовать систему хрон из 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/

+0

да, то, что это создает новые возможности, но я хочу, чтобы обновить значение параметров, предположу, что у меня есть варианты, созданные, если значение вариантов изменяются затем обновить значение параметров в противном случае создать новые опции поля – Mufaddal

+0

Затем вы должны использовать другие методы из 'Mage_Catalog_Model_Product_Option'. Кажется, что нет способа обновить за один шаг, но вы можете сравнить список своих опций и ваших значений от Magento до тех из них, что у вас есть CSV. Или вы можете напрямую использовать SQL для их изменения в таблице 'catalog_product_option'. –

5

Я думаю, что это также полезный ...

Если вы настраиваете продукты.

<?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); 

} 


} 
}