2011-07-06 14 views
1

ドロップダウン属性の値を含むすべての製品属性をエクスポートできるようにするには、スクリプトまたはmagento拡張が大好きです。輸入も良いだろう、私は一見を持っているが、何が見つかるように見えることができない、誰がこれがどのようにできるか知っている?Magentoでの属性のエクスポートとインポート

答えて

1

私はBorisのuRapidFlowをお勧めします:http://www.unirgy.com/products/urapidflow/これは、利用可能なデータフローインポート/エクスポートモジュールの1つです。しかし、それはIonCubeローダーを必要とすることに注意してください。しかし、あなたがたくさんの周りにデータを移動しているなら、それは十分に価値があります。

+0

は素晴らしい見えます!しかし、このプロジェクトでは高すぎます。ブックマークして、私は将来それを使うかもしれない。共有ありがとう:) –

3

更新:私はstackexchangeの作業スクリプトを見つけました。スクリプトは正確に動作するはずです。元のポスターへのすべてのクレジット。私はちょうど将来の参照のためにここに彼の返信を貼り付けることです。元のスレッドへのリンク: is here

exportAttributes.phpがソースのウェブサイトのルートディレクトリに:私は(それがドロップダウン属性である場合)、ソースのWebサイトからすべての属性とそのオプションをエクスポートするためにこれをやった


<?php 
define('MAGENTO', realpath(dirname(__FILE__))); 
require_once MAGENTO . '/app/Mage.php'; 
Mage::app(); 
$entity_type_id = Mage::getModel('catalog/product')->getResource()->getTypeId(); 

prepareCollection($entity_type_id); 

function prepareCollection($ent_type_id){ 
    $resource = Mage::getSingleton('core/resource'); 
    $connection = $resource->getConnection('core_read'); 
    $select_attribs = $connection->select() 
      ->from(array('ea'=>$resource->getTableName('eav/attribute'))) 
      ->join(array('c_ea'=>$resource->getTableName('catalog/eav_attribute')), 'ea.attribute_id = c_ea.attribute_id'); 
      // ->join(array('e_ao'=>$resource->getTableName('eav/attribute_option'), array('option_id')), 'c_ea.attribute_id = e_ao.attribute_id') 
      // ->join(array('e_aov'=>$resource->getTableName('eav/attribute_option_value'), array('value')), 'e_ao.option_id = e_aov.option_id and store_id = 0') 
    $select_prod_attribs = $select_attribs->where('ea.entity_type_id = '.$ent_type_id) 
              ->order('ea.attribute_id ASC'); 

    $product_attributes = $connection->fetchAll($select_prod_attribs); 

    $select_attrib_option = $select_attribs 
           ->join(array('e_ao'=>$resource->getTableName('eav/attribute_option'), array('option_id')), 'c_ea.attribute_id = e_ao.attribute_id') 
           ->join(array('e_aov'=>$resource->getTableName('eav/attribute_option_value'), array('value')), 'e_ao.option_id = e_aov.option_id and store_id = 0') 
           ->order('e_ao.attribute_id ASC'); 

    $product_attribute_options = $connection->fetchAll($select_attrib_option); 

    $attributesCollection = mergeCollections($product_attributes, $product_attribute_options); 
    prepareCsv($attributesCollection); 

} 

function mergeCollections($product_attributes, $product_attribute_options){ 

    foreach($product_attributes as $key => $_prodAttrib){ 
     $values = array(); 
     $attribId = $_prodAttrib['attribute_id']; 
     foreach($product_attribute_options as $pao){ 
      if($pao['attribute_id'] == $attribId){ 
       $values[] = $pao['value']; 
      } 
     } 
     if(count($values) > 0){ 
      $values = implode(";", $values); 
      $product_attributes[$key]['_options'] = $values; 
     } 
     else{ 
      $product_attributes[$key]['_options'] = ""; 
     } 
     /* 
      temp 
     */ 
     $product_attributes[$key]['attribute_code'] = $product_attributes[$key]['attribute_code']; 
    } 

    return $product_attributes; 

} 

function prepareCsv($attributesCollection, $filename = "importAttrib.csv", $delimiter = '|', $enclosure = '"'){ 

    $f = fopen('php://memory', 'w'); 
    $first = true; 
    foreach ($attributesCollection as $line) { 
     if($first){ 
      $titles = array(); 
      foreach($line as $field => $val){ 
       $titles[] = $field; 
      } 
      fputcsv($f, $titles, $delimiter, $enclosure); 
      $first = false; 
     } 
     fputcsv($f, $line, $delimiter, $enclosure); 
    } 
    fseek($f, 0); 
    header('Content-Type: application/csv'); 
    header('Content-Disposition: attachement; filename="'.$filename.'"'); 
    fpassthru($f); 
} 

これは実際には、[CSVファイルを与えます私は "|"分離する;)] 先のウェブサイトのMAGENTO_ROOT/attribImportディレクトリ、インポートする必要がある属性、すなわちウェブサイトにこのcsvファイルに貼り付けます。

を今MAGENTO_ROOT/attribImportに次のコードを入れて**ディレクトリ例外Allthough処理された、バックアップデータベース あなたIMPO前:先のウェブサイト

<?php 
define('MAGENTO', realpath(dirname(__FILE__))); 
require_once MAGENTO . '/../app/Mage.php'; 
Mage::app(); 
// $fileName = MAGENTO . '/var/import/importAttrib.csv'; 
$fileName = 'importAttrib.csv'; 
// getCsv($fileName); 
getAttributeCsv($fileName); 

function getAttributeCsv($fileName){ 
    // $csv = array_map("str_getcsv", file($fileName,FILE_SKIP_EMPTY_LINES)); 
    $file = fopen($fileName,"r"); 
    while(!feof($file)){ 
     $csv[] = fgetcsv($file, 0, '|'); 
    } 
    $keys = array_shift($csv); 
    foreach ($csv as $i=>$row) { 
     $csv[$i] = array_combine($keys, $row); 
    } 
    foreach($csv as $row){ 
     $labelText = $row['frontend_label']; 
     $attributeCode = $row['attribute_code']; 
     if($row['_options'] != "") 
      $options = explode(";", $row['_options']); // add this to createAttribute parameters and call "addAttributeValue" function. 
     else 
      $options = -1; 
     if($row['apply_to'] != "") 
      $productTypes = explode(",", $row['apply_to']); 
     else 
      $productTypes = -1; 
     unset($row['frontend_label'], $row['attribute_code'], $row['_options'], $row['apply_to'], $row['attribute_id'], $row['entity_type_id'], $row['search_weight']); 
     createAttribute($labelText, $attributeCode, $row, $productTypes, -1, $options); 
    } 
} 


/** 
* Create an attribute. 
* 
* For reference, see Mage_Adminhtml_Catalog_Product_AttributeController::saveAction(). 
* 
* @return int|false 
*/ 
function createAttribute($labelText, $attributeCode, $values = -1, $productTypes = -1, $setInfo = -1, $options = -1) 
{ 

    $labelText = trim($labelText); 
    $attributeCode = trim($attributeCode); 

    if($labelText == '' || $attributeCode == '') 
    { 
     echo "Can't import the attribute with an empty label or code. LABEL= [$labelText] CODE= [$attributeCode]"."<br/>"; 
     return false; 
    } 

    if($values === -1) 
     $values = array(); 

    if($productTypes === -1) 
     $productTypes = array(); 

    if($setInfo !== -1 && (isset($setInfo['SetID']) == false || isset($setInfo['GroupID']) == false)) 
    { 
     echo "Please provide both the set-ID and the group-ID of the attribute-set if you'd like to subscribe to one."."<br/>"; 
     return false; 
    } 

    echo "Creating attribute [$labelText] with code [$attributeCode]."."<br/>"; 

    //>>>> Build the data structure that will define the attribute. See 
    //  Mage_Adminhtml_Catalog_Product_AttributeController::saveAction(). 

    $data = array(
        'is_global'      => '0', 
        'frontend_input'    => 'text', 
        'default_value_text'   => '', 
        'default_value_yesno'   => '0', 
        'default_value_date'   => '', 
        'default_value_textarea'  => '', 
        'is_unique'      => '0', 
        'is_required'     => '0', 
        'frontend_class'    => '', 
        'is_searchable'     => '1', 
        'is_visible_in_advanced_search' => '1', 
        'is_comparable'     => '1', 
        'is_used_for_promo_rules'  => '0', 
        'is_html_allowed_on_front'  => '1', 
        'is_visible_on_front'   => '0', 
        'used_in_product_listing'  => '0', 
        'used_for_sort_by'    => '0', 
        'is_configurable'    => '0', 
        'is_filterable'     => '0', 
        'is_filterable_in_search'  => '0', 
        'backend_type'     => 'varchar', 
        'default_value'     => '', 
        'is_user_defined'    => '0', 
        'is_visible'     => '1', 
        'is_used_for_price_rules'  => '0', 
        'position'      => '0', 
        'is_wysiwyg_enabled'   => '0', 
        'backend_model'     => '', 
        'attribute_model'    => '', 
        'backend_table'     => '', 
        'frontend_model'    => '', 
        'source_model'     => '', 
        'note'       => '', 
        'frontend_input_renderer'  => '',      
       ); 

    // Now, overlay the incoming values on to the defaults. 
    foreach($values as $key => $newValue) 
     if(isset($data[$key]) == false) 
     { 
      echo "Attribute feature [$key] is not valid."."<br/>"; 
      return false; 
     } 

     else 
      $data[$key] = $newValue; 

    // Valid product types: simple, grouped, configurable, virtual, bundle, downloadable, giftcard 
    $data['apply_to']  = $productTypes; 
    $data['attribute_code'] = $attributeCode; 
    $data['frontend_label'] = array(
             0 => $labelText, 
             1 => '', 
             3 => '', 
             2 => '', 
             4 => '', 
            ); 

    //<<<< 

    //>>>> Build the model. 

    $model = Mage::getModel('catalog/resource_eav_attribute'); 

    $model->addData($data); 

    if($setInfo !== -1) 
    { 
     $model->setAttributeSetId($setInfo['SetID']); 
     $model->setAttributeGroupId($setInfo['GroupID']); 
    } 

    $entityTypeID = Mage::getModel('eav/entity')->setType('catalog_product')->getTypeId(); 
    $model->setEntityTypeId($entityTypeID); 

    $model->setIsUserDefined(1); 

    //<<<< 

    // Save. 

    try 
    { 
     $model->save(); 
    } 
    catch(Exception $ex) 
    { 
     echo "Attribute [$labelText] could not be saved: " . $ex->getMessage()."<br/>"; 
     return false; 
    } 

    if(is_array($options)){ 
     foreach($options as $_opt){ 
      addAttributeValue($attributeCode, $_opt); 
     } 
    } 

    $id = $model->getId(); 

    echo "Attribute [$labelText] has been saved as ID ($id).<br/>"; 

    // return $id; 
} 

function addAttributeValue($arg_attribute, $arg_value) 
{ 
    $attribute_model  = Mage::getModel('eav/entity_attribute'); 

    $attribute_code   = $attribute_model->getIdByCode('catalog_product', $arg_attribute); 
    $attribute    = $attribute_model->load($attribute_code); 

    if(!attributeValueExists($arg_attribute, $arg_value)) 
    { 
     $value['option'] = array($arg_value,$arg_value); 
     $result = array('value' => $value); 
     $attribute->setData('option',$result); 
     $attribute->save(); 
    } 

    $attribute_options_model= Mage::getModel('eav/entity_attribute_source_table') ; 
    $attribute_table  = $attribute_options_model->setAttribute($attribute); 
    $options    = $attribute_options_model->getAllOptions(false); 

    foreach($options as $option) 
    { 
     if ($option['label'] == $arg_value) 
     { 
      return $option['value']; 
     } 
    } 
    return false; 
} 
function attributeValueExists($arg_attribute, $arg_value) 
{ 
    $attribute_model  = Mage::getModel('eav/entity_attribute'); 
    $attribute_options_model= Mage::getModel('eav/entity_attribute_source_table') ; 

    $attribute_code   = $attribute_model->getIdByCode('catalog_product', $arg_attribute); 
    $attribute    = $attribute_model->load($attribute_code); 

    $attribute_table  = $attribute_options_model->setAttribute($attribute); 
    $options    = $attribute_options_model->getAllOptions(false); 

    foreach($options as $option) 
    { 
     if ($option['label'] == $arg_value) 
     { 
      return $option['value']; 
     } 
    } 

    return false; 
} 

NOTEの これらの属性は、より安全な側に置かれます。ハッピー インポート中!

のおかげ:

関連する問題