Score:0

How to use datelist in a custom field widget?

ธง um

Since an administrator of the website I am building is visually impaired, I need to create a custom date field widget rather than use the one provided by Drupal.

I am trying to implement a datelist element.

<?php

namespace Drupal\my_module\Plugin\Field\FieldWidget;

use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\WidgetBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * Accessible date field widget.
 *
 * @FieldWidget(
 *   id = "accessible_date",
 *   label = @Translation("Accessible date widget"),
 *   field_types = {
 *     "datetime"
 *   }
 * )
 */
class AccessibleDate extends WidgetBase {

  /**
   * {@inheritdoc}
   */
  public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
    $max_year = date('Y') + 1;
    $default_date = new DrupalDateTime();
    if (isset($items[$delta]->value)) {
      $default_date = new DrupalDateTime($items[$delta]->value);
    }

    $element += [
      '#type' => 'datelist',
      '#default_value' => $default_date,
      '#date_part_order' => [
        'day',
        'month',
        'year',
        'hour',
        'minute',
      ],
      '#date_year_range' => '2000:' . $max_year,
    ];

    return ['value' => $element];
  }

}

The widget is displayed correctly but when I submit the form to add or edit a node, I have the following error on each of the datelist fields: "The datetime value must be a string."

enter image description here

Do you know how to fix this?

Score:0
ธง um

ตกลง ฉันเข้าใจแล้ว รูปแบบวันที่และเวลาต้องมี Y-m-dTH:i:s รูปแบบ. ฉันเพิ่มการเรียกกลับที่ตรวจสอบความถูกต้องให้กับองค์ประกอบของฉันเพื่อแก้ไขข้อมูล

  /**
   * {@inheritdoc}
   */
  ฟังก์ชันสาธารณะ formElement (FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
    $max_year = วันที่('Y') + 1;
    dpm($items[$delta]->value);
    $default_date = ใหม่ DrupalDateTime();
    ถ้า (isset($items[$delta]->value)) {
      $default_date = new DrupalDateTime($items[$delta]->value);
    }

    $องค์ประกอบ += [
      '#type' => 'รายการวันที่',
      '#default_value' => $default_date,
      '#date_part_order' => [
        'วัน',
        'เดือน',
        'ปี',
        'ชั่วโมง',
        'นาที',
      ]
      '#date_year_range' => '2000:' $max_year,
      '#element_validate' => [
        [คงที่::คลาส, 'ตรวจสอบ'],
      ]
    ];

    ส่งคืน ['ค่า' => $องค์ประกอบ];
  }

  /**
   * เตรียมค่า datelist
   */
  ตรวจสอบฟังก์ชันสแตติกสาธารณะ ($ element, FormStateInterface $form_state) {
    $value = $องค์ประกอบ['#value'];
    $วันที่ = $value['ปี'] '-' . $value['เดือน'] . '-' . $value['วัน'] . 'ท' . $value['ชั่วโมง'] . ':' . $value['นาที'] . ':00';
    $form_state->setValueForElement($องค์ประกอบ, $วันที่);
  }

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา