개발의 일부로 추가 된 컨텐츠를 유지하기위한 또 다른 방법은 기본 컨텐츠 모듈을 사용하여 컨텐츠를 내보내는 것입니다. 컨텐츠를 설치 프로파일의 'content'폴더로 내보낼 수 있도록 빌드 된 다음 사이트를 설치할 때 모듈이 컨텐츠를 자동으로 가져 오지만 한 번에 한 항목 씩 컨텐츠를 가져올 수도 있습니다 example.install 또는 example.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();
}
ID가 8 인 사용자 블록을 내 보냅니다.
drush dcer block_content 8
Drush 설정에서 프로필 경로를 설정 하지 않으면 위에서 지정해야합니다.
다음과 같이 example.install 파일에서 결과 내보내기를 사용하십시오.
<?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');
}
http://data.agaric.com/easily-add-content-update-hooks-use-default-content-module-exports-create-content-needs-be-sync-conf