


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.- Untuk membuat jenis entiti baru, definisi skema mesti diisytiharkan, yang akan menghasilkan jadual pangkalan data data entiti. Tutorial ini menyediakan contoh kod untuk membuat jadual "demo_projects" dengan empat lajur (ID, nama, keterangan, dan tarikh akhir).
- Modul API Entiti perlu diaktifkan di laman web anda dan ditetapkan sebagai kebergantungan untuk modul tersuai, yang menyediakan keupayaan pemprosesan entiti yang tidak mempunyai Drupal Core. Ini termasuk mewujudkan entiti baru, menyelamatkannya ke pangkalan data, dan memaparkannya.
- Tutorial ini juga menerangkan cara mengatasi kaedah BuildContent () kelas entitiPicontroller lalai untuk memaparkan entiti anda, dan bagaimana untuk membuat senarai entiti melalui fungsi penolong entity_view (). Bahagian kedua tutorial akan memperkenalkan membuat halaman untuk memaparkan entiti projek individu, menjadikannya medan melalui UI, dan mendedahkannya kepada pandangan untuk paparan pertanyaan dan senarai.
- Entiti Drupal adalah cara terbaik untuk menganjurkan data. Jika anda sudah biasa dengan nod, istilah klasifikasi, komen, atau pengguna, anda juga harus tahu bahawa ini telah menjadi entiti sejak Drupal 7. Satu lagi aspek penting tentang mereka ialah mereka boleh diletakkan melalui API Lapangan.
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.
kelas entiti dan pengawal
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.
tutup kelas entiti
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):
<pre class='brush:php;toolbar:false;'>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);</pre>
<p> 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. </p>
<p> anda boleh menyegarkan semula halaman dan anda harus melihat senarai semua entiti yang anda muat. Pastikan cache dibersihkan supaya perubahan dapat dilihat. </p>
<h2 id="Kesimpulan"> Kesimpulan </h2>
<p> 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. </p>
<p> 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! </p>
<h2 id="Soalan-Lazim-untuk-membina-entiti-tersuai-di-Drupal"> Soalan Lazim untuk membina entiti tersuai di Drupal </h2>
<h3 id="Apakah-prasyarat-untuk-mewujudkan-entiti-adat-Drupal"> Apakah prasyarat untuk mewujudkan entiti adat Drupal? </h3>
<p> 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. </p>
<h3 id="Bagaimana-untuk-membuat-entiti-kandungan-tersuai-dengan-bundle-di-Drupal"> Bagaimana untuk membuat entiti kandungan tersuai dengan bundle di Drupal? </h3>
<p> 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. </p>
<h3 id="Apakah-perbezaan-antara-entiti-kandungan-dan-entiti-konfigurasi-di-Drupal"> Apakah perbezaan antara entiti kandungan dan entiti konfigurasi di Drupal? </h3>
<p> 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. </p>
<h3 id="Bagaimana-untuk-membuat-jenis-entiti-kandungan-dalam-Drupal"> Bagaimana untuk membuat jenis entiti kandungan dalam Drupal 8? </h3>
<p> 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. </p>
<h3 id="Bolehkah-saya-membuat-entiti-tersuai-di-Drupal-menggunakan-modul-API-Entity"> Bolehkah saya membuat entiti tersuai di Drupal menggunakan modul API Entity? </h3>
<p> 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. </p>
<h3 id="Apakah-faedah-mewujudkan-entiti-adat-Drupal"> Apakah faedah mewujudkan entiti adat Drupal? </h3>
<p> 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. </p>
<h3 id="Bagaimana-untuk-menambah-medan-ke-entiti-tersuai-di-Drupal"> Bagaimana untuk menambah medan ke entiti tersuai di Drupal? </h3>
<p> 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. </p>
<h3 id="Bagaimana-untuk-memaparkan-entiti-tersuai-di-Drupal"> Bagaimana untuk memaparkan entiti tersuai di Drupal? </h3>
<p> 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. </p>
<h3 id="Bagaimana-untuk-membuat-borang-untuk-menambah-dan-mengedit-entiti-tersuai-di-Drupal"> Bagaimana untuk membuat borang untuk menambah dan mengedit entiti tersuai di Drupal? </h3>
<p> 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. </p>
<h3 id="Bagaimana-untuk-memadam-entiti-tersuai-di-Drupal"> Bagaimana untuk memadam entiti tersuai di Drupal? </h3>
<p> 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. </p>
</div>
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!

URL panjang, sering berantakan dengan kata kunci dan parameter penjejakan, boleh menghalang pelawat. Skrip pemendekan URL menawarkan penyelesaian, mewujudkan pautan ringkas yang sesuai untuk media sosial dan platform lain. Skrip ini sangat berharga untuk laman web individu a

Laravel memudahkan mengendalikan data sesi sementara menggunakan kaedah flash intuitifnya. Ini sesuai untuk memaparkan mesej ringkas, makluman, atau pemberitahuan dalam permohonan anda. Data hanya berterusan untuk permintaan seterusnya secara lalai: $ permintaan-

Ini adalah bahagian kedua dan terakhir siri untuk membina aplikasi React dengan back-end Laravel. Di bahagian pertama siri ini, kami mencipta API RESTful menggunakan Laravel untuk aplikasi penyenaraian produk asas. Dalam tutorial ini, kita akan menjadi dev

Laravel menyediakan sintaks simulasi respons HTTP ringkas, memudahkan ujian interaksi HTTP. Pendekatan ini dengan ketara mengurangkan redundansi kod semasa membuat simulasi ujian anda lebih intuitif. Pelaksanaan asas menyediakan pelbagai jenis pintasan jenis tindak balas: Gunakan Illuminate \ Support \ Facades \ http; Http :: palsu ([ 'Google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

Pelanjutan URL Pelanggan PHP (CURL) adalah alat yang berkuasa untuk pemaju, membolehkan interaksi lancar dengan pelayan jauh dan API rehat. Dengan memanfaatkan libcurl, perpustakaan pemindahan fail multi-protokol yang dihormati, php curl memudahkan execu yang cekap

Adakah anda ingin memberikan penyelesaian segera, segera kepada masalah yang paling mendesak pelanggan anda? Sembang langsung membolehkan anda mempunyai perbualan masa nyata dengan pelanggan dan menyelesaikan masalah mereka dengan serta-merta. Ia membolehkan anda memberikan perkhidmatan yang lebih pantas kepada adat anda

Tinjauan Landskap PHP 2025 menyiasat trend pembangunan PHP semasa. Ia meneroka penggunaan rangka kerja, kaedah penempatan, dan cabaran, yang bertujuan memberi gambaran kepada pemaju dan perniagaan. Tinjauan ini menjangkakan pertumbuhan dalam PHP Versio moden

Dalam artikel ini, kami akan meneroka sistem pemberitahuan dalam rangka kerja web Laravel. Sistem pemberitahuan di Laravel membolehkan anda menghantar pemberitahuan kepada pengguna melalui saluran yang berbeza. Hari ini, kami akan membincangkan bagaimana anda boleh menghantar pemberitahuan ov


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)
