web-dev-qa-db-fra.com

Bloquer l'erreur sur CMI

J'ai deux sites identiques sur Drupal 8 (A et B), sur (a) J'ai créé un bloc personnalisé (bloc/add), puis j'exporte la configuration (Thush Config-Exporter). et importer cette configuration sur (B) (Humin Config-Import), aucune erreur, mais sur le site (B) Le bloc que j'ai importé a déclaré sur une région que j'ai placé "Ce bloc est cassé ou manquant. Vous pouvez manquer de contenu. Ou vous devrez peut-être activer le module d'origine. "Et je ne peux pas éditer le contenu de ce bloc. Comment je peux résoudre ce problème?

Site A:

Site A

Site B:

enter image description here

4
rpayanm

Un bloc personnalisé est composé de deux entités, une pour le placement et le contenu réel. Seul le placement réel peut être exporté avec CMI. Le contenu ne peut pas. Vous pouvez envoyer votre contenu via REST ou vous pouvez modifier manuellement l'UUID d'un autre bloc pour correspondre. Dans le futur, vous pourrez utiliser l'entité Pilot (EntityPilot.com) - Disclaimer - Ceci est mon produit.

3
larowlan

Une autre approche pour garder le contenu ajouté dans le cadre du développement également poussé pour tester et les environnements en direct est d'utiliser le module contenu par défaut pour exporter le contenu. Il est conçu pour que le contenu soit exporté dans le dossier "contenu" d'un profil d'installation, puis le module, si activé, apporte automatiquement le contenu lorsque le site est installé, mais il est également possible d'importer le contenu un élément à la fois. , comme dans un crochet de mise à jour, avec le code ci-dessous dans votre exemple.Install ou exemple.Profile:

<?php
/**
* Import a piece of content exported by default content module.
*/
function example_import_default_content($path_to_content_json) {
  list($entity_type_id, $filename) = explode('/', $path_to_content_json);
  $p = drupal_get_path('profile', 'guts');
  $encoded_content = file_get_contents($p . '/content/' . $path_to_content_json);
  $serializer = \Drupal::service('serializer');
  $content = $serializer->decode($encoded_content, 'hal_json');
  global $base_url;
  $url = $base_url . base_path();
  $content['_links']['type']['href'] = str_replace('http://drupal.org/', $url, $content['_links']['type']['href']);
  $contents = $serializer->encode($content, 'hal_json');
  $class = 'Drupal\\' . $entity_type_id . '\Entity\\' . str_replace(' ', '', ucwords(str_replace('_', ' ', $entity_type_id)));
  $entity = $serializer->deserialize($contents, $class, 'hal_json', array('request_method' => 'POST'));
  $entity->enforceIsNew(TRUE);
  $entity->save();
}

Exporter un bloc personnalisé avec un ID de 8:

drush dcer block_content 8

(Si vous ne le faites pas Définissez votre chemin de profil dans les paramètres de Drush Vous devrez le préciser ci-dessus.)

Et utilisez l'exportation résultante dans votre exemple .Installez un fichier comme celui-ci:

<?php
/**
* Add the footer block content.
*
* Implements hook_update_N().
*/
function example_update_8001() {
  example_import_default_content('block_content/136efd63-021e-42ea-8202-8b97305cc07f.json');
}

Voir Ajoutez facilement du contenu par défaut avec des crochets de mise à jour Pour plus.

0
mlncn