Puncte:0

Cum să ascundeți câmpurile din gestionarea afișajului când modulul de aspect este instalat și cum să afișați când modulul este dezinstalat programatic?

drapel in

În configurația de mai jos, vreau să elimin câmpul body din conţinut si adauga-l in ascuns la fel de corp: adevărat când dezinstalez modulul de layout. Practic, când instalez modulul de aspect, câmpurile din gestionarea afișajului ar trebui să fie dezactivate/ascunse, iar când dezinstalez modulul, câmpurile ar trebui să fie afișate. Cum pot realiza acest lucru programatic?

Acest cod de configurare este de entity_view_display.node.article.default

  uuid: eedc35e4-0592-4f1a-bdc6-47dbf60fa929    
    langcode: en    
    stare: adevărat    
    dependențe:   
      config:   
        - câmp.câmp.nod.corp.articol 
        - field.field.node.article.comment  
        - field.field.node.article.field_image  
        - field.field.node.article.field_media  
        - field.field.node.article.field_sample_text    
        - field.field.node.article.field_tags   
        - tip.nod.articol 
      modul:   
        - layout_builder    
        - text  
        - utilizator  
    setări_terți:   
      layout_builder:   
        activat: fals  
        allow_custom: fals 
    id: node.article.default    
    targetEntityType: nod  
    pachet: articol 
    mod: implicit   
    conţinut:    
      corp: 
        tip: text_default  
        etichetă: mai sus    
        setări: { }  
        setări_terți: { }  
        greutate: 0   
        regiune: continut 
    ascuns: 
      comentariu: adevarat 
      field_image: adevărat 
      field_media: adevărat 
      field_sample_text: adevărat   
      field_tags: adevărat  
      cod limba: adevărat    
      link-uri: adevărat   
      search_api_excerpt: adevărat
4uk4 avatar
drapel cn
Căutați un cârlig precum hook_modules_installed/uninstalled sau setComponent /removeComponent pentru modul de afișare? Consultați https://drupal.stackexchange.com/questions/224686/8-how-do-i-programmatically-enable-a-user-field-under-manage-form-display-and
Libbna Mathew avatar
drapel in
în hook_install() vreau să ascund câmpurile din gestionarea afișajului. La fel ca atunci când activez/instalez modulul de generare de aspect, câmpurile din gestionarea afișajului ar trebui să fie dezactivate.
4uk4 avatar
drapel cn
Te referi la modulul de generare de layout de bază? Atunci ai nevoie de cârligul pe care l-am menționat. hook_install() rulează numai pentru modulul în care este implementat hook-ul.
Libbna Mathew avatar
drapel in
Nu, nu, am creat un modul de layout personalizat. Și lucrez la D9. Vreau doar ca conținutul să fie golit în configurația menționată mai sus și câmpul de corp din conținut ar trebui să fie ascuns: adevărat. Și această funcționalitate ar trebui făcută în hook_install(). Sper că reușesc să explic bine!
Libbna Mathew avatar
drapel in
Doresc să dezactivez câmpul din gestionarea afișajului când îmi instalez modulul personalizat.
Puncte:1
drapel in

Am rezolvat problema. În loc de \Drupal::entityTypeManager() obisnuiam

$articleDefaultLayout = LayoutBuilderEntityViewDisplay::load(
    „node.article.default”
);
$articleDefaultLayout->setComponent('body');
Libbna Mathew avatar
drapel in
@4uk4 mulțumesc pentru ajutor.
4uk4 avatar
drapel cn
Acest lucru nu contează dacă utilizați entityTypeManager() sau încărcarea statică(). Ambele au același rezultat.
Libbna Mathew avatar
drapel in
Dar când am folosit entityTypeManager(), removeComponent() dădea eroare. „Metoda nu a fost găsită”
4uk4 avatar
drapel cn
Apoi există o altă eroare. BTW exemplul dvs. de cod are dezavantajul că aruncă o eroare atunci când Layout Builder nu este instalat. Ar fi o idee mai bună să încărcați clasa originală sau să încărcați entitatea după id-ul tipului de entitate prin entityTypeManager().Apoi veți obține întotdeauna clasa instalată curent pentru acest tip de entitate.
Libbna Mathew avatar
drapel in
Am înțeles punctul tău. Dar de ce arată această eroare atunci? Am făcut exact ceea ce ați menționat în codul în hook_install(). Nu a găsit metoda removeComponent(). !!
Puncte:0
drapel cn

Pentru a dezactiva câmpul body atunci când instalați modulul personalizat:

mymodule.install

/**
 * Implementează hook_install().
 */
funcția mymodule_install() {
  \Drupal::entityTypeManager()
    ->getStorage('entity_view_display')
    ->load('node.article.default')
    ->removeComponent('corp')
    ->salvare();
}

Cum să activați câmpul vedeți 8 - Cum activez în mod programatic un câmp de utilizator în gestionarea afișajului formularului și gestionarea afișajului?

Libbna Mathew avatar
drapel in
Primesc o eroare în metoda removeComponent(). Și dacă vreau să șterg câmpul folosind ID-ul câmpului, astfel încât în ​​loc de „corp” să putem scrie ID-ul câmpului, nu?
Libbna Mathew avatar
drapel in
Lucrez la Drupal 9

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.