web-dev-qa-db-fra.com

Comment changer le texte du bouton d'envoi dans le formulaire de nœud?

J'essaie de modifier le texte du bouton de soumission "Enregistrer et continuer à publier", mais sans succès. J'utilise la norme hook_form_FORM_ID_alter().

function mymodule_form_node_news_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  // This is the problem, what should I put here
  $form['actions']['publish']['#value'] == '';
}

C'est ce que dpm() retourne.

'publish' => array(7)
  '#value' => object Drupal\Core\StringTranslation\TranslatableMarkup(5)
    protected string -> string(18) "Save and keep published"
    protected translatedMarkup -> NULL
    protected options -> array(0)
    protected stringTranslation -> NULL
    protected arguments -> array(0)

Comment changer le texte du bouton d'envoi dans le formulaire de nœud?

5
David

Dans #value est une chaîne traduisible. Vous pouvez le remplacer par une simple valeur de texte:

if ( isset($form['actions']['publish']) ) {
   $form['actions']['publish']['#value'] = 'New Text';
}

Ou vous pouvez y mettre une nouvelle chaîne traduisible avec la fonction t(), si vous souhaitez traduire la nouvelle chaîne dans différentes langues:

if ( isset($form['actions']['publish']) ) {
   $form['actions']['publish']['#value'] = t('New Text');
}

Edit: Répondez à la question dans les commentaires

Ce que vous voyez dans dpm () est le résultat de t (), qui est utilisé sous la forme originale dans NodeForm.php:

$element['publish']['#value'] = t('Save and publish');

En D8, il s'agit d'un objet, qui se traduira par le texte traduit lorsqu'il est utilisé dans un contexte de chaîne. Pour l'utilisateur final, vous l'utilisez simplement comme une valeur de chaîne, mais comme par magie, il sera toujours traduit. Vous n'avez pas besoin d'examiner cet objet pour trouver un moyen de le changer. Pour définir une nouvelle valeur, vous générez simplement un nouvel objet traduisible et le placez à la place de l'ancien.

11
4k4