Comment renommer le bouton de commentaire «enregistrer»?

8

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.

Jasmine Ahmed
la source
Avez-vous essayé le module String Overrides ?
geekgirlweb
non je n'ai pas. Je vais essayer d'utiliser le module. merci :)
Jasmine Ahmed
1
Ce module va changer "Enregistrer" dans tous les endroits où il est utilisé, pas seulement dans les commentaires.
kiamlaluno

Réponses:

19

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

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 if (isset($form['submit'])) {}partie car dans Drupal 6, comment_form()définit les boutons du formulaire à l'aide du code suivant, et le bouton que vous essayez de modifier ne pouvait 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,
  );
kiamlaluno
la source
1
Juste pour être sûr que ma réponse est claire: vous n'avez pas à modifier le code utilisé par Drupal; vous devez créer un module personnalisé qui implémente hook_form_FORM_ID_alter().
kiamlaluno
J'ai corrigé le code pour qu'il fonctionne également lorsque le site Drupal 6 force l'aperçu des commentaires soumis et que le formulaire n'est pas en mode aperçu.
kiamlaluno
2

Pour Drupal 6, les réponses ci - dessus suggère l' utilisation hook_form_alterva pas travailler, même si on pourrait penser qu'il le ferait. 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 que vous verrez un bouton avec le texte «Publier», vous trouverez en fait 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.

Andy Laken
la source
2

Je préfère utiliser hook_form_altervs String Overrides.

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

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',
# );

la source
3
Même problème qu'avec le module String Override. Chaque fois qu'un module appelle t ("Save"), le remplacement serait utilisé, comme le formulaire de modification de nœud et un tas d'autres endroits dans l'administrateur.
mpdonadio
1

Comme Andy Laken l'a 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.

Jekis
la source