Bagaimana Anda mengubah kesalahan formulir?

8

Bagaimana Anda mengubah atau menghapus kesalahan formulir yang dihasilkan oleh Drupal atau modul lain pada penyisipan / penyimpanan simpul, untuk jenis konten tertentu. Saya mencari metode yang dapat saya gunakan dalam sebuah modul.

Saya sudah mencoba hook_node_validate () , tetapi semua yang bisa saya lakukan adalah mendapatkan kesalahan dan mengatur kesalahan.

masukkan deskripsi gambar di sini

timofey.com
sumber

Jawaban:

13

Mengubah string

Untuk mengubah teks string tunggal, metode paling sederhana adalah dengan menggunakan modul String Overrides. Itu akan memungkinkan Anda untuk mengganti string:

"! Harus diisi bidang nama."

dengan (misalnya):

"Bidang '! Nama' wajib diisi."

Mengubah bidang formulir

Jika Anda ingin membuat bidang tidak diperlukan, gunakan implementasi hook_form_alter () yang normal:

/**
 * Implements hook_form_FORM_ID_alter().
 */
function mymodule_form_node_form_alter(&$form, &$form_state) {
  $node = $form['#node'];
  if ($node->type == 'my_custom_type') {
    $form['title']['#required'] = FALSE;
  }
}

Mengubah cara formulir divalidasi

Formulir memiliki fungsi validasi yang ditentukan dalam $form['#validate']larik. Dan elemen formulir memiliki fungsi yang ditentukan dalam $form['element_key']['#element_validate'].

Anda dapat menentukan sendiri seperti ini:

/**
 * Implements hook_form_FORM_ID_alter().
 */
function mymodule_form_node_form_alter(&$form, &$form_state) {
  $form['title']['#element_validate'][] = 'mymodule_validate_node_title';
}

/**
 * Validate the node title to prevent ALL CAPS.
 */
function mymodule_validate_node_title($element, &$form_state, $form) {
  if (preg_match('/^[A-Z]+$/', $element['#value'])) {
    form_error($element, t('You may not enter titles in ALL CAPS.'));
  }
}
pjcdawkins
sumber
Jawaban bagus! Bagaimana Anda akan mengubah teks kesalahan dari - "Kolom judul diperlukan." (seperti yang digambarkan dalam pertanyaan)? Itu tanpa menggunakan penggantian string.
timofey.com
Dengan kata lain, saya tidak ingin menambahkan validasi, saya hanya ingin mengubah pesan kesalahan validasi yang ada .... mungkin membatalkan set validasi yang ada dan menambahkan yang baru?
timofey.com
1
Validasi yang ada bukan fungsi panggilan balik validasi; hanya saja bidangnya "wajib". Kombinasi dua terakhir saya di atas akan menghapus pesan yang ada dan kemudian menambahkan jenis validasi lainnya.
pjcdawkins
Saya hanya perlu mengubah pesan validasi. Meskipun saya telah mengimplementasikan solusi di atas (oleh hook_form_alter). Saya mendapatkan dua pesan validasi. 1 satu default dan 2 yang saya tulis. Setiap saran @pjcdawkins
inovatif kundan
6

Karena string yang digunakan untuk pesan kesalahan itu adalah "! Bidang nama wajib diisi." menggunakan modul String Overrides atau mengubah string untuk digunakan dalam file settings.php akan memiliki efek untuk mengubah string yang digunakan untuk setiap bidang formulir yang diperlukan.

Jika Anda ingin mengubah string kesalahan yang ditampilkan untuk judul ketika judul belum dimasukkan, Anda dapat:

  • Tambahkan handler validasi formulir ke formulir edit simpul, menggunakan hook_form_alter()
  • Dalam form validantion handler:

    • Verifikasi konten $form['title'](di mana $formdiatur menggunakan $form = &drupal_static('form_set_error', array());, dan ubah ke string yang Anda inginkan saat itu'Title field is required.'
    • Verifikasi $_SESSION['messages']['error'](array) berisi string 'Title field is required.'dan ubah ke string yang ingin Anda tampilkan

Menghindari menampilkan kesalahan lebih mudah: Cukup atur #requiredproperti FALSE, dan Drupal tidak akan menampilkan pesan kesalahan itu.

kiamlaluno
sumber
4

Untuk drupal 7 Anda dapat mengunduh modul ini http://drupal.org/node/1209450 di zip, itu akan memberi Anda pengait ini.

message_alter(&$messages) {
}
Ali Nouman
sumber
Terima kasih. Mungkin bukan ide yang baik untuk menggunakan modul yang tidak didukung, tetapi dapat digunakan sebagai panduan!
timofey.com
1

Anda bisa menyesuaikan pesan kesalahan formulir dengan menggunakan validasi bidang per bidang entitas.

Untuk melakukan itu, edit pengaturan bidang, buka Validasi dan tambahkan aturan validasi baru ( Bidang wajib ). Di sana, Anda harus memiliki bidang teks untuk mengatur pesan kesalahan khusus untuk bidang itu.

kenorb
sumber
0

Untuk Drupal 8, saya dapat menambahkan fungsi validasi khusus yang benar-benar dapat memeriksa kesalahan yang ada, dan mengubah markup kesalahan pada basis per kasus. Dalam kasus saya, saya ingin mengubah pesan kesalahan dari bidang entitas_autocomplete yang mereferensikan pengguna. Jika pengguna yang tidak valid ditambahkan, kesalahan validasi berbunyi, "Tidak ada entitas yang cocok dengan% nama". Alih-alih kata "entitas", saya ingin mengatakan "pengguna", agar tidak terlalu menakutkan dan berpotensi membingungkan pengguna.

Pertama, saya menggunakan hook_form_alter () untuk menambahkan fungsi validasi saya:

/**
 * Implements hook_form_alter().
 */
function my_module_form_alter(&$form, FormStateInterface $form_state, $form_id) {

      if (in_array($form_id, ['whatever_form_id_you_need_to_alter'])) {
        // Add entity autocomplete custom form validation messages alter.
        array_unshift($form['#validate'], 'my_module_custom_user_validate');
      }

Kemudian, dalam fungsi 'my_module_custom_user_validate':

/**
 * Custom form validation handler that alters default validation.
 * @param $form
 * @param \Drupal\Core\Form\FormStateInterface $form_state
*/
function my_module_custom_user_validate(&$form, FormStateInterface $form_state) {
      // Check for any errors on the form_state
      $errors = $form_state->getErrors();
      if ($errors) {
        foreach ($errors as $error_key => $error_val) {
          // Check to see if the error is related to the desired field:
          if (strpos($error_key, 'the_entity_reference_field_machine_name') !== FALSE) {
            // Check for the word 'entities', which I want to replace
            if (strpos($error_val->getUntranslatedString(), 'entities') == TRUE) {
              // Get the original args to pass into the new message
              $original_args = $error_val->getArguments();
              // Re-construct the error
              $error_val->__construct("There are no users matching the name %value", $original_args);
            }
          }
        }
      }
    }

Semoga ini membantu!

Tyler Fahey
sumber