Drupal Migrate 模組 之 json格式 資料來源 開發(2)

Posted by on | |

Json資料來源,可能有很多種情況,像是:
資料清單和資料詳細內容是不同的檔案
資料清單和資料詳細內容都在同一個檔案
資料清單和資料詳細內容都在同一個檔案,但在其中卻是位於不同階層
您可以看官網這一篇:JSON-based source classes


底下是小弟實作 Migration的Class (從範例改來的:example_baseball)

/**
 * 匯入 Onnie 商品資料
 */

class MigrateOnnieProd extends DynamicMigration {
  public function __construct(array $arguments) {
    $this->arguments = $arguments;
    parent::__construct();

    // 這個模組顯示時的說明
    $this->description = t('從 JSON URL 匯入 Onnie 商品 .');

    // 設定 匯入資料的 primary key or unique key
    $source_key = array(
       'PROD_NO' => array('type' => 'varchar',
                           'length' => 20,
                           'not null' => TRUE,
                           'description' => '商品編號',
                          )
    );
 
    // 設定 來源 和 目的地 資料的 primary key or unique key
    $this->map = new MigrateSQLMap($this->machineName,
        $source_key,
        MigrateDestinationNode::getKeySchema()
      );
   
  //定 來源資料 的 欄位有哪些  
    $source_fields=array(
   'PROD_NO' ='this is PROD_NO.',
   'PROD_NAME' = 'this is PROD_NAME.',
   'PRICE' = 'this is PRICE.',
   );

    // 設定 資料來源
    $srcUrl='http://code.onnie.biz/onnie_prod.json';
    $this->source = new MigrateSourceJSON($srcUrl, 'PROD_NO', $source_fields);
 
    // 設定 匯入目的地 
    $this->destination = new MigrateDestinationNode('onnie_prod');

    // 設定 來源 和 目的地 之欄位的對映
    $this->addFieldMapping('title', 'PROD_NAME')
         ->description('商品名稱');
    $this->addFieldMapping('field_prod_no', 'PROD_NO')
         ->description('商品編號');
    $this->addFieldMapping('uid')->defaultValue(1);//設定目的地欄位uid,值都為1
  }

   // 這個 migration 的 machine name 
  protected function generateMachineName($class_name = NULL) {
    return 'migrate_onnie_prod';
  }

}// end of class MigrateOnnieProd

0 意見: