Jawaban yang lain bagus, akurat, terperinci, tapi saya tidak yakin itu adalah "kata-kata sederhana" yang menjelaskan tulang belulang konsep yang dicari si penanya.
Saya menganggap kait sebagai titik di mana kode berhenti dan berteriak, " Ada yang punya sesuatu untuk ditambahkan di sini? ". Modul apa pun dapat memiliki fungsi yang membalas ini, dan dipicu dengan data yang sesuai diteruskan pada saat itu dalam kode.
Contoh langsung yang bagus adalah hook_node_delete () . Setiap modul dapat menggunakannya untuk membuat sesuatu terjadi setiap kali sebuah node dihapus. Dokumen memberi tahu Anda kait ini meneruskan modul objek dari simpul yang dihapus itu untuk dikerjakan, dan menguraikan informasi berguna lainnya seperti tentang waktu yang tepat kapan dipanggil (mis. Bahwa itu sebelum data simpul sebenarnya dihapus dari basis data) , dan di mana dalam kode Drupal kait disebut (yang bisa lebih dari satu tempat).
Anda dapat menjelajahi apa yang ada kait dan mencari tahu data apa yang diteruskan kepada mereka dengan mengeksplorasi hal-hal yang dimulai dengan "hook_" di api Drupal .
Kait bekerja dengan konvensi nama: menggunakan hook_node_delete
sebagai contoh kita, ketika proses penghapusan simpul mencapai titik di mana kait dipanggil, untuk setiap modul dengan fungsi seperti ini di [modulename]_node_delete()
mana kata kait dalam nama kait diganti dengan nama modul (mis. my_amazing_module_node_delete()
), fungsi-fungsi itu dipanggil.
Mengapa? Jadi, modul apa pun dapat melakukan apa saja pada titik-titik utama ini: misalnya Anda dapat melihat simpul yang dihapus dan melakukan sesuatu jika memenuhi syarat tertentu (mis., Kirim email ke administrator, atau luncurkan proses yang panjang).
Beberapa kait memungkinkan Anda mengubah hal-hal yang telah dihasilkan sebelum diproses. Misalnya, hook_menu_alter () memberikan Anda item menu saat ini yang telah dihasilkan oleh sistem. Modul apa saja dapat mendefinisikan fungsi some_modulename_menu_alter () dan melihatnya, secara opsional mengubahnya (hapus beberapa, tambahkan beberapa, sortir ...), dan kembalikan menu yang baru diubah kembali.
Ini sederhana, sangat kuat dan merupakan inti bagaimana Drupal bekerja sebagai sistem modular. Implementasi hook adalah inti dari sebagian besar modul Drupal.
Ketika melihat melalui kode modul Drupal, Anda dapat melihat fungsi mana yang berasal dari kait (sebagai lawan dari fungsi yang hanya dipanggil dari dalam kode modul itu sendiri), karena komunitas Drupal menegakkan konvensi di mana setiap implementasi kait memiliki komentar di depannya seperti ini (perhatikan bit "Implements hook _..."):
/**
* Implements hook_some_hook().
*
* Some descriptive summary of what this does
*/
function my_amazing_module_some_hook() {
Beberapa modul yang bertindak sebagai API menentukan pengait mereka sendiri. Sebagai contoh, Views mendefinisikan banyak kait yang memungkinkan Anda untuk menambah, membaca, dan mengedit data di berbagai titik dalam proses membuat atau menampilkan tampilan. Anda dapat menemukan informasi tentang kait yang dibuat dalam modul khusus dari dua tempat (dengan asumsi modul mengikuti konvensi, dll.):
Bootstrap, seperti yang dijelaskan orang lain, pada dasarnya booting - saya tidak akan menduplikasi penjelasan yang jelas lainnya.
Dalam istilah awam, kait adalah semacam jembatan yang menyediakan cara bagi modul untuk saling berinteraksi, mengubah struktur dan data masing-masing, memberikan data baru, dll.
Dalam kebanyakan kasus, kata
hook_
dalam nama fungsi diganti dengan nama modul Anda, dan itu memberikan cara bagi modul Anda untuk memanfaatkan operasi modul lain. Misalnya modul inti drupal yang disebut "simpul" memanggil berbagai kait. Salah satunya adalahhook_node_update
yang dipanggil setiap kali node yang ada diperbarui. Ketika kait ini dipanggil,mymodule
implementasi modul Anda (sebut kami menyebutnya )hook_node_update
dipanggil, yang dalam hal ini akan menjadi fungsi dalam file .module modul Anda yang disebutmymodule_node_update
(Jelas fungsi ini dapat berada di file apa saja di folder modul Anda selama itu termasuk dalam file .module juga). Hook ini juga akan memberikan parameter (variabel) yang diperlukan yang dapat digunakan, dimodifikasi, dan / atau kembali ke fungsi yang memanggil hook.Ketika saya pertama kali mulai belajar Drupal, saya berada di kapal yang sama seperti Anda sekarang, agak sulit untuk dipahami pada awalnya, tetapi begitu Anda mengerti, itu sangat sederhana dan intuitif. Semoga berhasil.
sumber
Salah satu pengembang inti menulis sebuah artikel beberapa waktu lalu yang disebut "pemrograman Drupal dari perspektif berorientasi objek" . Itu melakukan pekerjaan yang baik untuk menjelaskan bagaimana kait dapat dianggap menerapkan banyak pola desain umum . Penjelasan terbaik tentang kait berasal dari artikel:
sumber
Bootstrap adalah proses yang Drupal lalui untuk membangun halaman, pada dasarnya menjalankan semua kode inti, tema, dan modul secara berurutan.
Pada dasarnya cara Drupal melakukan booting, dan bersiap untuk melakukan pekerjaannya sebagai CMS.
Ini pintar, karena memungkinkan kita untuk menempatkan kait di mana saja dalam modul dan tema kita, dan proses bootstrap memastikan mereka terhubung pada titik yang tepat.
Misalnya jika Anda menggunakan 'hook_form_alter' untuk menambahkan kotak centang khusus ke formulir, bootstrap Drupal akan memastikan ia menjalankan kode itu, tepat sebelum merender formulir Anda.
Salah satu masalah dengan bootstrap adalah bahwa seluruh proses membutuhkan waktu untuk berjalan, bahkan jika Anda hanya mengembalikan sejumlah kecil data. Saat menggunakan Drupal dengan modul layanan sebagai API dan mengembalikan banyak respons XHTML atau JSON kecil, menjalankan seluruh bootstrap tidak terlalu performan. Beberapa orang pintar mencari jalan pintas untuk Drupal 8.
Tetapi untuk merender halaman Drupal yang normal, proses bootstrap berfungsi dengan baik, ia menggunakan sistem caching Drupal untuk mempercepat, dan memberi Anda kontrol total atas setiap bagian situs Anda. Jika Anda menemukan situs Anda lambat, Anda selalu dapat menggunakan sesuatu seperti APC atau MemCached untuk membantu mempercepatnya.
Saya harap jawaban saya akurat dan menjelaskan hal-hal hanya untuk Anda, saya bukan ahli, tetapi saya pikir itulah cara kerjanya.
sumber
Bootstrap adalah proses di mana Drupal menginisialisasi sendiri; proses sebenarnya meliputi:
$_SERVER
init_set()
Beberapa operasi yang saya jelaskan khusus untuk Drupal 7, atau lebih tinggi, tetapi sebagian besar operasi independen dari versi Drupal.
Hook adalah fungsi PHP yang bisa dipanggil dari Drupal, atau modul pihak ketiga, bila perlu untuk melakukan tugas. Alih-alih memiliki daftar fungsi yang diawali untuk dipanggil, daftar ini dibangun memeriksa modul yang diaktifkan, dan fungsi yang mereka implementasikan.
Sebagai contoh, Drupal menggunakan
hook_node_update()
; ketika sebuah node disimpan dengan node_save () , kode berikut dijalankan.Apa yang dilakukan node_invoke () adalah sebagai berikut:
$node
sebagai parameterHook dapat menyimpan data mereka sendiri dalam database, atau mengubah nilai yang dikembalikan dari suatu fungsi. Kasus terakhir adalah, misalnya, apa yang terjadi dengan hook_form_alter () , yang mengubah nilai yang
$form
dikirimkan sebagai referensi ke drupal_prepare_form () .Drupal hooks biasanya dipanggil menggunakan tiga fungsi:
drupal_alter()
adalah fungsi yang digunakan untuk memanggil kait tertentu yang tujuannya adalah untuk mengubah data yang dikirimkannya sebagai referensi, seperti hook_form_alter () , hook_hook_info_alter () , dan hook_tokens_alter () .Ada fungsi-fungsi lain yang digunakan untuk mengaktifkan kait, seperti
node_invoke()
, tetapi fungsi-fungsi tersebut pada dasarnya menggunakan salah satu fungsi yang saya sebutkan sebelumnya.sumber
Hooks adalah pointcuts dan
module_invoke_all
merupakan penenun (sayangnya kami tidak jelas dalam implementasinya dan ada fungsi tenun lainnya). Sejauh yang saya ketahui, Drupal adalah satu-satunya sistem untuk mengimplementasikan AOP dengan fungsi PHP.Lihat penjelasan lain tentang Bagaimana cara kerja AOP di Drupal?
sumber
Jika Anda ingin melihat kait yang memungkinkan Drupal Anda hubungi, buka api.drupal.org , tab ke kotak pencarian, dan ketik 'hook_'. Ini akan memberi Anda daftar besar sebagian besar kait yang ditentukan oleh Drupal. Lakukan hal yang sama untuk '_alter' dan lihat lebih banyak lagi.
Halaman Node API Hooks menawarkan daftar kronologis semua kait yang dipanggil selama operasi simpul. Anda dapat melihat modul Node dan sistem Entity and Field saling memberikan belokan pada pengait yang digunakan.
Misalnya, jika Anda gulir ke bawah dan lihat bagian untuk
node_load()
: Modul Node akan memberi Anda hook_load (), dan kemudian memberikan kontrol ke sistem entitas yang memuat beberapa bidang. Ada seluruh host kait bidang yang tidak terdaftar, dan kemudian ketika itu atas sistem entitas memanggilhook_entity_load()
, sebelum melewati kontrol kembali ke Node yang memanggilhook_node_load()
.Ini memberi kode Anda peluang untuk bertindak pada simpul yang dipermasalahkan saat dimuat, sepotong demi sepotong. Mempelajari kait-kait ini dan kapan serta mengapa mereka dipanggil adalah bagian dari petualangan pengkodean Drupal. :-)
Sistem lain juga memiliki pengait. Seperti
hook_init()
danhook_boot()
. Ini sampai ke bagian bootstrap dari pertanyaan Anda.hook_boot()
dipanggil oleh Drupal sebelum sistem cache dimuat. Jadi, jika modul Anda perlu melakukan sesuatu sebelum Drupal benar-benar dimulai, dan Anda ingin kode Anda berjalan terlepas dari caching, maka Anda akan menerapkannyahook_boot()
. Jika tidak, jika Anda hanya peduli tentang halaman yang tidak di-cache, Anda akan menerapkannyahook_init()
.Ini memberi Anda opsi untuk mengimplementasikan sesuatu di awal proses pemuatan, sebelum Drupal sepenuhnya mem-boot, sambil memberi Anda beberapa fleksibilitas mengenai titik mana dalam proses yang ingin Anda sadap.
Jika Anda perlu memastikan Drupal telah boot ke titik tertentu sebelum melanjutkan, Anda dapat menelepon
drupal_bootstrap()
. Jika Anda mengklik dokumentasi itu Anda dapat melihat level bootstrap tersedia, dari nol hingga semuanya.Dan, akhirnya, Anda dapat melihat beberapa kode yang didokumentasikan secara luas untuk setiap subsistem yang diberikan pada proyek Contoh .
sumber
Hooks adalah fungsi php, blok bangunan berdasarkan pada konvensi penamaan "yourmodulename_hookname", mereka dimaksudkan untuk memudahkan kemampuan pengembang untuk membuat modul .
Modul adalah real deal karena mereka mengaktifkan fungsi INTI dan kustom di sistem Drupal Anda. Dengan demikian, modul terbuat dari kait dan ketika sebuah modul diaktifkan di instalasi Drupal Anda, fungsi kaitnya dapat dipanggil dari modul lain berkat module.inc function module_invoke_all ($ hook) atau module_invoke.
Oleh karena itu, untuk memahami dengan benar apa kaitnya, Anda harus benar-benar mengotori tangan Anda dan mencoba pengembangan modul. Untuk tujuan ini, mulailah dengan mengunduh dan mencoba beberapa Contoh Drupal untuk Pengembang , Anda juga harus terbiasa dengan pembuatan modul .
Berikut adalah beberapa contoh Drupal yang berguna untuk pengembang yang disebutkan di atas:
contoh implementasi hook_block_view () dalam modul block_example
Kait ini memberi Anda akses ke kreasi Drupal untuk menampilkan blok khusus di situs web Anda. Ini dimungkinkan karena block.module memiliki fungsi _block_render_block yang memungkinkan semua modul untuk mendefinisikan tampilan hook_block mereka (perhatikan baris terakhir module_invoke):
contoh implementasi hook_menu () dalam modul render_example
Hook ini ditautkan ke sistem perutean url Drupal dan menentukan pola url dengan panggilan balik render terkait yang digunakan oleh modul Anda. Itu dipanggil dari system.module .
Tentang bootstrap, pada dasarnya, Anda hanya perlu tahu itu dijalankan pada setiap permintaan halaman. Saya benar-benar menyarankan Anda untuk membaca jawaban stackoverflow ini , ini menjelaskan bagaimana bootstrap dan kait terkait tetapi terpisah.
Mengenai tampilan halaman web, tampilan html situs web Drupal sebagian besar dicapai dengan render array dan theming.
sumber
Di mana saja modul memanggil module_implements () http://api.drupal.org/api/drupal/includes%21module.inc/function/module_implements/7 Drupal akan memecat semua fungsi yang dinamai dengan benar dalam urutan yang benar berdasarkan bobotnya. Ini disebut fungsi kait karena dalam dokumentasi untuk modul yang menggunakan module_implements Anda melihat hal-hal seperti hook_menu (ketika menu memanggil semua fungsi yang dirancang untuk mengembalikan item menu). Kata "hook" hanya perlu diganti dengan nama modul yang mengimplementasikannya dan Drupal yang melakukan sisanya.
Ada juga fungsi drupal_alter () yang menjalankan semua fungsi alter yang dinamai dengan benar, dengan maksud untuk membiarkan Anda mengubah hal-hal yang sebelumnya didaftarkan oleh kait lain.
Secara umum perubahan akan melewati argumen dengan referensi sehingga Anda dapat mengedit objek secara langsung, sedangkan kait "normal" biasanya membuat Anda mengembalikan hal-hal baru.
Idenya adalah bahwa setiap modul (termasuk Anda) dapat dengan mudah diperpanjang dengan meminta Drupal untuk memanggil semua fungsi kait yang diperlukan dan mendapatkan kembali apa yang mereka kembalikan untuk diproses. Modul yang memanggil fungsi hook tidak perlu tahu apa-apa tentang modul yang mengimplementasikan hook, dan modul yang mengimplementasikan hook tidak benar-benar perlu tahu apa-apa tentang modul yang memanggil hook. Satu-satunya hal yang perlu diketahui kedua modul adalah struktur data yang dikembalikan atau diubah.
Dalam praktiknya, kait biasanya digunakan untuk:
sumber
Anda memiliki banyak jawaban di atas tetapi saya ingin memberikan jawaban dengan cara yang lebih sederhana untuk memahami konsep yang sangat mendasar di balik kait. Hooks sebenarnya dibangun di fungsi dalam inti drupal untuk mengelola hal-hal yang berbeda & melakukan pekerjaan yang berbeda di dalam inti, Anda dapat menyinkronkan fungsi Anda sendiri dengan fungsi inti drupal ini untuk menambahkan fungsionalitasnya dalam fungsi Anda sendiri dengan memanggil kait yang berbeda.
Saya harap Anda akan mengerti intinya!
sumber
Bagi saya ini semua tentang fungsi module_implements ketika datang ke hooks dan core (D7). Satu hal yang saya pikir sangat penting untuk dipahami adalah bahwa dengan menulis kait untuk memodifikasi sesuatu, Anda tidak boleh memiliki suara terakhir dalam apa yang terjadi pada struktur data yang Anda hadapi. Hook Anda cukup masuk dalam garis (antrian) fungsi yang JUGA bekerja pada struktur data yang sama apakah itu menu, menu_links, blok, node, pengguna atau entitas atau elemen render apa pun.
Jadi untuk benar-benar melihat kait Anda digunakan dengan cara yang diharapkan, Anda perlu tahu atau mengetahui di mana Anda (kait Anda) berdiri dalam barisan. Ini ditentukan oleh berat mondule Anda. Inti Drupal hanya memanggil kait yang disebut dengan benar dalam urutan kenaikan berat badan dan apa pun yang terjadi pada data terjadi.
Saya sudah menulis kait sebelumnya yang tidak memiliki efek apa pun, hanya untuk mengetahui setelah berjam-jam headbanging bahwa berat modul saya terlalu ringan dan kait sub-urutan secara efektif tidak melakukan apa yang saya lakukan atau benar-benar mengabaikannya bersama-sama.
Sebuah kait yang ditulis dengan baik tidak akan "menangani manusia" atau "memaksa" diri mereka untuk menjadi yang terakhir tetapi akan "menempatkan yang baik dengan yang lain" dengan memastikan mereka mempertahankan struktur data seperti yang diharapkan oleh sisa kait di telepon.
Dan berbicara tentang "Garis" kait. Selama bertahun-tahun saya mencari Google untuk hal-hal Drupal, gambar ini tampaknya merupakan representasi yang baik dari preprocess dan daftar proses kait kemungkinan.
sumber
Dengan cara yang lebih sederhana, kait membantu pengembang untuk mengubah fungsi yang ada sesuai dengan persyaratan tanpa membuat perubahan pada kode yang ada. Lebih mirip fungsi abstrak di php.
Contoh: Anda telah membuat modul untuk pemesanan tiket bus. Menurut kode Anda jika tiket sekali dipesan maka lokasi pengambilan tidak dapat diedit yang merupakan persyaratan Anda untuk proyek itu. Misalkan teman Anda memerlukan modul yang sama untuk persyaratan yang sama dengan pengecualian bahwa pengguna dapat mengubah lokasi pengambilan. Entah bagaimana dia harus menggunakan modul Anda dan Anda tidak ingin dia melakukan perubahan kode. Jadi Anda menyediakan antarmuka (kaitkan dalam kasus kami) di mana ia dapat mengimplementasikan perubahannya tanpa membuat perubahan pada modul Anda.
Dalam drupal hingga drupal-7 kami memiliki kait untuk modul serta tema. Untuk mengetahui cara kerja kail, periksa apakah kail drupal.org untuk membuat kail khusus, periksa tautan ini
sumber
Kait. Izinkan modul berinteraksi dengan inti Drupal. Sistem modul Drupal didasarkan pada konsep "kait". Hook adalah fungsi PHP yang bernama foo_bar (), di mana "foo" adalah nama modul (dengan nama file foo.module) dan "bar" adalah nama hook.
sumber