생성시 노드 변경 날짜를 설정하기 위해 Drupal을 중지하는 방법은 무엇입니까?


9

이것은 사용자 정의 마이그레이션 스크립트 작성과 관련된 문제에 대한 두 번째 질문입니다.

새 노드 만 만들고 업데이트에 신경 쓰지 않습니다.

암호:

        $node = new stdClass();
        $node->type = 'migrate';
        $node->title = $content['title'];
        $node->language = LANGUAGE_NONE;

        $node->created = (int) date('U',strtotime($content['created']));

        $modified = $content['modified'];               
        if (! empty($modified) && $modified != '0000-00-00 00:00:00') {
            $modified = (int) date('U',strtotime($modified));
        } else {
            $modified = 0;
        }               
        $node->changed = $modified;

        node_object_prepare($node);

        #some lines later
        node_save($node);

예를 들어 $ modified가 0으로 설정되어 있고 저장 한 후 현재 컨텐츠 시간 값으로 관리 컨텐츠 목록에이 노드 행의 업데이트 된 열이 표시됩니다.

답변:


14

changed먼저 $node->modified호출하기 전에 마이그레이션 스크립트에서 노드 객체에 사용자 정의 속성을 설정 한 node_save()다음 node_presave 후크를 구현하여 원래 시간 을 보존 할 수 있어야합니다 .

/**
 * Implements hook_node_presave().
 */
function mymodule_node_presave($node) {
  $node->changed = $node->modified;
}

이것은 구현하는 모든 모듈을 호출하기 전에 node_save()세트에서 작동 합니다 .$node->changedhook_node_presave()


네, 그것은 100 % 작동합니다 :)
Codium

1
의심 할 여지가 있지만, 나와 같은 경우 drush를 통해 단기 스크립트를 실행하는 경우 모듈의 일부가 아니며 후크 등을 구현하기 위해 모듈을 구현하고 싶지 않습니다. db_query('UPDATE {node} SET created=:created, changed=:changed WHERE nid=:nid', array(':created'=>$whatever,':changed'=>$whatever,':nid'=>$node->nid));저장 후 작동합니다 .
artfulrobot

나는 우리가 후크처럼 어색한 일을해야한다는 것을 싫어한다. +1
Kenny Wyland
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.