作成時にノード変更日を設定するためにDrupalを停止するにはどうすればよいですか?


9

これは、カスタム移行スクリプトの作成に関する私の問題に関する2番目の質問です。

私は新しいノードのみを作成しており、更新については気にしません。

コード:

        $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オブジェクトにカスタムプロパティを設定し、次にnode_presaveフックを実装することで、元の時間を維持できるはずです。$node->modifiednode_save()

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

これは、を実装するすべてのモジュールを呼び出す前にnode_save()セット$node->changedで機能しますhook_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 14

私はフックのように厄介なことを行う必要があるのは嫌です(変更は完全に異なるコードセグメントで発生するため厄介です)が、それはあなたのせいではなく、ドルパールのせいです。+1
ケニーワイランド2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.