0

我正在编写一个脚本来以编程方式创建 Magento 属性,从 CSV 中提取数据。不确定从 CSV 中提取数据的实际循环是否正确 - 希望获得有关逻辑的专家指导?

    <?php 
$fh = fopen("attributes.csv", "r");
$i = 0;
while (($l = fgetcsv($fh, 1024, ",")) !== FALSE) {

    $i++;
    if($i == 1) continue; //ignoring the headers, so skip row 0
    $data['label'] = trim($l[2]);
    $data['input'] = trim($l[3]);
    $data['type'] = trim($l[2]);

    //Create the attribute

    $data=array(
'type'=>$data['type'],
'input'=>'text',
'label'=>$data['label'],
'global'=>Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
'is_required'=>'0',
'is_comparable'=>'0',
'is_searchable'=>'0',
'is_unique'=>'1',
'is_configurable'=>'1',
'use_defined'=>'1'
);

$model->addAttribute('catalog_product','test_attribute',$data);

}   

?>

我基本上只是希望它从 CSV 中获取属性数据,并为 CSV 中的每一行运行代码来创建它(使用 CSV 中指定的标签和名称 - 我猜我在循环中遗漏了一些明显的东西? (只是真正了解我在做什么!)

4

1 回答 1

1

从 CSV 插入值后,您在每个循环中重置$data数组,因此 CSV 内容会丢失。试试这个

$fh = fopen("attributes.csv", "r");
$i = 0;
$attributes=array(); //!!
while (($l = fgetcsv($fh, 1024, ",")) !== FALSE) {

    $i++;
    if($i == 1) continue; //ignoring the headers, so skip row 0

    $data=array();

    $data['label'] = trim($l[2]);
    $data['input'] = trim($l[3]);
    $data['type'] = trim($l[2]);

    $data['global']=Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL;
    $data['is_required']='0';
    $data['is_comparable']='0';
    $data['is_searchable']='0';
    $data['is_unique']='1';
    $data['is_configurable']='1';
    $data['use_defined']='1';

    //insert $data to the attributes array
    $attributes[]=$data;
    //or
    $model->addAttribute('catalog_product','test_attribute',$data);
}   
于 2012-10-15T10:02:01.027 回答