Рейтинг:0

Как скрыть поля в управлении отображением, когда модуль макета установлен, и отображать, когда модуль удален программно?

флаг in

В приведенной ниже конфигурации я хочу удалить поле body из содержание и добавить его в скрытый как тело: правда когда я удаляю модуль макета. В основном, когда я устанавливаю модуль макета, поля в управлении отображением должны отключаться/скрываться, а когда я удаляю модуль, поля должны отображаться. Как я могу добиться этого программно?

Этот код конфигурации entity_view_display.node.article.default

  UUID: eedc35e4-0592-4f1a-bdc6-47dbf60fa929    
    код языка: en    
    статус: правда    
    зависимости:   
      конфигурация:   
        - поле.поле.узел.статья.тело 
        - 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   
        - узел.тип.статья 
      модуль:   
        - layout_builder    
        - текст  
        - пользователь  
    третьи_стороны_настройки:   
      layout_builder:   
        включено: ложь  
        allow_custom: ложь 
    идентификатор: node.article.default    
    targetEntityType: узел  
    комплект: статья 
    режим: по умолчанию   
    содержание:    
      тело: 
        тип: text_default  
        метка: выше    
        настройки: {  }  
        третьи_стороны_настройки: { }  
        вес: 0   
        регион: содержание 
    скрытый: 
      комментарий: правда 
      поле_изображение: правда 
      поле_медиа: правда 
      field_sample_text: правда   
      field_tags: правда  
      Код языка: правда    
      ссылки: правда   
      search_api_excerpt: правда
4uk4 avatar
флаг cn
Вы ищете хук вроде hook_modules_installed/uninstalled или setComponent/removeComponent для режима отображения? См. https://drupal.stackexchange.com/questions/224686/8-how-do-i-programmatically-enable-a-user-field-under-manage-form-display-and
Libbna Mathew avatar
флаг in
в hook_install() я хочу скрыть поля в управлении отображением. Например, когда я включаю / устанавливаю модуль компоновщика макетов, поля в управлении отображением должны быть отключены.
4uk4 avatar
флаг cn
Вы имеете в виду основной модуль компоновщика макетов? Тогда вам нужен крючок, который я упомянул. hook_install() запускается только для модуля, в котором реализован хук.
Libbna Mathew avatar
флаг in
Нет-нет, я создал собственный модуль макета. И я работаю над D9. Я просто хочу, чтобы содержимое в вышеупомянутой конфигурации было очищено, а поле body в содержимом должно быть скрыто: true. И эта функциональность должна быть реализована в hook_install(). Надеюсь, я смогу хорошо объяснить!
Libbna Mathew avatar
флаг in
Я хочу отключить поле в управлении отображением при установке своего пользовательского модуля.
Рейтинг:1
флаг in

Я решил проблему. Вместо \Drupal::entityTypeManager() я использовал

$articleDefaultLayout = LayoutBuilderEntityViewDisplay::load(
    'узел.статья.по умолчанию'
);
$articleDefaultLayout->setComponent('body');
Libbna Mathew avatar
флаг in
@ 4uk4 спасибо за помощь.
4uk4 avatar
флаг cn
Это не имеет значения, используете ли вы entityTypeManager() или статическую загрузку(). Оба имеют одинаковый результат.
Libbna Mathew avatar
флаг in
Но когда я использовал entityTypeManager(), removeComponent() выдавал ошибку. "Метод не найден"
4uk4 avatar
флаг cn
Потом другая ошибка. Кстати, ваш пример кода имеет тот недостаток, что он выдает ошибку, когда Layout Builder не установлен. Было бы лучше загрузить исходный класс или загрузить объект по идентификатору типа объекта через entityTypeManager().Затем вы всегда получаете текущий установленный класс для этого типа сущности.
Libbna Mathew avatar
флаг in
Я понял вашу точку зрения. Но почему тогда показывает эту ошибку? Я сделал именно то, что вы упомянули в коде в hook_install(). Не удается найти метод removeComponent(). !!
Рейтинг:0
флаг cn

Чтобы отключить поле body при установке пользовательского модуля:

моймодуль.установить

/**
 * Реализует hook_install().
 */
функция mymodule_install() {
  \Drupal::entityTypeManager()
    ->getStorage('entity_view_display')
    ->загрузить('узел.статья.по умолчанию')
    ->удалитьКомпонент('тело')
    -> сохранить();
}

Как включить поле см. 8 - Как программно включить пользовательское поле в разделе «Управление отображением формы» и «Управление отображением»?

Libbna Mathew avatar
флаг in
Я получаю сообщение об ошибке в методе removeComponent(). И если я хочу удалить поле, используя идентификатор поля, чтобы вместо «тела» мы могли написать идентификатор поля, верно?
Libbna Mathew avatar
флаг in
Я работаю над Drupal 9

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.