Am un formular personalizat de creare a nodurilor pe care îl redau într-un cârlig de preprocesare a vizualizărilor. În acest formular am două câmpuri de referință pentru entități. Setez [#value] și [#default_value] acelor câmpuri de referință în mod programatic.
Pe formularul de trimitere sunt create valorile pe care le-am stabilit, dar numai dacă câmpurile sunt „editabile” de către utilizator. Vreau să fac câmpurile „dezactivate” și/sau „ascunse” pentru utilizator. Nu doar ascuns cu CSS, ci cu întregul widget de completare automată fiind inaccesibil. Câmpul trebuie să fie de tip „ascuns”.
Cum pot face ca o referință de entitate de completare automată să fie dezactivată și/sau inaccesibilă pentru utilizatorul care creează conținutul?
Sau un alt mod de a spune, cum pot adăuga valorile de referință ale entității în mod programatic la trimiterea formularului fără ca utilizatorul să poată interacționa cu câmpurile?
Iată câteva lucruri pe care le-am încercat și care nu funcționează:
- $form['field_entity_reference']['#access'] = false; // Setarea #access la false pare că ar trebui să funcționeze, deoarece câmpurile formularului încă există la depanarea $form, dar nu funcționează deoarece împiedică trimiterea valorii.
- Adăugarea ['#attributes']['readonly'], schimbarea ['#type'] la ascuns sau alt tip de widget, adăugarea ['#attributed']['disabled']. Niciunul nu funcționează
- Prepopulare entitate - Acest lucru nu funcționează pentru această situație particulară, deoarece unele valori nu pot fi furnizate de jetoane
Cod pentru referință
funcția <temă>_preprocess_views_view_field(&$variabile) {
$view = $variables['view'];
if ($view->id() == '<view>') {
$câmp = $variabile['câmp'];
comutare($câmp->opțiuni['id']) {
caz „<view_field>”:
$nod = \Drupal::entityTypeManager()
->getStorage('nodul')
->create(['tip' => '<tip_nod>']);
$form = \Drupal::service('entity.form_builder')->getForm($node, 'secundar');
// Setați valoarea și valoarea implicită
$form['field_entity_reference']['widget']['#default_value'] = (int)$cid; // Rețineți că se utilizează widgetul „listă de selectare” pentru câmpul de referință al entității
$form['field_entity_reference']['widget']['#value'] = (int)$cid; // La fel ca mai sus
// Lucruri care nu funcționează. Valorile nu se trimit decât dacă câmpul este editabil de către utilizator sau câmpul nu este ascuns/dezactivat
$form['field_entity_reference']['#access'] = false; // Valoarea nu se trimite
$form['field_entity_reference']['widget'][0]['#attributes']['readonly'] = 'numai citire'; // Nu face câmpul doar pentru citire
$form['field_entity_reference']['widget'][0]['value']['#type'] = 'ascuns'; // Se pare că widgetul de completare automată și widgetul selectat nu au un tip „ascuns”.
$form['field_entity_reference']['widget'][0]['target_id']['#type'] = 'textfield'; // Se pare că nu se poate schimba tipul în textfield
// Schimbați ieșirea câmpului de vizualizare în formular
$variabile['ieșire'] = $form;
pauză;
}
}
}