วิธีหยุด 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);

เช่น my $ modified ถูกตั้งค่าเป็น 0 และหลังจากบันทึกฉันเห็นคอลัมน์ที่ปรับปรุงแล้วของแถวโหนดนี้ในรายการเนื้อหาผู้ดูแลระบบที่มีค่าวันที่และเวลาปัจจุบัน

คำตอบ:


14

คุณควรจะสามารถรักษาchangedเวลาเดิมได้โดยการตั้งค่าคุณสมบัติที่กำหนดเองเป็นอันดับแรกบนโหนดวัตถุพูด$node->modifiedในสคริปต์การโอนย้ายของคุณก่อนที่จะโทรnode_save()จากนั้นใช้ node_presave hook:

/**
 * 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

ฉันเกลียดที่เราต้องทำอะไรบางอย่างที่น่าอึดอัดใจเหมือนตะขอ (อึดอัดเพราะการเปลี่ยนแปลงเกิดขึ้นในส่วนของรหัสที่แตกต่างอย่างสิ้นเชิง) แต่นั่นเป็นความผิดของ drupal ไม่ใช่ของคุณ +1
Kenny Wyland
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.