Điểm:1

Không thể lưu giá trị của trường ngày giờ tùy chỉnh

lá cờ in

Tôi đang liên hệ vì tôi không thể tìm ra lý do tại sao trường ngày giờ tùy chỉnh của tôi không lưu giá trị của nó sau khi tôi gửi.

Bối cảnh:

Tôi đã tạo một trường chứa hai trường ngày giờ. Tôi sẽ sử dụng nó để thêm hoặc xóa các sự kiện khỏi danh sách sự kiện, tùy thuộc vào việc chúng có trôi qua hay không (ví dụ: nếu một lễ hội được lên lịch từ ngày 12 đến ngày 14 tháng 12, thì sự kiện đó sẽ bị xóa sau ngày 14).

Các sự kiện trong trường hợp của tôi được tạo từ một thực thể tùy chỉnh, tôi có thể quản lý các trường của thực thể đó từ văn phòng hỗ trợ của mình. Mục tiêu của tôi là lấy ngày từ trường thời gian tùy chỉnh của tôi trên twig để lọc những sự kiện nào được hiển thị.

Tôi biết tôi chỉ có thể thêm hai trường Ngày nhưng tôi thấy nó thiếu sự sang trọng mà tôi tìm kiếm.

Mã của tôi:

Vì vậy, tôi đã tạo một trường tùy chỉnh chứa hai trường ngày giờ. Tôi đã làm theo nhiều hướng dẫn để tìm phiên bản phù hợp với mình và đây là mã cho Loại trường, Tiện ích con và Trình định dạng của tôi

  • Loại lĩnh vực: ScheduleItem.php
lớp ScheduleItem mở rộng FieldItemBase {

  /**
   * {@inheritdoc}
   */
  hàm công khai isEmpty() {
    $isEmpty =
      trống($this->get('start')->getValue()) &&
      trống($this->get('finish')->getValue());

    trả về $isEmpty;
  }

  /**
   * {@inheritdoc}
   */
  public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
    thuộc tính $ = [];
    $properties['start'] = DataDefinition::create('datetime_iso8601')
      ->setLabel(t('Ngày xuất bản'));
    $properties['finish'] = DataDefinition::create('datetime_iso8601')
      ->setLabel(t('Ngày hủy bỏ'));
    trả lại thuộc tính $;
  }

  /**
   * {@inheritdoc}
   */
  lược đồ hàm tĩnh công khai (FieldStorageDefinitionInterface $field_definition) {

    $cột = [
      'bắt đầu' => [
        'loại' => 'varchar',
        'mysql_type' => 'ngày giờ',
        'không rỗng' => SAI,
        'mặc định' => NULL,
      ],
      'kết thúc' => [
        'loại' => 'varchar',
        'mysql_type' => 'ngày giờ',
        'không rỗng' => SAI,
        'mặc định' => NULL,
        ],
    ];

    trở lại [
      'giá trị' => $cột,
      // @DCG Thêm chỉ mục vào đây nếu cần.
    ];

  }

Không có nhiều để nói ở đây. Tôi không biết nếu có một cuộc xung đột trong các loại mà tôi sử dụng, như mysql_type, loạiĐịnh nghĩa dữ liệu :: tạo có giá trị khác nhau...

  • Tiện ích trường: Lịch trìnhWidget
lớp ScheduleWidget kéo dài DateTimeWidgetBase {

  /**
   * {@inheritdoc}
   */
  hàm công khai formElement(
    FieldItemListInterface $items,
                           $đồng bằng,
    Mảng $ phần tử,
    Mảng &$dạng,
    FormStateInterface $formState
  ) {

    phần tử $ + = mảng (
      '#delta' => $delta,
    );

    $element['bắt đầu'] = [
      '#type' => 'ngày giờ',
      '#title' => $this->t('Ngày xuất bản'),

      // Đặt ở đây giá trị hiện tại cho trường này hoặc giá trị mặc định (hoặc
      // null) nếu không có giá trị
      '#default_value' => isset($items[$delta]->start) ?
        $items[$delta]->start : null,
      '#empty_value' => '',
    ];

    $element['finish'] = [
      '#type' => 'ngày giờ',
      '#title' => $this->t('Ngày loại bỏ'),
      '#default_value' => isset($items[$delta]->finish) ?
        $items[$delta]->finish : null,
      '#empty_value' => '',
    ];

    trả lại phần tử $;
  }

}

Trái ngược với hầu hết các tiện ích trường tùy chỉnh mà tôi mở rộng DateTimeWidgetBase và không Tiện ích cơ sở, vấn đề ở đây là sử dụng cái được tạo sẵn mát xaHình thứcGiá trị chức năng từ lớp. Nó được cho là chuyển đổi các giá trị của tôi sang định dạng sẵn sàng cho cơ sở dữ liệu nếu tôi hiểu chính xác, nhưng cho đến nay nó vẫn chưa giúp được gì cho tôi.

  • Trình định dạng trường: ScheduleDefaultFormatter.php
lớp ScheduleDefaultFormatter mở rộng FormatterBase {

  /**
   * {@inheritdoc}
   */
  chức năng công cộng viewElements(FieldItemListInterface $items, $langcode)
  {

    phần tử $ = [];
    foreach ($items as $delta => $item) {
      $elements[$delta] = [
        '#start' => $item->start,
        '#finish' => $item->finish
      ];
    }

    trả lại các phần tử $;
  }

}

Đó là khá nhiều cho mã của tôi, tôi nghĩ nó tốt, đối với tôi nó trông như vậy nhưng ...

VẤN ĐỀ

Khi tôi thêm trường tùy chỉnh mới vào thực thể sự kiện của mình trong phần "Quản lý trường", tạo sự kiện mới và thêm ngày vào đó, tôi nhận được...

Giá trị này phải thuộc loại nguyên thủy chính xác.

Những gì tôi đã cố gắng

tôi đổ giá trị $ ngay trước khi mát xaHình thứcGiá trị trả lại nó và đây là những gì nó trông giống như:

kết xuất giá trị trường tùy chỉnh của tôi

Câu hỏi của tôi dành cho bạn, tại sao nó không hoạt động?

Tôi đã cố gắng trình bày rõ ràng nhất có thể, tuy nhiên kinh nghiệm của tôi về Drupal vẫn còn hạn chế, đừng ngần ngại nếu bạn cần thêm thông tin về mã của tôi, miễn là nó giúp giải quyết vấn đề!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.