Làm cách nào để dừng Drupal để thiết lập nút thay đổi ngày khi tạo?


9

Đây là câu hỏi thứ hai của tôi về các vấn đề của tôi với việc tạo tập lệnh di chuyển tùy chỉnh.

Tôi chỉ tạo các nút mới và không quan tâm đến các bản cập nhật.

Mã số:

        $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);

Ví dụ: $ đã sửa đổi của tôi được đặt thành 0 và sau khi lưu, tôi thấy cột được cập nhật của hàng nút này trong danh sách nội dung quản trị viên với giá trị datetime hiện tại.

Câu trả lời:


14

Bạn sẽ có thể duy trì changedthời gian ban đầu bằng cách trước tiên đặt thuộc tính tùy chỉnh trên đối tượng nút, giả sử $node->modified, trong tập lệnh di chuyển của bạn trước khi gọi node_save()và sau đó triển khai hook_presave hook:

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

Điều này sẽ hoạt động kể từ khi node_save()đặt $node->changedtrước khi gọi tất cả các mô-đun triển khai hook_node_presave().


Có, nó hoạt động 100% :)
Codium

1
Nghi ngờ tôi sẽ bị bắn hạ vì điều này, nhưng nếu như tôi đang chạy một đoạn script ngắn qua drush không phải là một phần của mô-đun và bạn không muốn thực hiện một mô-đun chỉ để thực hiện một hook, v.v. hoạt động để db_query('UPDATE {node} SET created=:created, changed=:changed WHERE nid=:nid', array(':created'=>$whatever,':changed'=>$whatever,':nid'=>$node->nid));sau khi tiết kiệm.
artfulrobot

Tôi ghét rằng chúng ta phải làm một cái gì đó khó xử như một cái móc (vụng về vì sự thay đổi xảy ra trong một đoạn mã hoàn toàn khác), nhưng đó là lỗi của drupal, không phải của bạn. +1
Kenny Wyland
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.