2017-02-21 3 views
0

JSON 피드의 일부 데이터를 Drupal 8로 옮기기 위해 사용자 지정 마이그레이션 모듈을 작성 중입니다.Drupal 8 JSON 마이그레이션 프로세스 플러그인 콜백. 유닉스에서 날짜로 변환

기본 문자열이 콘텐츠 유형으로 들어 있지만 프로세스 단계에서 유닉스 시간 형식을 변환하지 못하는 것 같습니다. 설치 yml 파일에서.

나는

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

현재 입력이 - 1486573222000 출력 - 1486573222000

싶습니다 입력 - 1486573222000 출력 - 02-08-2017T17 : 00 : 22

I을 가능하다면 사용자 정의 PHP 함수에 인수를 전달할 수 있기를 원하며이를 작동시킬 수 있다고 생각합니다. 확실하지 모르지만 의사가 여기에 https://www.drupal.org/docs/8/api/migrate-api/migrate-process/process-plugin-callback 봐 봐하지만 여전히 그것을 알아낼 수 있습니다.

도움을 주시면 감사하겠습니다.

답변

0

https://www.drupal.org/node/2820490을 참조하십시오. 해당 패치가 설치되면이 방법이 핵심이지만 그때까지는 해당 패치를 설치하고 format_date 프로세스 플러그인을 사용해야합니다. 콜백에 여러 인수를 전달해야하기 때문에 콜백이 작동하지 않으며 단지 불가능합니다.

+0

나는 하나의 주장으로 그것을 할 수 있다고 생각합니다. PHP 함수에 1 개의 인수를 전달한 다음 yml 태그에 다시 전달할 수 있습니까? –

+0

이미 제공된 프로세스 플러그인을 사용할 수없는 이유는 무엇입니까? 어떤 형식의 모든 날짜 문자열을 어떤 형식 으로든 형식을 지정합니다. – heddn

+0

당신의 권리는 단지이 모든 것의 새로운 것이 었습니다. 제 코드를 커스텀 프로세스 플러그인으로 옮겼습니다! 감사 –

0

내가 원하는대로 작동하지 않아서 json 파일의 날짜를 drush mi ***로 바꾸기 전에 PHP 함수를 작성했습니다. 유닉스가 밀리 초일 때 Date를 파싱하고 업데이트합니다.

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