Как переименовать кнопку «Сохранить»?

8

Кто-нибудь знает, как переименовать кнопку "Сохранить" в комментариях? Я пытаюсь изменить его на «Пост». Я использую Drupal 7 и суб-тему Zen.

Жасмин ахмед
источник
Вы пробовали модуль переопределения строк ?
geekgirlweb
нет у меня нет Я постараюсь использовать модуль. спасибо :)
Жасмин Ахмед
1
Этот модуль будет менять «Сохранить» во всех местах, где он используется, а не только в комментариях.
kiamlaluno

Ответы:

19

Для 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,
  );
киамлалуно
источник
1
Просто чтобы убедиться, что мой ответ ясен: вам не нужно редактировать код, используемый Drupal; вам нужно создать собственный модуль, который реализует hook_form_FORM_ID_alter().
kiamlaluno
Я исправил код, чтобы он работал также, когда сайт Drupal 6 принудительно просматривает отправленные комментарии, а форма не находится в режиме предварительного просмотра.
kiamlaluno
2

Для 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», на самом деле вы обнаружите две проблемы:

  1. Если ваш сайт настроен на принудительный предварительный просмотр комментариев перед сохранением, вы обнаружите, что кнопка «Опубликовать» добавлена ​​в исходную форму комментария, где должна быть только кнопка «Предварительный просмотр». Это легко исправить, хотя.
  2. Ваша новая кнопка «Отправить» фактически не будет отправлять форму - D6 comment.module ищет значение кнопки, чтобы выполнить ее логику, и если вы измените ее на что-то отличное от «Сохранить», это нарушит логику отправки.

Чтобы на самом деле это сделать, вам нужно спрятать кнопку и использовать собственный обработчик отправки формы. Если я сделаю это, я вернусь сюда и выложу рабочий код.

Энди Лэйкен
источник
2

Я предпочитаю использовать hook_form_alterпереопределения строк.

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

Нет необходимости в пользовательском модуле или использовании модуля переопределения строк. В файле 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',
# );

источник
3
Та же проблема, что и с модулем переопределения строк. Каждый раз, когда модуль вызывает t («Сохранить»), используется переопределение, такое как форма редактирования узла и множество других мест в админке.
mpdonadio
1

Как упоминал Энди Лэйкен выше

... новая кнопка "Отправить" фактически не отправит форму ...

Как это исправить:

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.

Jekis
источник