কীভাবে সমস্ত ম্যাজেন্টো ইনস্টলেশন থেকে সমস্ত অ্যাট্রিবিউট এবং অ্যাট্রিবিউট সেটগুলি রফতানি করতে হবে এবং অন্য ইনস্টলেশনতে আমদানি করবেন?


14

আমার বর্তমান ওয়েবসাইট (এন্টারপ্রাইজ সংস্করণ 1.12.0.0) থেকে সমস্ত পণ্যের বৈশিষ্ট্য এবং বৈশিষ্ট্য সেট রফতানি করতে হবে এবং সেগুলি একটি নতুন ওয়েবসাইটে আমদানি করতে হবে (সিই 1.8)।

আমি এগুলি পেরিয়েছি:

তবে প্রথমে কীভাবে সমস্ত বৈশিষ্ট্য রফতানি করতে হবে তা অনুমান করতে পারি না তবুও আমি এই প্রক্রিয়াটির জন্য কোনও এক্সটেনশনের জন্য অর্থ ব্যয় করতে পারি না :( যেহেতু আমার সংস্থা এটি সরবরাহ করবে না।

কেউ কি আমাকে সঠিক দিক নির্দেশ করতে পারে?


সমস্ত পোস্ট আমি সিএসভি (ম্যানুয়ালি প্রস্তুত) বা পিএইচপি স্ক্রিপ্ট থেকে গুণাবলী আমদানিতে ফোকাস দিয়েছি, উত্স ওয়েবসাইট থেকে বৈশিষ্ট্য এবং তাদের মানগুলি বের করার বিষয়ে কিছুই নয়।
শাতিশ

উত্তর:


27

আমি উত্স ওয়েবসাইট থেকে সমস্ত বৈশিষ্ট্য এবং তাদের বিকল্পগুলি (যদি এটি ড্রপডাউন বৈশিষ্ট্য হয়) রফতানি করার জন্য এটি করেছি:

মধ্যে exportAttributes.php রুট ডিরেক্টরিটি এর উৎস ওয়েবসাইট :

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

এটি একটি সিএসভি ফাইল দেবে [আসলে আমি "|" ব্যবহার করেছি) পৃথক করার জন্য;)] গন্তব্য ওয়েবসাইটের এমএজিএনটিও_আরওটি / বৈশিষ্ট্য ইমপোর্টের ডিরেক্টরিতে এই সিএসভি ফাইলটি আটকান , অর্থাত্ ওয়েবসাইটটি যেখানে বৈশিষ্ট্যগুলি আমদানি করা দরকার:

এখন নিম্নলিখিত কোডটি গন্তব্য ওয়েবসাইটের MAGENTO_ROOT / এফোর্টিম্পোর্ট ** ডিরেক্টরিতে রাখুন

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

দ্রষ্টব্য: ব্যতিক্রমগুলি পরিচালনা করা হলেও, নিরাপদ দিক হতে আপনি এই বৈশিষ্ট্যগুলি আমদানির আগে আপনার ডাটাবেসটিকে ব্যাকআপ করুন। শুভ আমদানি!

ধন্যবাদ :


1
'test'.আপনার রফতানি স্ক্রিপ্টের 54 লাইনটি সরিয়ে ফেলুন এবং রফতানিটি ভাল চলে।
জাপ হাগম্যানস

ওহো! আমি এখন "পরীক্ষা" অপসারণ করেছি :)
শথিশ

আমদানি স্ক্রিপ্টের ফলে 500 টি সার্ভার ত্রুটি হয়।
গ্যাব্রিয়েল

আমি আমার ম্যাজেন্টো ইন্সটলেশনের সিএসভি ফাইল এবং ইম্পোর্টআট্রিবিউট.এফপি ফাইলটি / ভার / আমদানি ডায়ারে রেখেছি তবে আমি একটি 403 নিষিদ্ধ ত্রুটি পেয়েছি।
গ্যাব্রিয়েল

কোনও উপায়ে সেট রফতানি করতে?
হাইম

1

আমি মনে করি সবচেয়ে সহজ অংশটি সমস্ত টেবিলগুলি নিয়ে সেগুলি অনুলিপি করা উচিত।

আপনি অন্যান্য বৈশিষ্ট্যগুলি (গ্রাহক, ঠিকানা, আদেশ, ...) সম্পর্কে যত্নশীল কিনা তার উপর নির্ভর করে আপনি সমস্ত কিছু অনুলিপি করতে পারেন বা কেবল পণ্য বৈশিষ্ট্যগুলি নির্বাচন করতে পারেন এবং সেগুলি নতুন ডাটাবেসে সন্নিবেশ করতে পারেন।

চেক করুন eav_entity_type, সাধারণত catalog_productআইডি 4 হয়।

তারপরে eav_attributeএবং এর catalog_eav_attributeসাথে সমস্ত কিছু অনুলিপি করুনentity_type_id = 4 আপনাকে নতুন উদাহরণ। বিদেশী কীগুলি ধ্বংস না করার জন্য প্রস্তুত।

এটি একটি সমস্যা, যদি আপনি পণ্যগুলিও অনুলিপি করতে চান, কারণ বৈশিষ্ট্যের আইডিগুলি পরিবর্তন হতে পারে!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.