コアをハッキングせずにカスタマイズを追加できるように、管理テーマをコアテーマ(7つ)からカスタムサブテーマに切り替えたいと思います。
新しいサブテーマをインストールすると、すべてのブロック配置設定が作成され、ヘッダーまたはコンテンツが残ります。 2つのテーマ間のリージョンを変更していません。7つのテーマから現在のテーマにすべてのブロックをコピーしたいだけです。ブロックプラグインマネージャー(plugin.manager.block
)しかし、どのブロックを編集するかわかりません。古いテーマからすべてのブロックのリストを取得し、すべての配置をプログラムで新しいテーマにコピーする方法を知りたいです。
関連するブロック構成をエンティティクエリし、 Block::createDuplicateBlock()
を使用してクローンエンティティオブジェクトを作成してから、新しいブロック構成をサブテーマ領域に保存する前にサブテーマクローンを変更します。
例えば:
$block_ids = \Drupal::entityQuery('block')->condition('theme', 'my_base_theme')->condition('region','my_region')->execute();
foreach ($block_ids as $block_id) {
$parent_block = \Drupal\block\Entity\Block::load($block_id);
$new_id = str_replace('my_base_theme', 'my_sub_theme', $parent_block->get('id'));
$child_block = $parent_block->createDuplicateBlock($new_id, 'my_sub_theme');
// @TODO: set other properties that might need to be unique to this new theme's block
$child_block->save();
}
私はこれを以前にやったことがありますが、それはしばらくの間です。まず、リージョンが2つのテーマ間で一致していることを確認します。これは私がやったことだと思います:
$ drush cex
テキストエディタを使用して、block.block...
で始まるすべての構成ファイルを見つけます。
一括検索theme: seven
を実行し、theme: subtheme
に置き換えます。
更新された各構成ファイルからuuid: ...
行を削除します。
インポート構成:
drush cim