Como você renomeia o botão de comentário "salvar"?


8

Alguém sabe como renomear o botão de comentário "salvar"? Estou tentando alterá-lo para "Postar". Estou usando o Drupal 7 e o subtema Zen.


Você já experimentou o módulo Substituições de String ?
precisa

não, eu não tenho. Vou tentar usar o módulo. Obrigado :)
Jasmine Ahmed

11
Este módulo mudará "Salvar" em todos os locais em que é usado, não apenas nos comentários.
kiamlaluno

Respostas:


19

Para o Drupal 7, você precisa criar um módulo personalizado que implementa hook_form_FORM_ID_alter()usando código semelhante ao seguinte (substitua "mymodule" pelo nome abreviado do módulo que você está escrevendo):

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

comment_form () usa o seguinte código para definir os botões do formulário:

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

Para o Drupal 6, o código deve ser o seguinte:

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

Eu adicionei a if (isset($form['submit'])) {}peça porque no Drupal 6, comment_form()define os botões do formulário usando o código a seguir, e o botão que você está tentando alterar não pode estar presente no formulário.

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

11
Só para ter certeza de que minha resposta é clara: você não precisa editar o código usado pelo Drupal; você precisa criar um módulo personalizado que implemente hook_form_FORM_ID_alter().
kiamlaluno

Corrigi o código para funcionar também quando o site do Drupal 6 está forçando a visualização dos comentários enviados e o formulário não está no modo de visualização.
kiamlaluno

2

Para Drupal 6, as respostas acima sugerindo usando hook_form_alterirá não trabalho, embora você pensaria que seria. Normalmente, você faria o seguinte:

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

Enquanto isso parece funcionar, e você verá um botão com o texto 'Postar', na verdade, encontrará dois problemas:

  1. Se o seu site estiver configurado para forçar a visualização dos comentários antes de salvar, você verá que o botão 'Postar' é adicionado ao formulário de comentários inicial, onde deve haver apenas o botão 'Visualizar'. Isso é facilmente corrigido.
  2. Seu novo botão 'Postar' não enviará o formulário - o D6 comment.module procura o valor do botão para fazer sua lógica, e se você o alterar para algo diferente de 'Salvar', isso quebra a lógica de envio.

Para realmente fazer isso funcionar, você precisa ocultar o botão e usar um manipulador de envio de formulário personalizado. Se fizer isso, retornarei aqui e postarei o código de trabalho.


2

Eu prefiro usar hook_form_altervs substituições de string.

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

1

Não há necessidade de módulo personalizado ou o uso do módulo de substituições de string. Em seu settings.php, na linha 416, remova o comentário e modifique o seguinte usando suas substituições:

/**
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
O mesmo problema do módulo Substituição de String. Sempre que um módulo chama t ("Salvar"), a substituição é usada, como o formulário de edição do nó e vários outros locais no administrador.
mpdonadio

1

Como Andy Laken mencionou acima

... o novo botão 'Postar' não enviará o formulário ...

Como consertar isto:

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

É isso aí! Sua função de validação vai primeiro e o módulo de comentários processará o formulário com o valor de envio nativo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.