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.
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.
Câu trả lời:
Đố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,
);
hook_form_FORM_ID_alter()
.
Đối với Drupal 6, các câu trả lời ở trên gợi ý sử dụng hook_form_alter
sẽ 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 đề:
Để 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.
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',
# );
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.