Drupal 8.1の場合)基本ページに変更を加えるカスタムモジュールまたはカスタム機能をアクティブにしようとすると、このようなメッセージが表示されます(フィールドを追加)。
それは本当に迷惑です...
手順:
結果:
Unable to install Feature - Basic Page, core.base_field_override.node.page.promote, core.entity_form_display.node.page.default, core.entity_view_display.node.page.default, core.entity_view_display.node.page.teaser, field.field.node.page.body, node.type.page already exist in active configuration.
そうですね...それが私がやりたいことです。これらのデフォルト設定を変更してください!
拡張:
基本ページにいくつかの変更を加える私の機能をインストールすることができます。
私の機能
基本的に、banner_imageとbackground_imageの2つのフィールドを基本ページに追加します
ファイル:
config
install
core.base_field_override.node.page.changed.yml
core.base_field_override.node.page.created.yml
core.base_field_override.node.page.promote.yml
core.base_field_override.node.page.status.yml
core.base_field_override.node.page.sticky.yml
core.base_field_override.node.page.title.yml
core.base_field_override.node.page.uid.yml
core.entity_form_display.node.page.default.yml
core.entity_view_display.node.page.default.yml
core.entity_view_display.node.page.teaser.yml
field.field.node.page.body.yml
field.field.node.page.field_banner_image.yml
field.field.node.page.field_image.yml
field.storage.node.field_banner_image.yml
language.content_settings.node.page.yml
node.type.page.yml
feature_basic_page.features.yml
feature_basic_page.info.yml
なぜこの単純なものがサポートされていないのですか?バグですか?この機能を使用するにはどうすればよいですか?
drush en
できます!
[profile_test]$ drush en feature_basic_page -y
The following extensions will be enabled: feature_basic_page
Do you really want to continue? (y/n): y
feature_basic_page was enabled successfully. [ok]
編集:今より良い解決策があります、参照してください: アクティブな構成から構成オブジェクトを削除するにはどうすればよいですか?
Drushを使用すると、おそらく
drush config-delete module_name.settings
文句を言う設定を削除する
モジュールが見つかりました。 Easy Install モジュールを使用してアクティブな構成を削除してくださいdevelまたはdrushを使用せずに。モジュールの設定ファイル(yml)でoptional folder and enforced optionを逃した場合でも機能します
モジュールがインストール構成で既に存在する構成エンティティを置き換えることができないため、これはサポートされません。
既存のノードタイプのフォームおよびビューモード設定を追加するには、hook_install()のコードでこれを実装する必要があります。
または、最初にサイトでノードタイプを削除する必要がありますが、次にコンテンツも削除する必要があります。
いいえ、これはバグではありません。これは、構成の損失を防ぐための定義方法です。
パンテオンサイトにも同じ問題があります。ドラッシュコマンドを入力しました
Pantheonsite:drush @ pantheon.SITENAME.ENVNAME config-delete ERRORNAME
ローカルサイト:drush config-delete ERRORNAME
それは私にとっては仕事です。
時々、モジュールはきれいにアンインストールされません。新しいバージョンを再度有効にしようとすると、この問題が発生します。
最初にDBバックアップを実行し、次を実行します。
drush @site.env sqlq 'DELETE FROM config WHERE name LIKE "%module_name%";'
カスタムモジュールに構成を追加したいが、それらがアクティブ構成にすでに存在し、何らかの理由でDrushを使用してそれらの構成を削除できない場合(私の場合、インストールプロファイルの一部であるため)、確実です。設定を上書きしても問題はありません。これらの設定を置き換える方法を次に示します。
カスタムモジュールに新しいフォルダー/ config/hook_installを追加し、そのフォルダーにconfig .ymlファイルを追加してから、モジュールのhook_installに追加します。
use Drupal\Component\Serialization\Yaml;
/**
* Implements hook_install().
*/
function mymodule_install() {
// Replace these configs. We're using code to do this, as they are already
// installed.
$config_files = [
'language.types',
'language.negotiation',
];
foreach ($config_files as $config_id) {
$raw_data = file_get_contents(drupal_get_path('module', 'mymodule') . '/config/hook_install/' . $config_id . '.yml');
\Drupal::configFactory()->getEditable($config_id)
->setData(Yaml::decode($raw_data))
->save();
}
}