Bagaimana Anda mengganti nama tombol komentar "simpan"?

8

Adakah yang tahu cara mengganti nama tombol komentar "simpan"? Saya mencoba mengubahnya menjadi "Posting". Saya menggunakan Drupal 7 dan sub tema Zen.

Jasmine Ahmed
sumber
Sudahkah Anda mencoba modul String Overrides ?
geekgirlweb
tidak saya belum. Saya akan mencoba menggunakan modul. terima kasih :)
Jasmine Ahmed
1
Modul ini akan mengubah "Simpan" di semua tempat yang digunakan, tidak hanya dalam komentar.
kiamlaluno

Jawaban:

19

Untuk Drupal 7, Anda perlu membuat modul khusus yang mengimplementasikan hook_form_FORM_ID_alter()menggunakan kode yang mirip dengan yang berikut (ganti "mymodule" dengan nama pendek dari modul yang Anda tulis):

function mymodule_form_comment_form_alter(&$form, &$form_state) {
  if (isset($form['actions']['submit'])) {
    $form['actions']['submit']['#value'] = t('Post');
  }
}

comment_form () menggunakan kode berikut, untuk menentukan tombol formulir:

  // Only show the save button if comment previews are optional or if we are
  // already previewing the submission.
  $form['actions'] = array('#type' => 'actions');
  $form['actions']['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Save'), 
    '#access' => ($comment->cid && user_access('administer comments')) || variable_get('comment_preview_' . $node->type, DRUPAL_OPTIONAL) != DRUPAL_REQUIRED || isset($form_state['comment_preview']), 
    '#weight' => 19,
  );
  $form['actions']['preview'] = array(
    '#type' => 'submit', 
    '#value' => t('Preview'), 
    '#access' => (variable_get('comment_preview_' . $node->type, DRUPAL_OPTIONAL) != DRUPAL_DISABLED), 
    '#weight' => 20, 
    '#submit' => array('comment_form_build_preview'),

Untuk Drupal 6, kode tersebut harus yang berikut:

function mymodule_form_comment_form_alter(&$form, &$form_state) {
  if (isset($form['submit'])) {
    $form['submit']['#value'] = t('Post');
  }
}

Saya menambahkan if (isset($form['submit'])) {}bagian karena dalam Drupal 6, comment_form()mendefinisikan tombol formulir menggunakan kode berikut, dan tombol yang Anda coba ubah tidak dapat hadir dalam formulir.

  // Only show save button if preview is optional or if we are in preview mode.
  // We show the save button in preview mode even if there are form errors so that
  // optional form elements (e.g., captcha) can be updated in preview mode.
  if (!form_get_errors() && ((variable_get('comment_preview_' . $node->type, COMMENT_PREVIEW_REQUIRED) == COMMENT_PREVIEW_OPTIONAL) || ($op == t('Preview')) || ($op == t('Save')))) {
    $form['submit'] = array(
      '#type' => 'submit',
      '#value' => t('Save'),
      '#weight' => 19,
    );
  }

  $form['preview'] = array(
    '#type' => 'button',
    '#value' => t('Preview'),
    '#weight' => 20,
  );
kiamlaluno
sumber
1
Hanya untuk memastikan jawaban saya jelas: Anda tidak perlu mengedit kode yang digunakan oleh Drupal; Anda perlu membuat modul khusus yang mengimplementasikan hook_form_FORM_ID_alter().
kiamlaluno
Saya memperbaiki kode untuk berfungsi juga ketika situs Drupal 6 memaksa pratinjau komentar yang dikirimkan, dan formulir tidak dalam mode pratinjau.
kiamlaluno
2

Untuk Drupal 6, jawaban di atas yang menyarankan menggunakan tidakhook_form_alter akan berfungsi, meskipun Anda akan berpikir itu akan berhasil. Biasanya Anda akan melakukan ini seperti:

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if ('comment_form' == $form_id) {
    $form['submit']['#value'] = t('Post');
  }
}

Meskipun ini tampaknya berfungsi, dan Anda akan melihat tombol dengan teks 'Posting', sebenarnya Anda akan menemukan dua masalah:

  1. Jika situs Anda diatur untuk memaksa pratinjau komentar sebelum disimpan, Anda akan menemukan bahwa tombol 'Posting' ditambahkan ke formulir komentar awal, di mana seharusnya hanya ada tombol 'Pratinjau'. Ini mudah diperbaiki, meskipun.
  2. Tombol 'Posting' baru Anda tidak akan benar-benar mengirimkan formulir - D6 comment.module mencari nilai tombol untuk melakukan logikanya, dan jika Anda mengubahnya ke sesuatu selain 'Simpan' ini merusak logika pengiriman.

Untuk benar-benar membuat pekerjaan ini Anda harus menyembunyikan tombol dan menggunakan handler ajukan formulir kustom Jika saya melakukannya saya akan kembali ke sini dan memposting kode kerja.

Andy Laken
sumber
2

Saya lebih suka menggunakan hook_form_altervs String Overrides.

function YOURMODULENAME_form_comment_form_alter(&$form, &$form_state) {
  $form['buttons']['submit']['#value'] = 'Submit Comment'; //Your text for the submit button goes here.
};
Kristin
sumber
1

Tidak perlu modul khusus atau menggunakan modul string override. Di settings.php Anda, di sekitar baris 416, batalkan komentar dan modifikasi yang berikut dengan menggunakan penggantian Anda:

/**
String overrides:

To override specific strings on your site with or without enabling locale
module, add an entry to this list. This functionality allows you to change
 * a small number of your site's default English language interface strings.
 *
 * Remove the leading hash signs to enable.
 */
# $conf['locale_custom_strings_en'][''] = array(
#   'forum'      => 'Discussion board',
#   '@count min' => '@count minutes',
# );

sumber
3
Masalah yang sama dengan modul String Override. Setiap kali modul memanggil t ("Simpan"), override akan digunakan, seperti formulir edit simpul dan banyak tempat lain di admin.
mpdonadio
1

Seperti Andy Laken disebutkan di atas

... tombol 'Posting' baru tidak akan benar-benar mengirimkan formulir ...

Bagaimana cara memperbaikinya:

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id === 'comment_form') {
    // Rename submit button.
    $form['submit']['#value'] = t('Post');
    // Add new form validator.
    array_unshift($form['#validate'], 'MYMODULE_comment_form_validate');
  }
}

function MYMODULE_comment_form_validate(&$form, &$form_state) {
  // Restore native value.
  if ($form_state['values']['op'] === t('Post')) {
    $form['submit']['#value'] = t('Save');
    $form_state['values']['op'] = t('Save');
  }
}

Itu dia! Fungsi validasi Anda berjalan terlebih dahulu dan modul komentar akan memproses formulir dengan nilai pengiriman asli.

Jekis
sumber