Borang pendaftaran akaun pengguna Drupal didatangkan secara lalai dengan dua medan utama iaitu nama pengguna dan alamat emel. Bergantung kepada konfigurasi yang ditetapkan pada Administration Configuration People Account settings, Drupal akan memaparkan tambahan medan seperti kata laluan dan profil pengguna pada borang pendaftaran.

Walau bagaimanapun, tidak terdapat konfigurasi untuk mengaktifkan medan pengesahan bagi alamat emel. Medan pengesahan ini diperlukan agar alamat emel yang dimasukan oleh pengguna semasa proses pendaftaran disahkan betul. Terdapat kes dan situasi pengguna tersilap menulis alamat emel yang seterusnya pendaftaran akaun gagal disempurnakan.

Selain itu, kaedah ini menambah satu lapisan keselamatan untuk penghalang pendaftaran secara elektronik oleh sistem-sistem robot yang wujud di internet. Kebiasaanya sistem robot ini akan memasukkan hanya satu ruang emel bagi pendaftaran. Akibatnya pendaftaran akaun boleh dihalang sekiranya tiada pengesahan daripada medan kedua untuk alamat emel.

Tambahan medan ini boleh dicipta menerusi penggunaan modul yang akan kita bangunkan sendiri.

Pertama, cipta satu fail, kita namakan email_confirm.info. Fail ini bertujuan untuk memaklumkan mengenai tujuan, versi dan spesifikasi modul kepada sistem Drupal. Muatkan fail ini ke dalam satu folder email_confirm di direktori sites/all/modules.

Seterusnya tulis kod ini dalam fail tersebut:

name =  Second Email Confirmation
description = Medan tambahan untuk pengesahan alamat emel di borang pendaftaran akaun pengguna
package = Custom
core = 7.x
version = "7.x-1.0"​

Parameter yang ditunjukkan di atas boleh diubah mengikut kesesuaian anda. Simpan fail tersebut.

Seterusnya cipta satu fail yang baru dan namakan sebagai email_confirm.module. Fail ini mengandungi kod untuk mengubah suai (alteration) borang pendaftaran yang secara lalai dijana oleh sistem Drupal. Masukkan kod ini ke dalam fail tersebut:

/**
 * Implements hook_form_FORM_ID_alter().
 */
function email_confirm_form_user_register_form_alter(&$form, &$form_state, $form_id) {
  $form['account']['mail_confirm'] = array(
    '#type' => 'textfield',
    '#title' => 'Pengesahan alamat emel',
    '#maxlength' => EMAIL_MAX_LENGTH,
    '#description' => 'Sila masukkan alamat emel semula untuk pengesahan.',
    '#required' => TRUE,
  );
  $form['#validate'][] = 'email_confirm_user_register_form_validate';
}

Bahagian yang pertama adalah menggunakan API Drupal hook_form_FORM_ID_alter(). API ini bertanggungjawab untuk memanggil dan mengubah suai sebarang struktur data borang yang akan dijana oleh Drupal. Dengan menggantikan FORM_ID kepada user_register_form, Drupal secara automatik akan melaksanakan (sama ada insertion atau override) fungsi yang telah ditakrifkan secara lalai.

Dalam fungsi ini kita mencipta satu medan baru dengan menamakannya sebagai mail_confirm. Struktur binaan medan baru ini boleh dirujuk kepada dokumentasi Form API Reference.

Di akhir fungsi ini, kita takrifkan satu validation untuk medan ini menerusi fungsi baru iaitu email_confirm_user_register_form_validate.

/**
 * Implements validation callback.
 */
function email_confirm_user_register_form_validate(&$form, &$form_state) {
  if ($form_state['values']['mail'] != $form_state['values']['mail_confirm']) {
    form_set_error('mail_confirm', 'The email addresses must match.');
  }
}

Seterusnya dalam fail yang sama, kita cipta satu fungsi yang baru untuk melakukan kerja-kerja pengesahan. Di bahagian kod ini, proses pengesahan dilakukan dengan membandingkan input yang dimasukkan oleh pengguna pada medan emel lalai, iaitu $form_state['values']['mail'] dengan input medan baharu iaitu $form_state['values']['mail_confirm'].

Sekiranya nilai input adalah tidak sama, maka sistem perlu memaparkan ralat menerusi API Drupal form_set_error().

Simpan fail ini. Seterusnya aktifkan modul yang baru dicipta ini di bahagian Administration Modules. Lakukan uji lari dengan log keluar dan klik pada pautan untuk mendaftarkan akaun yang baru.

Penilaian: 
3
Average: 3 (1 vote)