Drupal 8は既に、ページ編集フォームに最後に保存された日付を表示しています。再度表示するノードにフィールドを追加したい。私はhook_form_alter()
を使用しており、モジュールでこれを行っていますが、現在の日付が表示されます。
if ($form_id == 'node_page_edit_form') {
$form['field_message2'] = array(
'#type' => 'item',
'#title' => t('Changed date'),
'#weight' => -1,
'#markup' => format_date(time(), $created),
);
}
最後に保存した日付を表示するにはどうすればよいですか?
これはあなたが必要とするコードです:
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),
);
}
FormStateInterface インターフェースをチェックして、メソッドで getFormObject() メソッドを確認します。
format_date()
を渡した引数が間違っています:2番目の引数は日付に使用される形式であり、別のタイムスタンプではありません。
次のようなコードを記述する必要があります。
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'),
);
}
さらに良いのは、日付のフォーマットにDrupalが提供するサービスを使用することです。
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'),
);
}
の代わりに 'medium'
、デフォルト値、または別の値を使用できます。