您如何重命名“保存”评论按钮?


8

有谁知道如何重命名“保存”评论按钮?我正在尝试将其更改为“发布”。我正在使用Drupal 7和Zen子主题。


您是否尝试过String Overrides模块?
geekgirlweb 2011年

不,我没有。我将尝试使用该模块。谢谢:)
茉莉花艾哈迈德

1
该模块将在所有使用位置(不仅仅是在注释中)更改“保存”。
kiamlaluno

Answers:


19

对于Drupal 7,您需要创建一个自定义模块,该模块hook_form_FORM_ID_alter()使用类似于以下代码的代码来实现(将“ mymodule”替换为您正在编写的模块的简称):

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

comment_form()使用以下代码来定义表单按钮:

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

对于Drupal 6,代码应为以下代码:

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

if (isset($form['submit'])) {}之所以添加该部件,是因为在Drupal 6中,comment_form()使用以下代码定义了表单按钮,而您尝试更改的按钮无法显示在表单中。

  // 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
只是为了确保我的答案很明确:您不必编辑Drupal使用的代码;您需要创建一个实现的自定义模块hook_form_FORM_ID_alter()
kiamlaluno

当Drupal 6网站强制预览提交的评论并且表单不在预览模式时,我更正了代码,使其也可以工作。
kiamlaluno

2

为Drupal 6,上述问题的答案建议使用hook_form_alter无法正常工作,虽然你会觉得它会。通常,您会这样做:

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

尽管这似乎可行,但您会看到一个带有文本“ Post”的按钮,实际上,您会发现两个问题:

  1. 如果您的网站设置为在保存之前强制预览预览,则会发现“发布”按钮已添加到初始评论表单中,其中应该只有“预览”按钮。不过,这很容易解决。
  2. 新的“发布”按钮实际上不会提交表单-D6 comment.module查找按钮值以执行其逻辑,如果将其更改为“保存”以外的其他值,则会破坏提交逻辑。

要真正完成这项工作,您需要隐藏按钮并使用自定义表单提交处理程序。如果这样做,我将返回此处并发布工作代码。


2

我更喜欢使用hook_form_altervs字符串替代。

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

1

无需自定义模块或使用字符串替代模块。在您的settings.php中,围绕第416行,使用覆盖取消注释并修改以下内容:

/**
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
与“字符串覆盖”模块相同的问题。每当模块调用t(“ Save”)时,覆盖都会被使用,例如节点编辑表单和admin中的其他位置。
mpdonadio

1

正如安迪拉肯提到上述

...新的“发布”按钮实际上不会提交表格...

如何解决这个问题:

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

而已!您的validate函数首先执行,注释模块将处理具有本地提交值的表单。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.