Điểm:1

Tắt các hàng nhất định của dạng xem Nguồn tham chiếu thực thể

lá cờ in

Tôi có một trường là tham chiếu thực thể trên một phần nội dung. Tôi đã tạo một chế độ xem là một Nguồn tham khảo thực thể và đặt loại tham chiếu trên trường thành chế độ xem đó. Khi chỉnh sửa nội dung, tôi thấy danh sách các hộp kiểm của mình bằng cách sử dụng đó Nguồn tham khảo thực thể lượt xem.

Dữ liệu trong danh sách là các giải đấu. Khi một giải đấu hoàn thành, tôi không muốn người dùng có thể bỏ chọn giải đấu đó khi chỉnh sửa nội dung. Họ chỉ có thể chuyển đổi các giải đấu "sắp tới".

Tôi đã thử thực hiện thay đổi biểu mẫu, nhưng mỗi Tùy chọn Trong $form['field_tournament']['widget']['#options'] dường như là một Drupal\Core\Field\FieldFilteredMarkup vì vậy tôi thực sự không thể vô hiệu hóa hàng vì nó chỉ là đánh dấu HTML chỉ bao gồm nhãn chứ không phải hộp kiểm.

function MYMODULE_form_group_league_edit_form_alter(&$form, FormStateInterface $form_state) {
  foreach ($form['field_tournaments']['widget']['#options'] as $key => $option) {
    // vô hiệu hóa ở đây nếu giải đấu được thiết lập để hoàn thành.
  }
}

Tôi hiểu trong chế độ xem, tôi có thể đặt để chỉ hiển thị các giải đấu "sắp diễn ra", nhưng tôi muốn họ có khả năng xem những giải đấu nào đã hoàn thành trong khi chỉnh sửa.

lá cờ in
Tôi càng nghiên cứu nhiều hơn, có vẻ như có thể một tiện ích trường tùy chỉnh sẽ là cách phù hợp.
Điểm:0
lá cờ in

Vì vậy, tôi đã tìm ra nó bằng cách sử dụng một tiện ích tùy chỉnh và Thuộc tính tùy chọn biểu mẫu mô-đun, mặc dù bây giờ khi tôi nghĩ về nó, tôi có thể đã đạt được điều tương tự trong biểu mẫu thay đổi vì tôi chỉ đang tải thuật ngữ thông qua khóa mà tôi đã truy cập trước đó. Dù sao, tôi đã tìm kiếm cơ sở mã về cách Hộp kiểm/đài widget đã được tạo và sao chép mã đó, đồng thời sửa đổi mã để thêm thuộc tính bị vô hiệu hóa vào tùy chọn.

<?php

không gian tên Drupal\pick_dynasty_golf\Plugin\Field\FieldWidget;

sử dụng Drupal\Core\Field\FieldItemListInterface;
sử dụng Drupal\Core\Field\Plugin\Field\FieldWidget\OptionsButtonsWidget;
sử dụng Drupal\Core\Form\FormStateInterface;

/**
 * Xác định tiện ích trường 'pick_dynasty_golf_tournament_selection'.
 *
 * @FieldWidget(
 * id = "pick_dynasty_golf_tournament_selection",
 * nhãn = @Translation("Lựa chọn giải đấu"),
 * field_types = {
 * "boolean",
 * "tham chiếu_thực thể",
 * "danh sách_số nguyên",
 * "list_float",
 * "danh_sách",
 * },
 * multiple_values ​​= TRUE
 * )
 */
class TournamentSelectionWidget extends OptionsButtonsWidget {

  /**
   * {@inheritdoc}
   */
  hàm công khai formElement(FieldItemListInterface $items, $delta, mảng $element, mảng &$form, FormStateInterface $form_state) {
    $element = parent::formElement($items, $delta, $element, $form, $form_state);
    // Nhận tất cả các tùy chọn.
    $options = $this->getOptions($items->getEntity());
    // Nhận các tùy chọn đã chọn.
    $selected = $this->getSelectedOptions($items);
    $tids = [];
    // Sử dụng khóa từ $options để lấy ID kỳ hạn (các giải đấu).
    foreach ($options as $tid => $option) {
      $tids[] = $tid;
    }
    // Tải tất cả các giải đấu.
    $term_storage = \Drupal::entityTypeManager()->getStorage('taxonomy_term');
    $terms = $term_storage->loadMultiple($tids);
    $ bị vô hiệu hóa = [];
    // Lặp lại chúng và vô hiệu hóa bất kỳ giải đấu nào có trạng thái 'đăng'
    foreach ($terms as $term) {
      $status = $term->get('field_tournament_status')->giá trị;
      if ($status == 'post') {
        $disabled[$term->id()] = [
          'bị vô hiệu hóa' => ĐÚNG,
        ];
      }
    }

    phần tử $ += [
      '#type' => 'hộp kiểm',
      '#default_value' => $đã chọn,
      '#options' => $options,
      '#options_attributes' => $disabled, // Đây là từ mô-đun Thuộc tính Tùy chọn Biểu mẫu.
    ];

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

}

Một TO LỚN vấn đề tôi không xem xét là nếu trường bị vô hiệu hóa (ngay cả khi đã chọn trước đó) thì nó không được gửi nên tôi mất giá trị. chỉ đọc trên hộp kiểm không phải là một tùy chọn. Về cơ bản, tôi phải vô hiệu hóa nó trong JS và viết một trình xác thực tùy chỉnh trên phần phụ trợ để kiểm tra xem không có mục bị vô hiệu hóa nào được thêm/xóa

Đă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.