如何以编程方式更新字段的显示设置?

时间:2018-07-18 18:44:08

标签: drupal drupal-modules drupal-8 drupal-database

设置是具有开发/阶段/产品环境的无头D8。

问题是该字段位于内容类型的“管理显示”部分中的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

我当时看着this SO,看来我可以导出内容类型并将其放在node.type.competition_workout.yml内的modules/custom/myapp_updatedb/config/install文件中-正确吗?另外,链接的问题包括他单击“导出”按钮的屏幕截图,但是我找不到他用来执行此操作的页面。有什么想法吗?

我喜欢第二种选择,因为从理论上讲,我们可以使用该方法来使环境中所有内容类型中的所有字段保持同步-这是真的吗?如果是这样,我该如何导出该yml?另外,如果我只用一个字段手工完成它,它只会更新我需要更新的字段还是会删除所有其他字段?在yml中,我想要做什么?

让我们知道您认为哪种解决方案更好,为什么认为更好,并向我们展示它的外观!

谢谢!

0 个答案:

没有答案