2017-02-21 5 views
0

JSONフィードのデータをDrupal 8に移動するためのカスタムマイグレーションモジュールを作成しています。Drupal 8 JSON移行プロセスのプラグインコールバック。 UNIXから日付への変換

コンテンツタイプに入る基本文字列がありますが、プロセスフェーズインストールymlファイルに保存します。

私は

process: 
    field_post_date: 
    - 
     plugin: callback 
     callable: date 
     source: publish_date 

現在 入力持っている - 1486573222000 出力 - 1486573222000

私は希望 入力 - 1486573222000 出力 - 02-08-2017T17:00:22

Iを可能であれば、カスタムPHP関数に引数を渡すことができたいと思っています。私はそれを動作させることができると思います。どのようにしても、こちらの文書を見てもらうにはどうすればいいのか分かりませんが、まだそれを把握しているようです。

ご協力いただければ幸いです。

答えて

0

https://www.drupal.org/node/2820490を参照してください。そのパッチが公開されると、その方法は中核になりますが、それまではそのパッチをインストールし、format_dateプロセスプラグインを使用する必要があります。コールバックには複数の引数を渡す必要があり、それはできないため、コールバックは機能しません。

+0

私は1つの議論でそれを行うことができると信じています。 1つの引数をphp関数に渡してymlマークアップに戻す例を提供できますか? –

+0

すでに提供されているプロセスプラグインを使用できないのはなぜですか?任意の形式の任意の日付文字列を任意の形式にフォーマットします。 – heddn

+0

あなたの権利はちょっとちょっと新しいものでした。私はコードをカスタムプロセスプラグインに移しました!ありがとう –

0

これは私が望んでいたようにうまく動作しませんでしたので、drush mi ***を実行する前にjsonファイルの日付をフォーマットするphp関数を書きました。日付を解析し、UNIXがミリ秒単位で更新されたときに更新されます。

<!-- This is a custom php function to convert time stamps from unix to MM-DD-YYYYTHR:MM:SS which is accepted by drupal Date field type--> 
<?php 
date_default_timezone_set('GMT'); 
$json = file_get_contents("**your-url**.json"); 
$array = json_decode($json); 
foreach($array->blog_posts as $item){ 
    echo "<br>"; 
    $num = $item->publish_date; 
    $int = (int)$num; 
    $float = (float)$num; 
    $epoch = $float; 
    $seconds = $epoch * .001; 
    $item->publish_date = gmdate('Y-m-d',$seconds)."T".gmdate('H:i:s',$seconds); 
} 
foreach($array->blog_posts as $item1){ 
    echo $item1->updated; 
    echo "<br>"; 
    $num = $item1->updated; 
    $int = (int)$num; 
    $float = (float)$num; 
    $epoch = $float; 
    $seconds = $epoch * .001; 
    $item1->updated = $seconds; 
} 
file_put_contents('**export**.json', json_encode($array)); 
?> 
関連する問題