Как я могу обновить настройки отображения поля программно?
Установка представляет собой безголовый 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?
Дайте нам знать, какое решение вы считаете лучшим, почему вы думаете, что оно лучше, и определенно покажите нам, как оно выглядит!
Заранее спасибо!