web-dev-qa-db-ja.com

ノードの最終保存日を表示する方法は?

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

最後に保存した日付を表示するにはどうすればよいですか?

6
paulcap1

これはあなたが必要とするコードです:

    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() メソッドを確認します。

4

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'、デフォルト値、または別の値を使用できます。

5
kiamlaluno