On Drupal 8.1 Je continue d'exécuter ce genre de messages lorsque j'essaie d'activer un module personnalisé ou une fonctionnalité personnalisée qui apporte des modifications à la page de base. (Ajouter des champs).
C'est vraiment ennuyeux ...
Étapes:
Résultat:
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.
Eh bien oui ... c'est ce que je veux faire: changez ces paramètres par défaut!
Expexted:
Pouvoir installer ma fonctionnalité qui apporte quelques modifications à la page de base.
Ma fonction
Voici ma fonction créer avec le module fonctionnalités
Il ajoute essentiellement deux champs, banner_image et background_image à la page de base
Des dossiers:
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
Pourquoi cette chose simple n'est pas prise en charge? Est-ce un bug? Que dois-je faire pour pouvoir utiliser ma fonction?
Avec drush en
Ça marche!
[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]
EDIT: il existe une meilleure solution maintenant, voir: Comment supprimer un objet de configuration de la configuration active?
Avec drush, vous pouvez probablement faire
drush config-delete module_name.settings
supprimer les configurations qui se plaignent
Module trouvé, utilisez le module Installation facile pour purger la configuration active sans utiliser devel ou drush . Cela fonctionne même si vous avez manqué le dossier optionnel et l'option forcée dans les fichiers de configuration de votre module ( yml )
Cette chose n'est pas prise en charge car un module ne peut pas remplacer une entité de configuration qui existe déjà avec l'installation de configuration.
Pour ajouter des configurations de mode formulaire et affichage pour un type de nœud déjà existant, vous devez l'implémenter dans le code dans hook_install ().
Ou vous devez d'abord supprimer le type de nœud sur votre site, mais vous devez également supprimer le contenu.
Et non, ce n'est pas un bug, c'est ainsi qu'il est défini pour éviter toute perte de configuration.
J'ai le même problème pour le site du panthéon. J'ai entré la commande drush
Panthéon: drush @ pantheon.SITENAME.ENVNAME config-delete ERRORNAME
Localsite: drush config-delete ERRORNAME
c'est du travail pour moi.
Parfois, les modules ne se désinstallent pas proprement. Essayer de réactiver une version plus récente entraînerait alors ce problème.
Effectuez d'abord une sauvegarde de base de données et exécutez ce qui suit:
drush @site.env sqlq 'DELETE FROM config WHERE name LIKE "%module_name%";'
Si vous souhaitez ajouter des configurations à votre module personnalisé mais qu'elles existent déjà dans la configuration active, et pour une raison quelconque, vous ne pouvez pas utiliser drush pour supprimer ces configurations (dans mon cas, car cela fait partie d'un profil d'installation), et vous êtes sûr il n'y aura pas de problème avec l'écrasement de la configuration, voici une approche pour remplacer ces configurations.
Ajoutez un nouveau dossier dans votre module personnalisé,/config/hook_install et ajoutez vos fichiers config .yml dans ce dossier, puis dans hook_install de votre module.
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();
}
}