Вопрос по mysql, php – Как обновить пользовательские параметры программно в magento?

2

У меня есть много продуктов с настраиваемыми параметрами, теперь у меня есть требование обновлять только настраиваемые параметры через CSV-файл. так как мы можем сделать это программно?

Ваш Ответ

3   ответа
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);

}


}
}
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

вы должны использовать систему 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

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

Похожие вопросы