Magento 数据导入sku自动增长

近来由于业务需要研究了下Magento的数据导入模块,只能说很好很强大。起初的目的是为了业务组的一些BT要求(此处对业务组500字的谴责…):要求导入产品的时候根据产品的id自动生成sku,忽略sku的意义。在粗略的研究了导入模块的源码之后,用了一个不是很优雅的方法实现。唉,每个优雅的接口都有个龌龊的实现。

Magento的导入模块从csv中读取数据后,会把数据序列化后存在表importexport_importdata中。之后导入的时候会从表里读取数据,这样办法就有了。我们在序列化之前,修改导入产品的sku,然后存到数据库中就ok了。
具体实现如下

//app/code/local/Mage/ImportExport/Model/Import/Entity/Abstract.php
 /**
     * Import product sku
     *
     * @var int
     */
    protected $_sku = 0;
 
/**
     * Change row data before saving in DB table.
     *
     * @param array $rowData
     * @return array
     */
    protected function _prepareRowForDb(array $rowData)
    {
        /**
         * Convert all empty strings to null values, as
         * a) we don't use empty string in DB
         * b) empty strings instead of numeric values will product errors in Sql Server
         */
        foreach ($rowData as $key => $val) {
            if ($val === '') {
                $rowData[$key] = null;
            }
        }
        //add product sku auto increment
        $key = Mage_ImportExport_Model_Import_Entity_Product::COL_SKU;
        $type = Mage_ImportExport_Model_Import_Entity_Product::COL_TYPE;
        $set = Mage_ImportExport_Model_Import_Entity_Product::COL_ATTR_SET;
        if( $rowData[$key] &&  ( $rowData[$type] == 'simple' && $rowData[$set] == 'Default' || $rowData[$type] == 'configurable' ) ) {
            if(!$this->_sku){
                //get last product entity id
                $res = Mage::getSingleton('core/resource');
                $readConnection = $res->getConnection('core_read');
                $table = $res->getTableName('catalog_product_entity');
                $this->_sku = Mage::getResourceHelper('importexport')->getNextAutoincrement("{$table}");
            }
            $rowData[$key] = strval($this->_sku);
        }
        return $rowData;
    }

就这样子吧。

发表评论

电子邮件地址不会被公开。 必填项已用*标注