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

Установка представляет собой безголовый D8 с окружением dev/stage/prod.

Проблема в том, что это поле находится в DL (оно отключено) в разделе "Управление отображением" его типа содержимого. Он используется только в одном типе контента. Решение - это программный способ задействовать поле, которое также дает нам историю таких изменений (мы используем Git)- вот где вы входите!

Сайт использует Drush, и мы будем работать drush updb (и другие при необходимости) при развертывании. У меня сложилось впечатление, что самый простой способ программно сделать это изменение - программно перевести поле из отключенного состояния в отображаемое - это создать модуль. Это верно?

Похоже, есть два способа сделать это:

Опция 1

Поместите это в установочный файл модуля

// modules/custom/myapp_updatedb/myapp_updatedb.install
function myapp_updatedb_update_1() {
    $type = \Drupal::entityManager()->getStorage('node_type')->load('competition_workout');
    $field = FieldConfig::loadByName('node', $type->id, 'workout_dates');
    $field->enable();
    $field->save();
}

И тогда дальнейшие обновления могут быть в функциях с такими именами, как myapp_updatedb_update_2, право? Сценарий базы данных запускается, когда я включаю модуль, или мне нужно запустить drush updb или что-то типа того?

Вариант 2

Я смотрел на это SO, и похоже, что я могу просто экспортировать тип контента и поместить его в файл с именем node.type.competition_workout.yml Внутри modules/custom/myapp_updatedb/config/install - это верно? Кроме того, связанный вопрос включает в себя скриншот его нажатия кнопки "Экспорт", но я не могу найти страницу, которую он использует для этого. Есть идеи?

Мне нравится второй вариант, потому что в теории мы могли бы использовать этот метод, чтобы синхронизировать все поля во всех типах контента между нашими средами - это правда? Если так, как я могу экспортировать этот yml? Кроме того, если я сделаю это вручную только с одним полем, будет ли оно обновлять только поле, которое мне нужно обновить, или удалит все остальные поля? И как выглядит то, что я хочу сделать в yml?

Дайте нам знать, какое решение вы считаете лучшим, почему вы думаете, что оно лучше, и определенно покажите нам, как оно выглядит!

Заранее спасибо!

0 ответов

Другие вопросы по тегам