Làm thế nào để bạn đổi tên nút bình luận của Save save?


8

Có ai biết cách đổi tên nút bình luận "lưu" không? Tôi đang cố gắng thay đổi nó thành "Đăng". Tôi đang sử dụng Drupal 7 và chủ đề phụ Zen.


Bạn đã thử mô-đun String Overrides chưa?
geekgirlweb

không tôi không có. Tôi sẽ thử sử dụng mô-đun. cảm ơn :)
Jasmine Ahmed

1
Mô-đun này sẽ thay đổi "Lưu" ở tất cả các vị trí được sử dụng, không chỉ trong các nhận xét.
kiamlaluno

Câu trả lời:


19

Đối với Drupal 7, bạn cần tạo một mô-đun tùy chỉnh thực hiện hook_form_FORM_ID_alter()bằng cách sử dụng mã tương tự như sau (thay thế "mymodule" bằng tên viết tắt của mô-đun bạn đang viết):

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

comment_form () sử dụng mã sau đây, để xác định các nút biểu mẫu:

  // 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'),

Đối với Drupal 6, mã phải là mã sau:

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

Tôi đã thêm if (isset($form['submit'])) {}phần này vì trong Drupal 6, comment_form()xác định các nút biểu mẫu bằng mã sau đây và nút bạn đang cố gắng thay đổi không thể có trong biểu mẫu.

  // 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,
  );

1
Chỉ cần chắc chắn câu trả lời của tôi là rõ ràng: Bạn không phải chỉnh sửa mã được sử dụng bởi Drupal; bạn cần tạo một mô-đun tùy chỉnh thực hiện hook_form_FORM_ID_alter().
kiamlaluno

Tôi cũng đã sửa mã để hoạt động khi trang web Drupal 6 buộc phải xem trước các nhận xét đã gửi và biểu mẫu không ở chế độ xem trước.
kiamlaluno

2

Đối với Drupal 6, các câu trả lời ở trên gợi ý sử dụng hook_form_altersẽ không hiệu quả, mặc dù bạn nghĩ nó sẽ như vậy. Thông thường, bạn sẽ làm như thế này:

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

Mặc dù điều này có vẻ hoạt động và bạn sẽ thấy một nút có chữ 'Đăng', thực tế bạn sẽ tìm thấy hai vấn đề:

  1. Nếu trang web của bạn được thiết lập để buộc xem trước các bình luận trước khi lưu, bạn sẽ thấy nút 'Đăng' được thêm vào biểu mẫu nhận xét ban đầu, trong đó chỉ nên có nút 'Xem trước'. Điều này dễ dàng được sửa chữa, mặc dù.
  2. Nút 'Bài đăng mới của bạn sẽ không thực sự gửi biểu mẫu - D6 comment.module tìm giá trị nút để thực hiện logic của nó và nếu bạn thay đổi nó thành một thứ khác ngoài' Lưu 'thì điều này sẽ phá vỡ logic gửi.

Để thực sự làm việc này, bạn cần ẩn nút và sử dụng trình xử lý biểu mẫu tùy chỉnh. Nếu tôi làm điều đó tôi sẽ trở lại đây và đăng mã làm việc.


2

Tôi thích sử dụng 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.
};

1

Không cần mô-đun tùy chỉnh hoặc sử dụng mô-đun ghi đè chuỗi. Trong cài đặt.php của bạn, xung quanh dòng 416, bỏ ghi chú và sửa đổi các mục sau bằng cách ghi đè của bạn:

/**
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',
# );

3
Vấn đề tương tự như với mô-đun Ghi đè Chuỗi. Mỗi khi một mô-đun gọi t ("Lưu"), ghi đè sẽ được sử dụng, chẳng hạn như biểu mẫu chỉnh sửa nút và một loạt các vị trí khác trong quản trị viên.
mpdon Arena

1

Như Andy Laken đã đề cập ở trên

... nút 'Đăng' mới sẽ không thực sự gửi biểu mẫu ...

Cách khắc phục điều này:

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');
  }
}

Đó là nó! Hàm xác thực của bạn đi trước và mô-đun nhận xét sẽ xử lý biểu mẫu với giá trị gửi gốc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.