Bagaimana saya bisa mendekati penerapan hal berikut di Drupal 7?
Yang perlu saya lakukan adalah membuat modul yang mendefinisikan entitas fieldable baru, yang disebut 'Perusahaan'. Saya punya daftar, katakanlah, 20 bidang yang perlu diisi oleh setiap instance Perusahaan. Pertanyaan-pertanyaan ini sudah ditentukan sebelumnya dan beberapa mungkin berisi validasi khusus.
Saat ini, saya pada titik ketika saya dapat menambahkan bidang baru ke entitas Perusahaan. Ini berfungsi dengan baik saat ini. Masalah saya adalah bahwa saya perlu semua bidang ini ada di sana segera setelah modul diinstal, jadi menambahkannya melalui antarmuka bukanlah pilihan.
Saya bertanya-tanya bagaimana saya bisa mendekati ini? Saya berasumsi bahwa ini adalah kemampuan untuk melakukan apa yang dapat dilakukan dengan menggunakan UI 'Manage Fields' secara terprogram.
node_type_set_defaults()
dannode_type_save()
, juga, tentu sajahook_install()
,.Jawaban:
Gunakan field_create_field () untuk membuat bidang itu sendiri dan field_create_instance () untuk memiliki instance untuk bundel entitas yang diberikan.
Saat membuat bidang sebagai bagian dari modul khusus, Anda mungkin atau mungkin tidak ingin menghapus bidang ketika modul dihapus. Untuk melakukannya, Anda bisa menggunakan field_delete_field () jika Anda ingin menghapus bidang dan semua instance bidang, atau jika Anda ingin menghapus instance tertentu Anda dapat menggunakan field_delete_instance () .
sumber
Contoh tentang cara menambahkan bidang ke profil pengguna secara sistematis dan bagaimana memanfaatkannya, atau tidak, ke dalam formulir Registrasi Pengguna.
sumber
Jika Anda perlu membuat / menghapus bidang dengan cepat dari Tipe Konten atau atau Entitas yang ada, tanpa menggunakan UI atau pemrograman, Anda dapat menggunakan perintah Drush yang kurang dikenal ini:
Misalnya: Buat dua bidang baru untuk Artikel:
Perintah lain:
sumber
Seperti yang ditunjukkan oleh orang lain, Anda dapat menggunakan fungsi API Bidang dari implementasi hook_install () modul Anda untuk membuat bidang dan instansnya untuk tipe konten Anda. Lihat node_example_install () untuk contoh penggunaan fungsi.
Solusi lain adalah dengan menggunakan modul Fitur . Fitur dapat mengekspor berbagai komponen situs ke kode dalam sebuah modul. Jenis dan bidang konten di antaranya dapat diekspor. Anda dapat membuat modul Fitur dan mengganti kode yang ada, Fitur kemudian akan melakukan yang terbaik untuk menghindari kerusakan kode Anda. Atau Anda dapat membuat modul dummy dan menyalin./sisipkan kode yang terkait dengan bidang ke modul Anda. Ini membutuhkan pemahaman dasar tentang cara kerja Fitur.
sumber
Dalam file instal Anda, Anda harus mendefinisikan 'hook_install' dan 'hook_uninstall'. Contoh disertakan tetapi membaca semua tentang kunci tambahan dalam referensi API (kode tidak diuji sehingga mungkin salah ketik di sana).
Di
hook_install
Anda dapat menambahkan bidang menggunakan:field_create_field , Fungsi ini membangun templat untuk bidang.
field_create_instance Dapat digunakan setelah membuat bidang untuk menambahkannya ke content_types (juga dikenal sebagai bundel).
Perhatikan Nama-nama berbagai jenis bidang dapat ditemukan dalam modul yang menghasilkan mereka (itu adalah kunci dari item array di hook_field_info mereka). Anda dapat menemukan semua modul pelaksana bidang inti di folder modules / field / modules.
Pengaturan juga dapat diturunkan dari modul bidang. Pengaturan yang Anda atur di
field_create_field
adalah situs yang lebar. Yang Anda aturfield_instance_create
adalah yang spesifik node_typeDalam
hook_uninstall
field_delete_instance dan field_delete_field dapat digunakan untuk menghapusnya lagi,
field_delete_field
dipanggil secara otomatis jika Anda menghapus instance terakhir (biasanya).sumber
Saya baru-baru ini memiliki kebutuhan yang sama untuk sebuah proyek, di sini adalah bagaimana saya mendekatinya, berharap itu bisa membantu seseorang.
Pada dasarnya Anda akan membuat bidang yang Anda butuhkan menggunakan UI bidang, mengekspornya ke kode dan kemudian memasukkannya ke dalam modul khusus Anda. Anda akan membutuhkan modul Devel diaktifkan.
Saya juga membuat inti dengan info ini.
Kita mulai....
Setel 3 variabel pertama dan kemudian klik eksekusi
Anda akan mendapatkan 2 array, kira-kira seperti ini, semoga dengan semua properti terisi.
Sekarang tambahkan kode berikut ke file .install Anda. Ganti semua instance mymodule dengan nama modul yang sebenarnya. Tempel kode dari output devel ke dalam _mymodule_field_data dan _mymodule_instance_data, seperti yang dicatat di masing-masing fungsi di bawah ini. Anda dapat melakukan ini untuk sebanyak bidang yang Anda suka, cukup letakkan semua array $ field dalam fungsi _mymodule_field_data dan semua $ instance dalam fungsi _mymodule_instance_data.
sumber
Anda juga dapat mempertimbangkan menggunakan modul Fitur untuk membuat bidang pada waktu pemasangan.
Saat Fitur menghasilkan kode untuk bidang, opsi hanya menggunakan modul Fitur untuk menghasilkan kode menjadi modul dummy dan kemudian salin & tempel ke file .install modul Anda.
Manfaatnya adalah modul tidak tergantung pada modul Fitur di lingkungan target Anda.
sumber
Anda dapat menggunakan kode modul perusahaan khusus yang diberikan di bawah ini untuk membuat tipe konten secara terprogram dengan berbagai bidangnya.
Anda dapat menambahkan kode ini dalam file .install dari modul khusus Anda. Ini secara terprogram akan menambahkan jenis konten yang disebut "perusahaan" dan berbagai jenis bidangnya (teks, angka, tanggal (catatan: Anda harus memasang modul Tanggal karena bidang Tanggal tidak disediakan secara default), gambar, daftar).
Saya juga telah menambahkan kode uninstall yang akan menghapus tipe "perusahaan" konten beserta semua bidang dan datanya ketika Anda akan menghapus modul 'customcompanymodule' Anda.
Anda dapat memodifikasi / menghapus bidang ini sesuai kebutuhan Anda:
sumber