Puncte:6

Cum pot elimina imaginea implicită din câmpurile de imagine?

drapel ru

Trebuie să creez un câmp de imagine cu o valoare implicită, care trebuie să fie, de asemenea, nulabilă pentru entitățile de conținut unice. Spre deosebire de câmpurile de text sau câmpurile de referință pentru entități, nu am reușit să elimin această valoare implicită pentru entitățile de conținut individuale.

De exemplu. Pot crea un câmp de text cu valoarea implicită „Lorem ipsum”. La crearea nodului, câmpul este precompletat cu acel text, dar pot și șterge acel text și câmpul va rămâne gol.

Dar pe câmpurile de imagine, nu există niciun buton/opțiune pentru a elimina deloc valoarea implicită. Pot elimina o imagine de suprascriere, dar nu cea implicită. Chiar și după încărcarea unei imagini care nu este implicită, stocarea și apoi eliminarea din nou a acelei imagini, valoarea implicită revine.

Cum pot face câmpul de imagine „nullabil”?

Rețineți că nu pot folosi referințe la entități media, deoarece trebuie să accept SVG și, de asemenea, acele imagini nu trebuie să se scurgă în pool-ul media global reutilizabil.

Puncte:5
drapel cn

De fapt, imaginea implicită nu provoacă salvarea datelor, dar afectează formatatorul de imagini, așa că dacă nu găsește nicio valoare pentru câmpul de imagine, atunci afișează imaginea implicită care este setată în setările câmpului.

puteți verifica în DB sau pur și simplu creați un conținut cu imaginea implicită A.png și apoi mergeți la setările de câmp și schimbați imaginea implicită la B.png, iar când afișați nodul dvs. veți vedea că B.png va fi afișat în conținut.

Deci, dacă nu doriți să vedeți imaginea implicită în unele cazuri, puteți duplica formatatorul de imagine implicit și faceți ce doriți.

și dacă într-adevăr doriți să salvați un câmp de date pentru imagine cu valoarea implicită, puteți face acest lucru modificând forma nodului ca mai jos:

function my_module_form_node_article_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  foreach (array_keys($form['actions']) ca $action) {
    if ($action != 'previzualizare' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] == = 'trimite') {
      array_unshift($form['actions'][$action]['#submit'], 'my_module_test_form_submit');
    }
  }
}

function my_module_test_form_submit(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {
  $imagine = $form_state->getValue('field_image');
  dacă (gol ($image[0]['fids'])) {
    $form_state->setValue('field_image', $form['field_image']['widget'][0]['#default_image']['fid']);
  }
}
drapel ru
Mulțumesc pentru indiciu cu formatatorul de câmp, asta explică o mulțime de probleme pe care le-am avut. Câmpul imagine este singurul câmp din core care nu stochează valorile implicite în DB, ci le calculează în formatatorul de câmp. Acesta este motivul pentru care imaginea nu poate fi anulată și API-ul de stocare nu returnează valorile implicite corecte. Am depus un [raport de eroare pe d.o](https://www.drupal.org/project/drupal/issues/3250680) despre asta
Alireza Tabatabaeian avatar
drapel cn
Îmi pot imagina cât de exhaustiv este să realizezi că de fapt nu ai salvat nicio valoare pe un câmp de mult timp în timp ce credeai că ai făcut-o

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.