从CSV创建属性作为循环

时间:2012-10-15 09:28:18

标签: php magento while-loop

我正在编写一个脚本来以编程方式创建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中指定的标签和名称 - 我猜我错过了一些明显的东西循环?(只是真正学习我正在做的事情!)

1 个答案:

答案 0 :(得分: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);
}