web-dev-qa-db-fra.com

Comment renommer le bouton de commentaire "enregistrer"?

Est-ce que quelqu'un sait comment renommer le bouton de commentaire "enregistrer"? J'essaye de le changer en "Post". J'utilise Drupal 7 et le sous-thème Zen.

8
Jasmine Ahmed

Pour Drupal 7, vous devez créer un module personnalisé qui implémente hook_form_FORM_ID_alter() en utilisant un code similaire au suivant (remplacez "mymodule" par le nom court du module que vous êtes). l'écriture):

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

comment_form () utilise le code suivant pour définir les boutons du formulaire:

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

Pour Drupal 6, le code doit être le suivant:

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

J'ai ajouté la partie if (isset($form['submit'])) {} car dans Drupal 6, comment_form() définit les boutons de formulaire en utilisant le code suivant, et le Le bouton que vous essayez de modifier ne peut pas être présent dans le formulaire.

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

Pour Drupal 6, les réponses ci-dessus suggèrent d'utiliser hook_form_alter va pas fonctionner, bien que vous le pensiez. En général, vous feriez cela comme:

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

Bien que cela semble fonctionner, et vous verrez un bouton avec le texte "Post", en fait, vous trouverez deux problèmes:

  1. Si votre site est configuré pour forcer l'aperçu des commentaires avant l'enregistrement, vous constaterez que le bouton "Publier" est ajouté au formulaire de commentaire initial, où il ne devrait y avoir que le bouton "Aperçu". Cependant, cela est facilement corrigé.
  2. Votre nouveau bouton 'Publier' ne soumettra pas réellement le formulaire - D6 comment.module recherche la valeur du bouton pour faire sa logique, et si vous le changez pour autre chose que 'Enregistrer' cela brise la logique de soumission.

Pour que cela fonctionne, vous devez masquer le bouton et utiliser un gestionnaire d'envoi de formulaire personnalisé. Si je le fais, je reviendrai ici et publierai le code de travail.

2
Andy Laken

Je préfère utiliser hook_form_alter contre les remplacements de chaîne.

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

Pas besoin de module personnalisé ou d'utiliser le module de remplacement de chaîne. Dans votre settings.php, autour de la ligne 416, décommentez et modifiez les éléments suivants à l'aide de vos remplacements:

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

Comme Andy Laken mentionné ci-dessus

... le nouveau bouton "Publier" ne soumettra pas réellement le formulaire ...

Comment régler ceci:

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

C'est ça! Votre fonction de validation passe en premier et le module de commentaires traite le formulaire avec une valeur de soumission native.

1
Jekis