開発の一環として追加されたコンテンツをライブにプッシュする別の方法は、デフォルトコンテンツモジュールを使用してコンテンツをエクスポートすることです。コンテンツがインストールプロファイルの「コンテンツ」フォルダーにエクスポートされるように構築され、有効になっている場合、モジュールはサイトのインストール時にコンテンツを自動的に取り込みますが、一度に1アイテムずつコンテンツをインポートすることも可能です、たとえば、更新フックのように、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