¿Cómo se cambia el nombre del botón de comentario "guardar"?

8

¿Alguien sabe cómo cambiar el nombre del botón de comentario "guardar"? Estoy tratando de cambiarlo a "Publicar". Estoy usando Drupal 7 y el subtema Zen.

Jasmine Ahmed
fuente
¿Has probado el módulo String Overrides ?
geekgirlweb
No, no lo he hecho. Intentaré usar el módulo. gracias :)
Jasmine Ahmed
1
Este módulo cambiará "Guardar" en todos los lugares donde se usa, no solo en los comentarios.
kiamlaluno

Respuestas:

19

Para Drupal 7, debe crear un módulo personalizado que implemente hook_form_FORM_ID_alter()usando un código similar al siguiente (reemplace "mymodule" con el nombre corto del módulo que está escribiendo):

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

comment_form () usa el siguiente código para definir los botones del formulario:

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

Para Drupal 6, el código debe ser el siguiente:

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

Agregué la if (isset($form['submit'])) {}parte porque en Drupal 6, comment_form()define los botones del formulario con el siguiente código, y el botón que está intentando cambiar no puede estar presente en el formulario.

  // 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
fuente
1
Solo para asegurarme de que mi respuesta es clara: no tiene que editar el código utilizado por Drupal; necesita crear un módulo personalizado que implemente hook_form_FORM_ID_alter().
kiamlaluno
Corregí el código para que funcione también cuando el sitio de Drupal 6 está forzando la vista previa de los comentarios enviados, y el formulario no está en modo de vista previa.
kiamlaluno
2

Para Drupal 6, las respuestas anteriores sugiere el uso hook_form_alterserá no trabajar, aunque se podría pensar que lo haría. Por lo general, haría esto como:

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

Si bien esto parece funcionar, y verá un botón con el texto 'Publicar', de hecho encontrará dos problemas:

  1. Si su sitio está configurado para forzar la vista previa de los comentarios antes de guardar, encontrará que el botón 'Publicar' se agrega al formulario de comentarios inicial, donde solo debería haber el botón 'Vista previa'. Sin embargo, esto se soluciona fácilmente.
  2. Su nuevo botón 'Publicar' en realidad no enviará el formulario: D6 comment.module busca el valor del botón para hacer su lógica, y si lo cambia a algo diferente a 'Guardar', esto rompe la lógica de envío.

Para que esto funcione realmente, necesitará ocultar el botón y usar un controlador de envío de formulario personalizado. Si hago eso, volveré aquí y publicaré el código de trabajo.

Andy Laken
fuente
2

Prefiero usar 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
fuente
1

No es necesario un módulo personalizado o usar el módulo de anulación de cadena. En su settings.php, alrededor de la línea 416, descomente y modifique lo siguiente usando sus anulaciones:

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

fuente
3
Mismo problema que con el módulo de anulación de cadena. Cada vez que un módulo llama a t ("Guardar"), se usa la anulación, como el formulario de edición de nodo y un montón de otros lugares en el administrador.
mpdonadio
1

Como Andy Laken mencionó anteriormente

... el nuevo botón 'Publicar' no enviará el formulario ...

Cómo arreglar esto:

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

¡Eso es! Su función de validación va primero y el módulo de comentarios procesará el formulario con el valor de envío nativo.

Jekis
fuente