Puncte:1

Extindeți widgetul de selectare de bază

drapel tr

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:

  1. Am creat un nou modul personalizat și l-am activat.

  2. 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;
  }

}

  1. 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;
  }
}

  1. 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',
        ],
    ];
}
  
  1. 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.

Puncte:1
drapel cn

Îți lipsește template_preprocess_select(). Puteți copia codul în propriul cârlig de preprocesare pentru fselect sau, care ar putea fi o idee mai bună, extindeți Selectați ca cârlig de bază și folosiți liniuțe de subliniere duble select__fselect pentru numele șablonului extins. Vedea Cum definesc un fișier html.html.twig personalizat?

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.