Sunt pe D9.
Am adăugat o opțiune personalizată la formatatorul de câmpuri de imagine care urmează Ghidurile Drupal
În preprocesul câmpului pot obține setările pe care le-am creat:
function my_module_preprocess_field(&$variabile) {
if ($variabile["element"]["#formatter"] === 'imagine') {
$entity = $variables['element']['#object'];
$view_mode = $variables['element']['#view_mode'];
$field_name = $variables['element']['#field_name'];
$entity_display = EntityViewDisplay::collectRenderDisplay($entity, $view_mode);
$field_display = $entity_display->getComponent($field_name);
$variables['my_settings'] = isset($field_display["third_party_settings"]["my_module"]["my_settings"]) && $field_display["third_party_settings"]["my_module"]["my_settings"];
}
}
Însă field.html.twig fișierul nu este bun pentru nevoia mea: trebuie să trec aceste setări la image-formatter.html.twig fișier, pentru că trebuie să plasez un div imediat după img etichetă și nu în afara A.
Din păcate, nu pot obține aceste informații în preprocesul formatatorului de imagini, deoarece nu găsesc o modalitate de a obține modul de vizualizare:
funcția my_module_preprocess_image_formatter(&$variabile) {
$articol = $variabile['articol'];
$entity = $item->getEntity();
$câmp = $item->getFieldDefinition();
// cum să obțineți modul de vizualizare\setările_terțelor_părți?
$entity_display = EntityViewDisplay::collectRenderDisplay($entity, $missing_view_mode);
}
Este posibil?
EDITAȚI | ×:
Mulțumesc răspuns 4k4, ce am făcut:
- Adăugat în cadrul funcției câmp de preprocesare:
dacă (!gol ($variabile['articole'])) {
foreach ($variabile['articole'] ca &$articol) {
$item['conținut']['#item_attributes']['my_settings'] = $my_settings;
}
}
Și apoi a adăugat un funcția de preprocesare a imaginii pentru a avea acea informație ca variabilă și nu ca atribut - mai mult o preferință decât o strictă necesitate.
funcția my_module_preprocess_image(&$variabile) {
$variables['my_settings'] = $variables["atribute"]["my_settings"] ?? FALS;
unset($variabile["atribute"]["setarile_mea"]);
}