mysql> select nid, uid, created, changed from node;
+-----+-----+------------+------------+
| nid | uid | created | changed |
+-----+-----+------------+------------+
| 1 | 8 | 1336040166 | 1336046390 |
+-----+-----+------------+------------+
Saya ingin memiliki kolom "diubah oleh" di atas node
meja, persis seperti yang kita miliki dengan "dibuat oleh" (bidang uid). Ini akan melacak siapa yang membuat perubahan terakhir pada simpul itu. Saya tahu ini bisa diturunkan dari node_revision
tabel tetapi ini tergantung pada revisi yang diaktifkan untuk tipe konten yang saya minati.
Jadi, apa cara terbaik untuk melakukan ini? Dan mengapa inti Drupal tidak menawarkan ini secara default? Saya pikir "diubah oleh" adalah informasi yang cukup standar yang harus dilampirkan oleh CMS ke konten.
node
meja utama . Terlihat lebih mudah.Jawaban:
Saya pikir ini akan cukup sulit untuk dilakukan, tetapi ternyata cukup mudah.
Anda hanya perlu membuat modul khusus yang menambahkan kolom ke tabel simpul saat instalasi, mengimplementasikan
hook_schema_alter()
sehingga Drupal tahu tentang kolom baru, dan menambahkan beberapa logika untuk memberikan nilai sebelum simpul disimpan.Berikut adalah modul kecil yang akan melakukan trik:
File: node_table_alter.info
File: node_table_alter.install
File: node_table_alter.module
Anda mungkin ingin menambahkan logika untuk menghapus bidang lagi saat mencopot pemasangan, dan menambahkan indeks ke tabel untuk
changed_by
kolom (lihatdb_add_index()
), tetapi ini akan memberi Anda tempat yang baik untuk memulai.Keindahan metode ini adalah Anda telah secara efektif menambahkan properti baru ke node. Anda dapat menggunakan
node_load()
,EntityFieldQuery
s, dll. Dengan itu seolah-olah itu adalah salah satu properti standar lainnya untuk sebuah node.Tuhan memberkati Drupal karena bisa diperpanjang!
sumber
Saya kira Anda bisa menambahkan bidang referensi entitas (sebut saja
field_changed_by_user
) ke jenis konten yang harus Anda lacak. Maka Anda bisa menggunakanhook_node_presave
untuk menyimpan id pengguna ke simpul seperti ini:Saya pikir juga memungkinkan untuk memperbarui bidang dengan id pengguna hanya dengan membuat aturan. Anda dapat membaca lebih lanjut di sini .
sumber