Come si rinomina il pulsante di commento "salva"?


8

Qualcuno sa come rinominare il pulsante di commento "salva"? Sto cercando di cambiarlo in "Posta". Sto usando Drupal 7 e il tema secondario Zen.


Hai provato il modulo String Overrides ?
geekgirlweb,

no non l'ho fatto. Proverò ad usare il modulo. grazie :)
Jasmine Ahmed l'

1
Questo modulo cambierà "Salva" in tutti i luoghi in cui viene utilizzato, non solo nei commenti.
kiamlaluno

Risposte:


19

Per Drupal 7, devi creare un modulo personalizzato che implementa hook_form_FORM_ID_alter()usando un codice simile al seguente (sostituisci "mymodule" con il nome breve del modulo che stai scrivendo):

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

comment_form () utilizza il seguente codice, per definire i pulsanti del modulo:

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

Per Drupal 6, il codice dovrebbe essere il seguente:

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

Ho aggiunto la if (isset($form['submit'])) {}parte perché in Drupal 6, comment_form()definisce i pulsanti del modulo utilizzando il seguente codice e il pulsante che si sta tentando di modificare non può essere presente nel modulo.

  // 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
Solo per essere sicuro che la mia risposta sia chiara: non è necessario modificare il codice utilizzato da Drupal; è necessario creare un modulo personalizzato che implementa hook_form_FORM_ID_alter().
kiamlaluno

Ho corretto il codice affinché funzioni anche quando il sito Drupal 6 sta forzando l'anteprima dei commenti inviati e il modulo non è in modalità anteprima.
kiamlaluno

2

Per Drupal 6, le risposte di cui sopra suggerendo utilizzando hook_form_altersarà non funzionerà, anche se si potrebbe pensare che sarebbe stato. In genere lo faresti come:

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

Mentre questo sembra funzionare e vedrai un pulsante con il testo "Pubblica", in realtà troverai due problemi:

  1. Se il tuo sito è impostato per forzare l'anteprima dei commenti prima del salvataggio, scoprirai che il pulsante "Pubblica" viene aggiunto al modulo di commento iniziale, dove dovrebbe esserci solo il pulsante "Anteprima". Questo è facilmente risolvibile, però.
  2. Il tuo nuovo pulsante "Pubblica" in realtà non invierà il modulo - D6 comment.module cerca il valore del pulsante per fare la sua logica, e se lo cambi in qualcosa di diverso da "Salva" questo rompe la logica di invio.

Per far sì che funzioni davvero, dovrai nascondere il pulsante e utilizzare un gestore di invio modulo personalizzato. Se lo faccio, tornerò qui e pubblicherò il codice di lavoro.


2

Preferisco usare 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.
};

1

Non è necessario un modulo personalizzato o l'utilizzo del modulo di sostituzione della stringa. Nel tuo settings.php, intorno alla linea 416, decommenta e modifica quanto segue usando le tue sostituzioni:

/**
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
Stesso problema con il modulo String Override. Ogni volta che un modulo chiama t ("Salva"), la sostituzione viene utilizzata, come il modulo di modifica del nodo e un sacco di altre posizioni nell'amministratore.
mpdonadio

1

Come menzionato sopra Andy Laken

... il nuovo pulsante "Pubblica" non invia il modulo ...

Come risolvere questo problema:

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

Questo è tutto! La funzione di convalida inizia per prima e il modulo di commento elaborerà il modulo con un valore di invio nativo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.