Puncte:2

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

drapel 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?

Puncte:2
drapel cn

În cele din urmă, se pare că se datorează acestui cod EntityFormDisplay::processForm():

// Atribuiți greutățile configurate în afișarea formularului.
foreach ($this->getComponents() as $name => $opțiuni) {
  if (isset($element[$nume])) {
    $element[$name]['#weight'] = $options['weight'];
  }
}

Această metodă este a #proces apel invers pentru formularul care rulează după cârligele de modificare a formularului, astfel încât modificările dvs. sunt pierdute.

Ai putea să-ți adaugi propriul proces de apel invers și să schimbi ponderile acolo, dar ar putea fi puțin mai curat să-l modifici la nivel de componentă cu hook_entity_form_display_alter(), de exemplu.:

funcția MODULE_entity_form_display_alter(\Drupal\Core\Entity\Display\EntityFormDisplayInterface $form_display, array $context) {
  dacă ($context['entity_type'] == 'sitewide_alert') {
    $status = $form_display->getComponent('status');
    // „dismisibil” este setat la greutatea câmpului de bază, -10.
    $status['greutate'] = -11;
    $form_display->setComponent('status', $status);
  }
}

Întâmplător, $form['status']['#greutate'] ar fi fost alegerea potrivită dacă procesul de apel invers nu l-ar fi înlocuit.

liquidcms avatar
drapel us
Acest lucru funcționează. Multumesc pentru asta.Nu am mai folosit niciodată acel cârlig, dar cu siguranță îl voi ține cont, deoarece am întâlnit de câteva ori această problemă în care elementele barei laterale nu sunt deplasabile.
drapel cn
Nicio problemă, am găsit de unde vine problema și am actualizat răspunsul în cazul în care sunteți interesat. Pare să fie cel puțin âprin designâ
liquidcms avatar
drapel us
Mulțumesc pentru informațiile adăugate. De asemenea, nu este surprinzător că modulul a codificat ceva pentru a forța ceva ciudat. Mi-a luat ceva timp să-mi dau seama de ce nu am putut face ca entitatea să fie câmpabilă atunci când cineva a subliniat că există cod în modul pentru a bloca în mod explicit ca entitatea să poată fi câmpată (fără un motiv întemeiat).
drapel cn
Am văzut și acea întrebare, am petrecut 20 de minute de confuz în jurul codului înainte ca 4k4, din fericire, să-l rezolve și să aducă puțină minte. Nici nu m-aș fi gândit să caut ceea ce s-a dovedit a fi problema. În mod ciudat, problema pentru _această_ întrebare nu este acel modul, codul de suprareglare a greutății este în nucleu.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.