Wie benennt man die Schaltfläche "Speichern" um?

8

Weiß jemand, wie man den Kommentar-Button "Speichern" umbenennt? Ich versuche es in "Post" zu ändern. Ich benutze Drupal 7 und das Zen-Unterthema.

Jasmine Ahmed
quelle
Haben Sie das String Overrides- Modul ausprobiert ?
Geekgirlweb
Nein, habe ich nicht. Ich werde versuchen, das Modul zu verwenden. danke :)
Jasmine Ahmed
1
Dieses Modul ändert "Speichern" an allen Stellen, an denen es verwendet wird, nicht nur in Kommentaren.
Kiamlaluno

Antworten:

19

Für Drupal 7 müssen Sie ein benutzerdefiniertes Modul erstellen, das hook_form_FORM_ID_alter()Code ähnlich dem folgenden implementiert (ersetzen Sie "mymodule" durch den Kurznamen des Moduls, das Sie schreiben):

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

comment_form () verwendet den folgenden Code, um die Formularschaltflächen zu definieren:

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

Für Drupal 6 sollte der Code der folgende sein:

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

Ich habe den if (isset($form['submit'])) {}Teil hinzugefügt, weil in Drupal 6 comment_form()die Formularschaltflächen mit dem folgenden Code definiert werden und die Schaltfläche, die Sie ändern möchten, möglicherweise nicht im Formular vorhanden ist.

  // 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
quelle
1
Nur um sicherzugehen, dass meine Antwort klar ist: Sie müssen den von Drupal verwendeten Code nicht bearbeiten. Sie müssen ein benutzerdefiniertes Modul erstellen, das implementiert wird hook_form_FORM_ID_alter().
Kiamlaluno
Ich habe den Code so korrigiert, dass er auch funktioniert, wenn die Drupal 6-Site die Vorschau der übermittelten Kommentare erzwingt und sich das Formular nicht im Vorschaumodus befindet.
Kiamlaluno
2

Für Drupal 6, über die Antworten darauf hindeutet Verwendung hook_form_alterwird nicht funktionieren, obwohl Sie würden denken , es würde. Normalerweise tun Sie dies wie folgt:

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

Während dies zu funktionieren scheint und Sie eine Schaltfläche mit dem Text "Post" sehen, werden Sie tatsächlich zwei Probleme finden:

  1. Wenn Ihre Site so eingerichtet ist, dass die Vorschau von Kommentaren vor dem Speichern erzwungen wird, wird die Schaltfläche "Posten" zum ursprünglichen Kommentarformular hinzugefügt, in dem nur die Schaltfläche "Vorschau" vorhanden sein sollte. Dies lässt sich jedoch leicht beheben.
  2. Ihre neue Schaltfläche "Posten" sendet das Formular nicht tatsächlich - D6 comment.module sucht nach dem Schaltflächenwert, um seine Logik auszuführen. Wenn Sie ihn in einen anderen Wert als "Speichern" ändern, wird die Übermittlungslogik dadurch unterbrochen.

Damit dies tatsächlich funktioniert, müssen Sie die Schaltfläche ausblenden und einen benutzerdefinierten Formularübermittlungs-Handler verwenden. Wenn ich das mache, kehre ich hierher zurück und poste den Arbeitscode.

Andy Laken
quelle
2

Ich bevorzuge 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
quelle
1

Kein benutzerdefiniertes Modul erforderlich oder die Verwendung des Moduls zum Überschreiben von Zeichenfolgen. Kommentieren und ändern Sie in Ihrer settings.php in Zeile 416 Folgendes mithilfe Ihrer Überschreibungen:

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

quelle
3
Gleiches Problem wie beim String Override-Modul. Jedes Mal, wenn ein Modul t ("Speichern") aufruft, wird die Überschreibung verwendet, z. B. das Knotenbearbeitungsformular und eine Reihe anderer Stellen im Administrator.
mpdonadio
1

Wie Andy Laken oben erwähnt hat

... der neue "Post" -Button sendet das Formular nicht wirklich ...

So beheben Sie das Problem:

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

Das ist es! Ihre Validierungsfunktion wird zuerst ausgeführt und das Kommentarmodul verarbeitet das Formular mit dem nativen Übermittlungswert.

Jekis
quelle