Vă rugăm să ajutați cu următoarele:
Am nevoie de un widget nou (doar o selecție ușor modificată) care poate fi configurat din interfața de utilizare de către oricine. Am facut urmatoarele:
Am creat un nou modul personalizat și l-am activat.
A creat un widget nou.
<?php
spațiu de nume Drupal\filtered_select\Plugin\Field\FieldWidget;
utilizați Drupal\Core\Field\FieldItemListInterface;
utilizați Drupal\Core\Field\Plugin\Field\FieldWidget\OptionsSelectWidget;
utilizați Drupal\Core\Form\FormStateInterface;
/**
* Implementarea plugin-ului widget-ului „filtered_select”.
*
* @FieldWidget(
* id = "filtered_select",
* label = @Translation("Selectare filtrată"),
* field_types = {
* „entity_reference”
*},
* multiple_values = FALSE
* )
*/
clasa FilteredSelectWidget extinde OptionsSelectWidget {
/**
* {@inheritdoc}
*/
funcția publică formElement(FieldItemListInterface $articole, $delta, matrice $element, matrice &$form, FormStateInterface $form_state) {
$element = parent::formElement($articole, $delta, $element, $form, $form_state);
// Folosește funcționalitatea de selectare a părintelui,
// comută doar elementul.
$element['#type'] = 'fselect';
returnează $element;
}
}
- Am creat un nou element pentru a putea schimba tema. (nu sunt sigur dacă acest lucru este necesar)
<?php
spațiu de nume Drupal\filtered_select\Element;
utilizați Drupal\Core\Render\Element\Select;
/**
* Oferă elementul selectat filtrat.
*
* @FormElement ("fselect")
*/
clasa FilteredSelect extinde Selectează {
/**
* {@inheritdoc}
*/
funcția publică getInfo() {
$info = părinte::getInfo();
// Comutare teme.
$info['#theme'] = 'fselect';
returnează $info;
}
}
- Altfel nu a funcționat, așa că am primit și o temă hook_theme în fișierul meu modul, astfel:
/**
* Implementează hook_theme().
*/
function filtered_select_theme($existent, $tip, $tema, $cale): matrice {
întoarcere [
'fselect' => [
'render element' => 'element',
'template' => 'fselect',
],
];
}
- Tocmai am copiat șablonul din nucleu în modulul meu personalizat și funcționează în sensul că tipărește șablonul potrivit, încă nu l-am modificat pe acesta, vreau doar să obțin aceeași funcționalitate de bază veche să funcționeze mai întâi sub alt nume.
Problema:
Noului meu element de randare pare să lipsească matricea de opțiuni și nu îmi pot da seama de ce. Am făcut suprascrieri de bază și nu pot înțelege de ce nu construiește matricea de opțiuni.
Haldele de var de crenguțe:
--- ACEASTA ESTE SELECTAREA DE BAZĂ ---
matrice:15 [â¼
„element” => array:41 [â¶]
"theme_hook_original" => "selectați"
„atribute” =>Drupal\Core\Template\Atribut {#7543 â¶}
"title_attributes" =>Drupal\Core\Template\Atribut {#7932 â¶}
"content_attributes" =>Drupal\Core\Template\Atribut {#7896 â¶}
„title_prefix” => []
„title_sufx” => []
"db_is_active" =>true
„is_admin” => adevărat
"logged_in" => adevărat
„utilizator” =>Drupal\Core\Session\AccountProxy {#2354 â¶}
"directory" => "core/themes/seven"
„opțiuni” => array:3 [â¼0 => array:4 [â¶]
1 =>matrice:3 [â¶]
2 =>matrice:3 [â¶]
]
„#cache” =>array:1 [â¶]
„theme_hook_suggestions” => []
]
--- ASTA ESTE „NOUL” MEU Selectare filtrată ---
matrice:14 [â¼
„element” => array:41 [â¶]
"theme_hook_original" => "fselect"
„atribute” =>Drupal\Core\Template\Atribut {#7543 â¶}
"title_attributes" =>Drupal\Core\Template\Atribut {#8034 â¶}
"content_attributes" =>Drupal\Core\Template\Atribut {#7708 â¶}
„title_prefix” => []
„title_sufx” => []
"db_is_active" =>true
„is_admin” => adevărat
"logged_in" => adevărat
„utilizator” =>Drupal\Core\Session\AccountProxy {#2354 â¶}
"directory" => "core/themes/seven"
„#cache” =>array:1 [â¶]
„theme_hook_suggestions” => []
]
După cum se poate vedea, îmi lipsește matricea „opțiuni” și nu pot înțelege de ce. Vă rugăm consultaţi.