Điểm:2

Why can't some fields be moved within details element?

lá cờ us

I am trying to move 2 form fields to the advanced sidebar: dismissible and status. Status was already part of the meta container and setting #group='meta' on dismissable also placed it there; but these weren't in the proper order. Nothing I do seems to have any impact on:

  • dismissible
  • standard meta fields: published, author, revision log
  • status

Both dismissible and status are fields added by the Sitewide Alert module which defines the entity which this is the edit form for.

I gave up trying to move my 2 fields (together) so I created my own details block as:

  $form['alert_settings'] = [
    '#type' => 'details',
    '#group' => 'advanced',
    '#weight' => -99,  
    '#title' => t('Alert settings'),
    '#tree' => TRUE,
    '#access' => TRUE,
    '#open' => TRUE,
  ];

and then assigned both fields #group='alert_settings'. This works fine as it creates a new details group which is placed at the top of the right sidebar. Perfect, except I want status to be the top item in this block, followed by dismissible.

No matter which of the status #weight options I set (or dismissable ones); I can't change the order of these.

I have tried:

  $form['status']['#weight'] = -99;
  $form['status']['widget']['#weight'] = -99;
  $form['status']['widget']['value']['#weight'] = -99;

What am I missing here?

Điểm:2
lá cờ cn

Có vẻ như cuối cùng là mã này trong EntityFormDisplay::processForm():

// Gán các trọng số được cấu hình trong màn hình biểu mẫu.
foreach ($this->getComponents() as $name => $options) {
  if (isset($element[$name])) {
    $element[$name]['#weight'] = $options['weight'];
  }
}

Phương pháp này là một #tiến trình gọi lại cho biểu mẫu chạy sau móc thay đổi biểu mẫu, vì vậy các thay đổi của bạn sẽ bị mất.

Bạn có thể thêm gọi lại quy trình của riêng mình và thay đổi trọng số ở đó, nhưng có thể thay đổi nó ở cấp thành phần với hook_entity_form_display_alter(), ví dụ.:

function MODULE_entity_form_display_alter(\Drupal\Core\Entity\Display\EntityFormDisplayInterface $form_display, array $context) {
  if ($context['entity_type'] == 'sitewide_alert') {
    $status = $form_display->getComponent('status');
    // 'dismissible' được đặt thành trọng số của trường cơ sở, -10.
    $status['weight'] = -11;
    $form_display->setComponent('status', $status);
  }
}

Tình cờ, $form['status']['#weight'] sẽ là lựa chọn đúng đắn nếu quá trình gọi lại không ghi đè lên nó.

liquidcms avatar
lá cờ us
Điều này không làm việc. Cám ơn vì cái này.Chưa bao giờ sử dụng cái móc đó trước đây nhưng chắc chắn sẽ ghi nhớ nó vì tôi đã gặp vấn đề này một vài lần bây giờ khi các phần tử thanh bên chúng tôi không thể di chuyển được.
lá cờ cn
Không thành vấn đề, tôi đã tìm ra nguyên nhân của vấn đề và cập nhật câu trả lời trong trường hợp bạn quan tâm. Có vẻ như ít nhất là phần nào âtheo thiết kếâ
liquidcms avatar
lá cờ us
Cảm ơn cho các thông tin bổ sung. Cũng không có gì đáng ngạc nhiên khi mô-đun đã mã hóa một cái gì đó để buộc một cái gì đó kỳ quặc. Tôi đã mất một lúc để tìm ra lý do tại sao tôi không thể làm cho thực thể có thể sử dụng được khi ai đó chỉ ra rằng có mã trong mô-đun để chặn rõ ràng việc làm cho thực thể có thể sử dụng được (không có lý do chính đáng).
lá cờ cn
Tôi cũng thấy câu hỏi đó, đã dành 20 phút bối rối tìm mã trước khi 4k4 rất may đã giải quyết được và mang lại sự tỉnh táo. Tôi cũng sẽ không bao giờ nghĩ đến việc tìm kiếm những gì hóa ra lại là vấn đề. Thật thú vị, vấn đề đối với câu hỏi _this_ không phải là mô-đun đó, mã ghi đè trọng số nằm trong lõi.

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