Memahami Kait Pembaruan dan Posting Pembaruan untuk Pembaruan Situs Drupal yang Berhasil
Diterbitkan: 2023-04-25Selama pembaruan inti atau pembaruan modul, sangat penting untuk memastikan stabilitas dan integritas situs web Drupal Anda. Untungnya, modul Update API dan Update/Post Update Hooks siap membantu.
Modul Update API menyediakan pengait yang diperlukan untuk memperbarui kode dan modul di situs Drupal Anda. Kait ini tidak lain adalah Kait Pembaruan dan Pasca-Pembaruan yang memungkinkan pengembang menyesuaikan pembaruan sesuai dengan kebutuhan mereka.
Pada artikel ini, kita akan membahas Update API, apa itu update dan post-update hooks serta kapan dan bagaimana penggunaannya. Dengan memahami kedua jenis pengait, Anda dapat berhasil memperbarui situs Drupal Anda dengan sedikit usaha. Mari kita mulai!
API Pembaruan
Saat bekerja di situs yang sudah ada, saat Anda memperbarui kode dalam modul, Anda mungkin perlu memperbarui data yang disimpan agar data yang disimpan kompatibel dengan kode baru. Anda mungkin telah melihat kesalahan seperti flash 'Situs web mengalami kesalahan yang tidak terduga' di depan Anda. Menakutkan bukan!? Aku tahu! Di sinilah Pembaruan API Drupal datang untuk menyelamatkan kita.
Jika pembaruan antara dua versi minor modul Anda dalam versi utama inti Drupal yang sama, Anda dapat menggunakan Update API untuk memperbarui data. Update API memungkinkan Anda menyediakan kode yang melakukan pembaruan pada data yang disimpan setiap kali modul Anda membuat perubahan pada model datanya. Perubahan model data mengacu pada setiap perubahan yang membuat data yang disimpan di situs yang ada tidak kompatibel dengan basis kode situs yang diperbarui. Perubahan model Data ini meliputi:
Memperbarui Skema Konfigurasi
- Menambahkan/menghapus/mengganti nama kunci konfigurasi.
- Mengubah tipe data kunci konfigurasi.
- Mengubah nilai default yang diharapkan dari kunci konfigurasi, dll.
Memperbarui Skema Database
- Menambah/mengubah/menghapus tabel atau bidang basis data.
- Memindahkan data yang disimpan ke bidang atau tabel yang berbeda.
- Mengubah format data yang disimpan, dll.
Memperbarui Entitas & Bidang
- Menambahkan bidang dasar baru ke tipe entitas yang sudah ada.
- Memperbarui bidang dari tipe usang ke tipe baru, dll.
Memperbarui Data
- Memanipulasi data yang disimpan di situs yang ada.
Bekerja dengan Perbarui kait
Hook hook_update_N() digunakan untuk memperkenalkan pembaruan antara versi minor dari sebuah modul. Kait ini ditempatkan di dalam modul Anda di file *.install .
hook_update_N() ditulis dalam bentuk (nama modul)_update_(nomor). Di sini N terdiri dari:
- 1 atau 2 digit mengacu pada kompatibilitas inti Drupal (Drupal 8, 9, 10, dll.)
- 1 digit berikutnya adalah untuk versi rilis utama modul Anda
- 2 digit terakhir untuk penghitungan berurutan, dimulai dengan 01
Contoh:
example_update_9201(): Pembaruan pertama untuk versi 9.x-2.x.
Di mana 'contoh' adalah nama modul, digit pertama mengacu pada versi inti Drupal '9', angka '2' mengacu pada versi rilis utama modul dan dua digit terakhir '01' menunjukkan fungsi pembaruan pertama yang ditulis untuk modul 'contoh'.
Bagian numerik dari fungsi implementasi hook (yaitu, 9201 pada contoh di atas) disimpan dalam database untuk melacak pembaruan mana yang telah dijalankan. Jadi, Anda tidak boleh memberi nomor baru pada fungsi pembaruan.
Untuk mengetahui versi skema modul 'contoh tersimpan dalam database' saat ini, gunakan:
drush php-eval "echo drupal_get_installed_schema_version('contoh');"
Untuk secara manual menyetel versi skema saat ini dari modul 'contoh' kembali ke '9201', gunakan:
drush php-eval "echo drupal_set_installed_schema_version('contoh', '9201');"
Catatan: Cobalah untuk menghindari penggunaan fungsi drupal_set_installed_schema_version() di situs produksi karena secara langsung memperbarui database Anda. Anda dapat menggunakannya di lingkungan pengujian lokal atau lebih rendah selama pengembangan untuk menyetel ulang versi skema.
Tambahkan deskripsi yang tepat dalam komentar blok dokumen sebelum fungsi pengait pembaruan karena akan dicetak untuk pengguna saat menjalankannya.
Structure of hook_update_N(): /** * A aimple hook_update_N() hook. */ function example_update_9201() { // Code goes here. }
Kait-kait ini dijalankan dalam urutan terurut, yaitu, contoh_update_9201() kait dijalankan sebelum contoh_update_9202(), berikutnya adalah 9203, 9204 dan seterusnya.
Anda juga dapat mengubah urutan pengait yang disortir, dengan memasukkan dependensi di antara pengait. Gunakan kait hook_update_dependencies() untuk menjalankan pembaruan di antara dua kait pembaruan.
Semua pengait pembaruan dijalankan dalam batch dan mereka juga mendukung pemrosesan batch item. Semua kait pembaruan memiliki akses ke parameter $sandbox yang dapat digunakan untuk membuat proses batch di kait pembaruan untuk memproses data besar sekaligus tanpa menyebabkan PHP kehabisan waktu.
Contoh sederhana kait pembaruan untuk menambahkan kunci konfigurasi baru:
Saat ini, file example_module.settings.yml berisi:
Untuk menambahkan 'deskripsi' kunci baru ke konfigurasi:
- Tambahkan kunci 'deskripsi' ke file pengaturan
- Tambahkan update_hook di file example_module.install:
- Gunakan drush updb untuk menjalankan pengait.
- Periksa konfigurasi yang diperbarui, 'deskripsi' kunci baru diperbarui.
Bekerja dengan kait Post Update
Kait hook_post_update_NAME(), mirip dengan kait pembaruan, digunakan untuk memperkenalkan pembaruan. Tetapi pengait ini sebagian besar ditujukan untuk memperbarui data, seperti entitas. Kait ini dijalankan setelah semua kait hook_update_N() dijalankan. Pada tahap ini, Drupal sudah sepenuhnya diperbaiki sehingga Anda dapat menggunakan API apa pun di dalam situs.
Kait ini ditempatkan di file *.post_update.php di modul Anda.
hook_post_update_NAME() ditulis dalam bentuk (nama modul)_post_update_(nama apa saja). Di sini NAME dapat berupa sembarang nama mesin. Penamaan alfanumerik fungsi dalam file ini adalah satu-satunya hal yang memastikan urutan eksekusi pengait ini.
Mirip dengan kait pembaruan, tambahkan deskripsi yang tepat di komentar docblock sebelum kait post_update. Juga, jangan menggunakan kembali nama hook yang sama.
Struktur hook_post_update_NAME():
/** * A aimple hook_post_update_NAME() hook. */ function example_post_update_test() { // Code goes here. }
Sama seperti kait pembaruan, gunakan parameter $sandbox untuk menunjukkan bahwa API Batch harus digunakan untuk kait post_update Anda.
Contoh sederhana penggunaan post-update hook untuk mengupdate term data:
- Saat ini, semua istilah dalam kosakata Tag memiliki bidang 'Contoh uji' yang dinonaktifkan.
- Tambahkan hook post_update di file example_module.post_update.php untuk mengaktifkan kolom 'Test example' untuk semua persyaratan yang ada.
- Gunakan drush updb untuk menjalankan pengait.
- Verifikasi data istilah yang diperbarui, kotak centang 'Contoh uji' harus diaktifkan.
Cara Menjalankan kait ini!
Anda dapat menggunakan perintah Drush untuk mengeksekusi kait ini, drush updb. Itu membangun kumpulan dalam langkah-langkah berikut:
- Semua pengait pembaruan ditemukan.
- Menyelesaikan ketergantungan dan mengurutkan urutannya.
- Kait ditempatkan untuk pemrosesan batch.
- Selanjutnya, semua pengait Post ditemukan.
- Jika ada kait post_update, dan jika update_hook telah dijalankan sebelumnya, maka cache akan dihapus.
- Kemudian, dorong setiap kait post_update ke dalam kumpulan.
- Jalankan kumpulan.
Satu keuntungan utama yang dimiliki kait pasca-pembaruan dibandingkan kait pembaruan adalah bahwa Drupal berfungsi penuh pada saat pasca-pembaruan dijalankan. Ini memungkinkan pengembang untuk menggunakan layanan Drupal apa pun saat menggunakan pengait pasca-pembaruan. Dengan kait pembaruan, seseorang tidak boleh berasumsi bahwa Drupal telah diperbaiki sepenuhnya dan menghindari penggunaan kait lain, API entitas, dll.
Pikiran Akhir
Saat mencoba memperbaiki situs Anda dengan memperbarui skema konfigurasi/database, coba gunakan pengait pembaruan. Saat memanipulasi data yang disimpan, menyimpan ulang konfigurasi, memperbarui entitas konten, membersihkan cache, dll, kait pasca-pembaruan lebih tepat untuk digunakan.
Sejujurnya, tidak ada dokumentasi yang jelas di Drupal.org mengenai kapan harus menggunakan pengait yang mana! Ada masalah terbuka yang meminta untuk meningkatkan dokumentasi tentang penggunaan kedua pengait ini yang dapat Anda kontribusikan jika Anda mau.
Tetapi berdasarkan pengalaman pengembang dan dengan melihat modul inti Drupal 9 & 10 sebagai contoh, gunakan kait pembaruan untuk melakukan operasi CRUD pada konfigurasi atau basis data (yaitu memperbaiki situs) dan gunakan kait pasca-pembaruan untuk entitas konten CRUD ( lalu perbaiki data di situs yang diperbarui), karena kait pasca-pembaruan dijalankan setelah kait pembaruan.
Senang membaca artikel ini? Tunjukkan pada kami cinta dan berlangganan buletin mingguan kami hari ini!