web-dev-qa-db-ja.com

コンテンツエンティティの日付セレクタフィールドを取得するにはどうすればよいですか?

Drupal 8にコンテンツエンティティがあり、datetimeのフォームを生成します。フォームに日付セレクターのみを表示したいのですが、日付と時刻のセレクターが表示されます。

     $fields['start_date'] = BaseFieldDefinition::create('datetime')
            ->setLabel(t('Start date'))
            ->setDescription(t('The date that the survey is started.'))
            ->setRequired(true)
            ->setDisplayOptions('view', array(
                'label' => 'above',
                'type' => 'string',
                'weight' => -4,
            ))
            ->setDisplayOptions('form', array(
                'type' => 'date',
                'weight' => -4,
            ))
            ->setDisplayConfigurable('form', TRUE)
            ->setDisplayConfigurable('view', TRUE);

screenshot

日付セレクターのみを表示するにはどうすればよいですか?

4
Nisam

あなたの問題は、フィールドではなくフォームでオプションを設定していることです。 datatimeフィールドには、オプションdatetime_typeこれは2つの文字列 'date'または 'datetime'(DateTimeItemを参照)にすることができ、デフォルトは 'datetime'です。

したがって、フィールドを作成するときは、この設定を更新する必要があります。以下はあなたのために働くはずです:

$fields['start_date'] = BaseFieldDefinition::create('datetime')
  ->setLabel(t('Start date'))
  ->setDescription(t('The date that the survey is started.'))
  ->setSetting('datetime_type', 'date')
  ->setRequired(true)
  ->setDisplayOptions('view', array(
    'label' => 'above',
    'type' => 'string',
    'weight' => -4,
  ))
  ->setDisplayConfigurable('form', TRUE)
  ->setDisplayConfigurable('view', TRUE);

補足として、このような問題が発生した場合、最初に調べるのは、使用しているフィールドを実装しているクラスです。次に、そのフィールドをカバーするテストを調べます。多くの場合、必要なサンプルコードが見つかります。この場合、DateTimeFieldTestを見て、その統合テストが何を行っているかを確認します。

11
mpdonadio