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"]);
}