Tôi có một biểu mẫu tạo nút tùy chỉnh mà tôi đang hiển thị trong móc tiền xử lý chế độ xem. Ở dạng đó, tôi có hai trường tham chiếu thực thể. Tôi đang đặt [#value] và [#default_value] của các trường tham chiếu đó theo chương trình.
Trên biểu mẫu, gửi các giá trị tôi đã đặt được tạo, nhưng chỉ khi người dùng "có thể chỉnh sửa" các trường. Tôi muốn làm cho các trường "bị vô hiệu hóa" và/hoặc "ẩn" khỏi người dùng. Không chỉ bị ẩn bằng CSS mà toàn bộ tiện ích tự động hoàn thành không thể truy cập được. Trường cần được nhập "ẩn".
Làm cách nào tôi có thể tắt tham chiếu thực thể tự động hoàn thành và/hoặc không thể truy cập được đối với người dùng tạo nội dung?
Hay nói cách khác, làm cách nào tôi có thể thêm các giá trị tham chiếu thực thể theo chương trình khi gửi biểu mẫu mà người dùng không thể tương tác với các trường?
Dưới đây là một số điều tôi đã thử nhưng không hoạt động:
- $form['field_entity_reference']['#access'] = false; // Đặt #access thành false có vẻ như nó sẽ hoạt động vì các trường biểu mẫu vẫn tồn tại khi gỡ lỗi biểu mẫu $, nhưng nó không hoạt động vì nó ngăn giá trị được gửi.
- Thêm ['#attributes']['readonly'], thay đổi ['#type'] thành ẩn hoặc loại tiện ích con khác, thêm ['#attributed']['disabled']. Không có công việc
- Thực thể chuẩn bị trước - Điều này không hoạt động trong trường hợp cụ thể này vì một số giá trị không thể được cung cấp bởi mã thông báo
Mã để tham khảo
function <theme>_pre process_views_view_field(&$variables) {
$view = $variables['view'];
if ($view->id() == '<view>') {
$field = $variables['field'];
switch($field->options['id']) {
trường hợp '<view_field>':
$node = \Drupal::entityTypeManager()
->getStorage('nút')
->tạo(['loại' => '<loại_nút>']);
$form = \Drupal::service('entity.form_builder')->getForm($node, 'secondary');
// Đặt default_value và giá trị
$form['field_entity_reference']['widget']['#default_value'] = (int)$cid; // Lưu ý rằng điều này đang sử dụng tiện ích "danh sách chọn" cho trường tham chiếu thực thể
$form['field_entity_reference']['widget']['#value'] = (int)$cid; // Giống như trên
// Những thứ không hoạt động. Các giá trị không được gửi trừ khi người dùng có thể chỉnh sửa trường hoặc trường không bị ẩn/tắt
$form['field_entity_reference']['#access'] = false; // Giá trị không gửi
$form['field_entity_reference']['widget'][0]['#attributes']['readonly'] = 'chỉ đọc'; // Không làm cho trường chỉ đọc
$form['field_entity_reference']['widget'][0]['value']['#type'] = 'hidden'; // Có vẻ như tiện ích tự động hoàn thành và tiện ích được chọn không có loại "ẩn"
$form['field_entity_reference']['widget'][0]['target_id']['#type'] = 'trường văn bản'; // Có vẻ như người ta không thể thay đổi loại thành trường văn bản
// Thay đổi đầu ra của trường xem thành biểu mẫu
$variables['output'] = $form;
nghỉ;
}
}
}