it-swarm-id.com

Bagaimana cara mendapatkan hook_install () untuk menjalankan semua hook_update_N ()?

Bagaimana saya bisa mendapatkan hook_install () untuk menjalankan semua pembaruan yang saya miliki untuk modul saya? Saya memiliki file mymod.install di dalamnya.

Saya telah mencoba

function mymod_install() {
  mymod_update_6001();
}

tapi sepertinya tidak melakukan apa-apa. Jika saya memiliki mymod_update_6002 () apakah saya masih akan menelepon 6001 (), panggil saja 6002 () atau panggil keduanya dalam urutan 6001 (), 6002 ().

Saya pikir akan masuk akal untuk menjalankan semua pembaruan saat Anda menginstal modul secara default.

18
Lucy

Anda seharusnya tidak mendapatkan kait instal Anda untuk menjalankan pembaruan. Ketika modul dipasang untuk pertama kalinya, tidak ada pembaruan yang diperlukan.

Pembaruan digunakan ketika modul sudah diinstal (database atau variabel telah dibuat). Dalam hal ini, Anda tidak ingin menginstal ulang modul karena akan menghapus semua data, alih-alih Anda membuat kait update_N. Drupal akan mendeteksi pembaruan mana yang diperlukan dan yang akan dijalankan akan update.php. Dalam Drupal 6 itu akan secara otomatis memilih pembaruan mana yang harus dilakukan, tetapi Anda dapat mengubahnya, sementara ini tidak mungkin di Drupal 7.

Drupal mendeteksi pembaruan mana yang diperlukan dengan menyimpan nomor pembaruan yang terakhir kali dijalankan. Ini bisa berupa perubahan dalam database, yang akan memungkinkan untuk memutarkan ulang pembaruan di Drupal 7. Pembaruan yang dijalankan kembali biasanya merupakan ide yang buruk dan paling sering akan menyebabkan kesalahan dan dalam beberapa kasus dapat mengacaukan data Anda.

Selalu ingat untuk membuat cadangan basis data Anda sebelum menjalankan pembaruan.

19
googletorp

Tujuan kait berbeda.

  • hook_install () dipanggil ketika modul diinstal; itu berarti modul tidak diinstal sebelumnya, dan oleh karena itu, tidak perlu diperbarui.
  • hook_update_N () dipanggil ketika modul sudah diinstal, dan perlu diperbarui.

Jika ada beberapa tugas yang perlu dilakukan saat modul diinstal, dan ketika modul diperbarui, maka kode harus ada di kedua kait. Tidak ada modul yang memanggil semua kait pembaruan selama instalasi, dan itu akan sangat salah ketika fungsi pembaruan memperbarui skema tabel database yang digunakan dari modul; hook_schema () harus selalu mengembalikan skema yang diperbarui, dan memperbarui skema juga dengan fungsi pembaruan akan salah.

Kode yang Anda tulis tidak berfungsi karena memanggil salah satu fungsi pembaruan tidak secara otomatis menjalankan semua fungsi pembaruan lainnya.
Memanggil fungsi pembaruan dari implementasi hook_install() salah, karena salah memanggil fungsi pembaruan dari yang lain; jika ada beberapa kode yang perlu dieksekusi dari dua atau lebih fungsi pembaruan, maka kode itu harus ditempatkan dalam fungsi yang dipanggil dari fungsi pembaruan, dan dari hook_install(), jika perlu.

15
kiamlaluno

Kait pemasangan hanya dipanggil saat modul baru dipasang, jadi tidak perlu ada pembaruan. Pembaruan dieksekusi hanya ketika modul sudah diinstal, sehingga dapat menerapkan perubahan tambahan.

Untuk memaksa fungsi pembaruan dijalankan saat diinstal, Anda harus mengubah versi skema Anda, misalnya:

function mymod_install() {
  // Reset the schema version, so our update hooks can be processed during the installation.
  drupal_set_installed_schema_version('mymod', '7000');
  // Then run the updates as usual.
  mymod_update_7001();
}

Atau jalankan dari drush: drush -y updb.

Lihat juga: Apakah mungkin memaksa kait pembaruan modul Anda untuk berjalan?

5
kenorb

hook_install tidak akan berfungsi dengan file mymod.module.

Anda harus meletakkan hook_install Dan hook_uninstall Dalam file terpisah mymod.install

Saya kira hook_update_N() juga harus ditempatkan di mymod.install


Jawab setelah pertanyaan diperbarui:

Mengutip dari tautan , Silakan periksa nomor versi Anda di file info.

Karena saya mengembangkan secara pribadi dan bukan untuk kontribusi, bidang 'VERSION' saya di file .info modul saya kosong atau tidak berubah ketika saya memperbarui modul. Saya benar-benar menggunakan Subversif untuk Eclipse PDT dan karenanya info saya nomor versi file tidak pernah diperbarui. Jadi, hook_update_6001 saya TIDAK dipanggil oleh update.php.

1
Shoaib Nawaz