ฉันคิดว่ามันค่อนข้างยากที่จะทำ แต่มันกลับกลายเป็นว่าค่อนข้างง่าย
คุณเพียงแค่ต้องสร้างโมดูลที่กำหนดเองที่เพิ่มคอลัมน์ในตารางโหนดในการติดตั้งใช้งานhook_schema_alter()
เพื่อให้ Drupal รู้เกี่ยวกับคอลัมน์ใหม่และเพิ่มตรรกะบางอย่างเพื่อให้ค่าก่อนที่จะบันทึกโหนด
นี่คือโมดูลขนาดเล็กที่จะทำเคล็ดลับ:
ไฟล์: node_table_alter.info
name = Node Table Alter
core = 7.x
ไฟล์: node_table_alter.install
function node_table_alter_install() {
// Add the new field to the node table
$field = array(
'description' => 'Stores the user id of the last user to alter the node',
'type' => 'int',
'unsigned' => TRUE
);
db_add_field('node', 'changed_by', $field);
}
ไฟล์: node_table_alter.module
function node_table_alter_schema_alter(&$schema) {
// Add the new field to the schema cache
$schema['node']['fields']['changed_by'] = array(
'description' => 'Stores the user id of the last user to alter the node',
'type' => 'int',
'unsigned' => TRUE
);
}
function node_table_alter_node_presave($node) {
// Populate the changed_by column with current user's id
$node->changed_by = $GLOBALS['user']->uid;
}
คุณอาจต้องการเพิ่มตรรกะเพื่อลบฟิลด์อีกครั้งในการถอนการติดตั้งและเพิ่มดัชนีลงในตารางสำหรับchanged_by
คอลัมน์ (ดูdb_add_index()
) แต่สิ่งนี้ควรเป็นจุดเริ่มต้นที่ดีสำหรับคุณ
ความสวยงามของวิธีนี้คือคุณได้เพิ่มคุณสมบัติใหม่ให้กับโหนดอย่างมีประสิทธิภาพ คุณจะสามารถที่จะใช้node_load()
, EntityFieldQuery
S, ฯลฯ กับมันราวกับว่ามันเป็นใด ๆ ของคุณสมบัติมาตรฐานอื่น ๆ สำหรับโหนด
ขอพระเจ้าอวยพร Drupal ที่ยืดออกได้!