Drupal 8 affiche déjà la dernière date enregistrée sous forme d'édition de page. Je veux ajouter un champ à un nœud qui l'affiche à nouveau. J'utilise hook_form_alter()
et je fais cela dans mon module, mais il affiche la date actuelle.
if ($form_id == 'node_page_edit_form') {
$form['field_message2'] = array(
'#type' => 'item',
'#title' => t('Changed date'),
'#weight' => -1,
'#markup' => format_date(time(), $created),
);
}
Comment afficher la dernière date enregistrée?
Voici le code dont vous avez besoin:
if ($form_id == 'node_page_edit_form') {
$form['field_message2'] = array(
'#type' => 'item',
'#title' => t('Changed date'),
'#weight' => -1,
'#markup' => format_date($form_state->getFormObject()->getEntity()->changed->value),
);
}
Vérifiez l'interface FormStateInterface pour voir dans les méthodes la méthode getFormObject () .
Les arguments que vous passez un format_date()
sont faux: le deuxième argument est le format utilisé pour la date, pas un autre horodatage.
Vous devez coder de manière similaire à la suivante.
if ($form_id == 'node_page_edit_form') {
$node = $form_state->getFormObject()->getEntity();
$form['field_message2'] = array(
'#type' => 'item',
'#title' => t('Changed date'),
'#weight' => -1,
'#markup' => format_date($node->getChangedTime(), 'medium'),
);
}
Encore mieux, vous devriez utiliser le service Drupal fournit des dates de formatage.
if ($form_id == 'node_page_edit_form') {
$node = $form_state->getFormObject()->getEntity();
$form['field_message2'] = array(
'#type' => 'item',
'#title' => new \Drupal\Core\StringTranslation\TranslatableMarkup('Changed date'),
'#weight' => -1,
'#markup' => \Drupal::service('date.formatter')->format($node->getChangedTime(), 'medium'),
);
}
Au lieu de 'medium'
, vous pouvez utiliser la valeur par défaut ou une autre que vous préférez.