Кто-нибудь знает, как переименовать кнопку "Сохранить" в комментариях? Я пытаюсь изменить его на «Пост». Я использую Drupal 7 и суб-тему Zen.
Кто-нибудь знает, как переименовать кнопку "Сохранить" в комментариях? Я пытаюсь изменить его на «Пост». Я использую Drupal 7 и суб-тему Zen.
Ответы:
Для Drupal 7 вам нужно создать пользовательский модуль, который реализует hook_form_FORM_ID_alter()
с использованием кода, подобного следующему (замените «mymodule» на короткое имя написанного вами модуля):
function mymodule_form_comment_form_alter(&$form, &$form_state) {
if (isset($form['actions']['submit'])) {
$form['actions']['submit']['#value'] = t('Post');
}
}
comment_form () использует следующий код, чтобы определить кнопки формы:
// 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'),
Для Drupal 6 код должен быть следующим:
function mymodule_form_comment_form_alter(&$form, &$form_state) {
if (isset($form['submit'])) {
$form['submit']['#value'] = t('Post');
}
}
Я добавил эту if (isset($form['submit'])) {}
часть, потому что в Drupal 6 comment_form()
определяются кнопки формы с помощью следующего кода, и кнопка, которую вы пытаетесь изменить, не может присутствовать в форме.
// 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()
.
Для Drupal 6 приведенные выше ответы с предложением использовать неhook_form_alter
будут работать, хотя вы думаете, что так и будет. Обычно вы делаете это так:
function mymodule_form_alter(&$form, &$form_state, $form_id) {
if ('comment_form' == $form_id) {
$form['submit']['#value'] = t('Post');
}
}
Пока это работает, и вы увидите кнопку с текстом «Post», на самом деле вы обнаружите две проблемы:
Чтобы на самом деле это сделать, вам нужно спрятать кнопку и использовать собственный обработчик отправки формы. Если я сделаю это, я вернусь сюда и выложу рабочий код.
Нет необходимости в пользовательском модуле или использовании модуля переопределения строк. В файле settings.php, в строке 416, раскомментируйте и измените следующее с помощью переопределений:
/**
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',
# );
Как упоминал Энди Лэйкен выше
... новая кнопка "Отправить" фактически не отправит форму ...
Как это исправить:
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');
}
}
Это оно! Ваша функция validate идет первой, а модуль комментариев обработает форму с собственным значением submit.