Weiß jemand, wie man den Kommentar-Button "Speichern" umbenennt? Ich versuche es in "Post" zu ändern. Ich benutze Drupal 7 und das Zen-Unterthema.
Weiß jemand, wie man den Kommentar-Button "Speichern" umbenennt? Ich versuche es in "Post" zu ändern. Ich benutze Drupal 7 und das Zen-Unterthema.
Antworten:
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,
);
hook_form_FORM_ID_alter()
.
Für Drupal 6, über die Antworten darauf hindeutet Verwendung hook_form_alter
wird 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:
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.
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',
# );
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.