mata utama
Entiti di Drupal adalah cara yang kuat untuk menganjurkan data dan boleh disesuaikan untuk mewakili jenis maklumat tertentu. Tutorial ini menunjukkan cara membuat jenis entiti tersuai yang dipanggil Projek yang merangkumi atribut seperti tajuk, keterangan, dan tarikh akhir.Dalam tutorial ini, saya akan menunjukkan kepada anda bagaimana untuk menentukan jenis entiti tersuai anda sendiri dan mulakan dengannya. Mengapa ada yang mahu melakukan ini dan bukannya menggunakan nod? Kerana walaupun mereka hebat, nod kadang -kadang boleh terlalu kompleks. Anda mungkin tidak memerlukan banyak ciri, seperti semakan atau komen. Dalam tutorial ini, kami akan menentukan jenis entiti tersuai kami yang disebut "Projek" untuk mewakili maklumat mudah kami mengenai projek (tajuk, keterangan, dan tarikh akhir). Kami kemudian akan belajar sedikit tentang menggunakan entiti jenis ini.
Untuk terus belajar, saya mengandaikan anda tahu bagaimana menulis modul adat asas (modul saya dinamakan demo). Anda boleh mencari tutorial yang sangat baik mengenai topik ini di sini. Teruskan menulis fail .Info dan buat fail .module dan .Install kosong. Saya juga menyediakan repositori Git di mana anda boleh mendapatkan semua kod sumber untuk tutorial ini (satu cawangan untuk setiap bahagian, dua bahagian akan diterbitkan).
Selain itu, anda perlu mengaktifkan modul Sumbangan API Entiti di laman web anda dan menetapkannya sebagai kebergantungan untuk modul tersuai. Modul API Entiti sangat kuat apabila berurusan dengan entiti kerana ia menyediakan banyak ciri yang kekurangan Drupal Core.
Tentukan jenis entiti Drupal kita sendiri
Mewujudkan jenis entiti baru yang pertama memerlukan mengisytiharkan definisi skema. Iaitu, tulis kod yang akan menjana jadual pangkalan data entiti. Dalam fail demo.Install saya, saya mempunyai kod berikut:
/** * Implements hook_schema(). */ function demo_schema() { $schema = array(); $schema['demo_projects'] = array( 'description' => 'The base table for the Project entity', 'fields' => array( 'id' => array( 'description' => 'Primary key of the Project entity', 'type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE, ), 'name' => array( 'description' => 'Project name.', 'type' => 'varchar', 'length' => 255, 'not null' => FALSE, ), 'description' => array( 'description' => 'Project description.', 'type' => 'text', 'size' => 'big', 'not null' => FALSE, 'default' => NULL ), 'deadline' => array( 'description' => 'Project deadline.', 'type' => 'int', 'length' => 11, 'not null' => FALSE, ), ), 'primary key' => array('id'), ); return $schema; }
Ini adalah pelaksanaan mudah HOOK_SCHEMA (). Ia bukan masalah besar.
Seterusnya, kita perlu melaksanakan hook_entity_info (). Kami boleh menentukan banyak pilihan dalam cangkuk ini, tetapi di sini adalah pilihan yang paling asas dan diperlukan (ini dalam fail demo.Module):
/** * Implements hook_entity_info(). */ function demo_entity_info() { $info = array(); $info['project'] = array( 'label' => t('Project'), 'base table' => 'demo_projects', 'entity keys' => array( 'id' => 'id', 'label' => 'name', ), 'module' => 'demo', 'entity class' => 'Entity', 'controller class' => 'ProjectEntityController', ); return $info; }
Dengan cangkuk ini, kami mengembalikan kunci baru dalam array Info $, yang mewakili nama mesin entiti. Dalam array ini, kami menentukan pilihan (kami akan menambah lebih banyak pilihan semasa tutorial ini). Sekarang kita akan menggunakan tag (nama yang boleh dibaca jenis entiti), jadual asas yang menyimpan data entiti, kunci entiti yang bertindak sebagai atribut pengenal entiti, dan modul yang menentukan modul yang menentukan jenis entiti. Yang terakhir tidak wajib, tetapi disyorkan.
Dengan cara ini, kami mendaftarkan jenis entiti asas kami sendiri dengan Drupal. Untuk menguji jika ia berfungsi, aktifkan modul untuk kali pertama dan periksa sama ada jadual telah dibuat dalam pangkalan data. Kemudian isi dengan beberapa baris supaya ada sesuatu yang boleh digunakan:
INSERT INTO `demo_projects` (`id`, `name`, `description`, `deadline`) VALUES (1, 'Summer House', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397501105), (2, 'Winter House', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397501132);
Akhirnya, gunakan HOOK_MENU () untuk mendaftarkan jalan (untuk mana -mana laluan hanya untuk ujian) menggunakan Drupal dan tampal yang berikut ke dalam fungsi panggil baliknya:
$projects = entity_load('project', array(1, 2)); dpm($projects); return 'Some string';
Pertama, kami menggunakan fungsi entity_load () untuk memuatkan entiti projek dengan ID 1 dan 2, dan kemudian kami menggunakan fungsi DEVEL dpm () (jadi pastikan devel didayakan di tapak anda untuk ujian) untuk mencetaknya ke Skrin Superior. Jangan lupa bahawa fungsi panggil balik halaman perlu mengembalikan sesuatu, jika tidak, ia tidak akan dibina.
Sekarang jika anda menavigasi ke halaman ini, anda akan melihat data untuk 2 entiti dalam pangkalan data di Krumo.
Sebagai alternatif, anda boleh menggunakan kelas EntityFieldQuery untuk menanyakan entiti baru berdasarkan mana -mana harta yang anda mahu (bukan hanya ID). Untuk maklumat lanjut mengenai bagaimana ini berfungsi, anda boleh menyemak tutorial SitePoint ini, yang akan membantu anda memulakan.
Malangnya, teras Drupal tidak menyediakan terlalu banyak fungsi penolong untuk mengendalikan entiti (entity_load () hampir unik). Walau bagaimanapun, modul API entiti mengisi jurang ini.
Untuk menggunakan fungsinya, kita perlu menukar maklumat entiti yang kami nyatakan sebelum ini dan menentukan kelas PHP yang boleh digunakan untuk mengendalikan entiti. Sekarang, kami akan menambah dua lagi kunci kepada pelbagai projek yang ditaip dalam pelaksanaan hook_entity_info ():
Kod yang disebutkan di atas sudah mengandungi 'entity class' => 'Entity', 'controller class' => 'ProjectEntityController',
Kelas EntityAPIConTroller (terletak di Fail Entity.Controller.inc modul) menyediakan beberapa nilai lalai yang munasabah untuk entiti pemprosesan. Ia memanjangkan kelas Drupal Core DrupalDefaultEntityController dan bertanggungjawab (antara banyak perkara lain) yang melakukan operasi CRUD.
Kedua -dua kelas boleh dilanjutkan dalam modul tersuai anda untuk menyesuaikan fungsi (seperti pertanyaan, memuatkan, atau memaparkan entiti). Kami akan melihat bagaimana untuk melakukannya kemudian.
Tetapi pertama, saya ingin menunjukkan kepada anda bagaimana untuk menyelamatkan entiti baru. Pada masa ini, terdapat 2 rekod dalam pangkalan data saya dengan ID 1 dan 2. Saya ingin menyesuaikan kod yang kami tulis dalam fungsi panggil balik halaman ujian di atas untuk membuat entiti baru dengan ID 3 tanpa ia. Ia mungkin kelihatan seperti ini:
/** * Implements hook_schema(). */ function demo_schema() { $schema = array(); $schema['demo_projects'] = array( 'description' => 'The base table for the Project entity', 'fields' => array( 'id' => array( 'description' => 'Primary key of the Project entity', 'type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE, ), 'name' => array( 'description' => 'Project name.', 'type' => 'varchar', 'length' => 255, 'not null' => FALSE, ), 'description' => array( 'description' => 'Project description.', 'type' => 'text', 'size' => 'big', 'not null' => FALSE, 'default' => NULL ), 'deadline' => array( 'description' => 'Project deadline.', 'type' => 'int', 'length' => 11, 'not null' => FALSE, ), ), 'primary key' => array('id'), ); return $schema; }
seperti yang anda lihat, sekarang kami cuba memuatkan 3 entiti projek dan periksa sama ada entiti ketiga wujud. Jika ia tidak wujud, kami akan menggunakan fungsi penolong entity_create () yang disediakan oleh API Entiti, tetapkan harta itu kepada beberapa nilai rawak, dan kemudian gunakan kaedah simpan () pada entiti untuk berterusan ke pangkalan data. Kaedah ini disediakan oleh kelas entiti, dan tugasnya adalah untuk memanggil kaedah SAVE () pada kelas pengawal yang kami tentukan di atas. Kaedah ini akan melaksanakan logik yang diperlukan untuk meneruskan entiti. Tetapi semua ini berlaku di belakang tabir, kita tidak perlu bimbang mengenainya.
Jika anda memuatkan semula halaman, anda hanya perlu melihat 2 entiti projek yang dikembalikan, tetapi jika kali kedua anda harus mempunyai 3.
Perkara terakhir yang saya ingin tunjukkan kepada anda dalam bahagian tutorial ini adalah cara memaparkan entiti anda. Untuk melakukan ini, kami akan berpegang dengan fungsi panggil balik halaman yang telah kami gunakan dan menjadikannya senarai sebenar.
Pertama, kita perlu mengatasi kaedah BuildContent () kelas entitiPicontroller lalai. Sebabnya ialah pengawal tidak boleh membuat andaian mengenai data kami, jadi kami perlu memberikan beberapa maklumat tentang cara memaparkannya. Pertama, mari kita mengisytiharkan kelas pengawal yang memanjangkan kelas sebelumnya:
/** * Implements hook_entity_info(). */ function demo_entity_info() { $info = array(); $info['project'] = array( 'label' => t('Project'), 'base table' => 'demo_projects', 'entity keys' => array( 'id' => 'id', 'label' => 'name', ), 'module' => 'demo', 'entity class' => 'Entity', 'controller class' => 'ProjectEntityController', ); return $info; }
Saya memilih Nama Kelas ProjectEntityController, anda perlu memastikan untuk menggantikan nilai yang anda tetapkan untuk Kunci Kelas Pengawal dalam pelaksanaan HOOK_ENTITY_INFO (). Jangan lupa.
Di kelas ini, kita boleh menyalin nama kaedah dari kelas asal dan menjadikannya kembali kelas induknya yang akan kembali:
Di kelas ini, kita boleh menyalin nama kaedah dari kelas asal dan menjadikannya kembali kelas induknya. Kami pada dasarnya menambah dua item baru ke array. Yang pertama akan membungkus keterangan dengan <div>
, dan yang kedua akan mengeluarkan tarikh diformat antara label perenggan. Ini adalah tema Drupal asas, jika anda tidak faham apa yang berlaku di sini, sila semaknya. Tetapi anda akan melihat nama projek yang hilang. Drupal akan menjadikannya secara automatik kerana kami menentukannya sebagai tag dalam kunci entiti yang dilaksanakan oleh hook_entity_info (). Langkah terakhir ialah pergi ke fungsi panggilan balik halaman kami dan menjadikannya memaparkan entiti kami. Cara Cepat (untuk tujuan demonstrasi sahaja):
INSERT INTO `demo_projects` (`id`, `name`, `description`, `deadline`) VALUES (1, 'Summer House', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397501105), (2, 'Winter House', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397501132);
seperti dahulu, kita mula -mula memuat entiti dengan ID yang sepadan. Kami kemudian menjalankannya melalui fungsi penolong entity_view (), yang akhirnya akan memanggil kaedah BuildContent () yang kami hanya ditimpa. Fungsi ini mengembalikan senarai tatasusunan yang diberikan untuk setiap entiti. Kami menjadikan setiap dan menyimpan hasil dalam array output $, kemudian menggabungkannya dan mengembalikannya.
anda boleh menyegarkan semula halaman dan anda harus melihat senarai semua entiti yang anda muat. Pastikan cache dibersihkan supaya perubahan dapat dilihat.
Dalam tutorial ini, kita mula belajar tentang entiti di Drupal dengan menentukan jenis entiti kita sendiri dalam kod. Kami telah belajar bagaimana menulis definisi skema untuk data yang mereka wakili dan bagaimana untuk mendaftarkannya dengan Drupal. Kemudian kita melihat kuasa menggunakan modul sumbangan API entiti untuk mengendalikan entiti dengan cara yang berorientasikan objek.
Di bahagian kedua tutorial ini, kita akan melihat tiga aspek utama. Pertama, kami akan membuat beberapa halaman untuk memaparkan entiti projek individu dan melancarkan antara muka pengurusan untuk menguruskan projek. Kedua, kami akan menjadikannya melalui UI. Ketiga, kami akan mendedahkannya kepada pandangan supaya kami dapat melakukan pertanyaan yang sesuai dan memaparkan senarai. Tinggal!
Sebelum anda mula membuat entiti adat Drupal, anda perlu mempunyai pemahaman asas mengenai API Entiti Drupal. Anda juga harus akrab dengan konsep PHP dan pengaturcaraan berorientasikan objek. Di samping itu, anda sepatutnya menubuhkan persekitaran pembangunan Drupal. Ini termasuk memasang dan mengkonfigurasi Drupal pada mesin atau pelayan tempatan.
Mewujudkan entiti kandungan tersuai dengan satu bundle di Drupal melibatkan pelbagai langkah. Pertama, anda perlu menentukan entiti dan sifatnya dalam modul tersuai. Kemudian anda perlu membuat borang untuk menambah dan mengedit entiti anda. Selepas itu, anda perlu menentukan laluan untuk operasi entiti. Akhirnya, anda perlu membuat pembina paparan untuk memaparkan entiti anda.
Di Drupal, entiti kandungan adalah serpihan kandungan yang boleh dibuat, diedit dan dipadam oleh pengguna. Contohnya termasuk nod, pengguna, dan komen. Sebaliknya, entiti konfigurasi adalah serpihan konfigurasi yang disimpan dalam pangkalan data dan boleh dieksport ke kod. Contohnya termasuk pandangan, gaya imej, dan peranan pengguna.
Membuat jenis entiti kandungan dalam Drupal 8 melibatkan menentukan entiti dan sifatnya dalam modul tersuai. Anda juga perlu membuat borang untuk menambah dan mengedit entiti anda, menentukan laluan untuk operasi entiti, dan buat pembina paparan untuk memaparkan entiti anda.
Ya, anda boleh membuat entiti tersuai di Drupal menggunakan modul API Entity. Modul ini menyediakan cara bersatu untuk mengendalikan entiti dan sifat mereka. Ia juga menyediakan API untuk melaksanakan operasi pada entiti seperti penciptaan, membaca, mengemas kini, dan memadam.
Membuat entiti adat Drupal membolehkan anda menentukan struktur data anda sendiri dan logik perniagaan. Ini boleh menjadikan laman web anda lebih cekap dan mudah diurus. Entiti tersuai juga membolehkan anda memanfaatkan API Entiti Drupal, yang menyediakan alat yang berkuasa untuk mengendalikan entiti.
Untuk menambah medan ke entiti tersuai di Drupal, anda perlu menggunakan API Field. Ini melibatkan menentukan bidang anda dalam kaedah definisi medan asas entiti. Anda juga boleh menggunakan modul UI Field untuk menambah medan ke entiti melalui antara muka Pengurusan Drupal.
Untuk memaparkan entiti tersuai di Drupal, anda perlu membuat pembina paparan untuk entiti anda. Ini melibatkan menentukan kelas yang memanjangkan kelas EntityViewBuilder dan melaksanakan kaedah paparan. Anda juga boleh menggunakan modul pandangan untuk membuat pandangan tersuai entiti.
Untuk membuat borang di Drupal untuk menambah dan mengedit entiti tersuai, anda perlu menentukan kelas bentuk untuk entiti anda. Ini melibatkan memperluaskan kelas EntityForm dan melaksanakan, mengesahkan, dan menyerahkan kaedah.
Untuk memadam entiti tersuai di Drupal, anda perlu menggunakan kaedah memadam API Entiti. Ini melibatkan memuatkan entiti anda, memanggil kaedah padam, dan kemudian menyimpan entiti anda. Anda juga boleh menggunakan kaedah penghapusan API Entiti untuk memadam pelbagai entiti sekaligus.
Atas ialah kandungan terperinci Bina entiti tersuai anda sendiri di Drupal - Persediaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!