Drupal 8の構成エクスポート機能は非常に便利な機能のようですが、どのように機能するか完全に理解しているとは思いません。
たとえば、単一のエクスポートを実行する場合、[コンテンツタイプ]を選択し、コンテンツタイプの1つを選択すると、エクスポートにはそのコンテンツタイプの完全な説明が含まれているはずです。ただし、そのコンテンツタイプのフィールドに関する情報は含まれていません。したがって、別のサイトで使用するためにコンテンツタイプの構成をエクスポートする場合、それを行うことはできないようです。
エンティティに必要なすべてのデータが含まれていない場合に、単一のエクスポートを行うことの使用法を理解しているとは思いません。何か不足していますか?
[〜#〜]更新[〜#〜]
Drupal Console'sdrupal config:export:content:type
コマンドを試すこともできます。
それの説明は言う:
Config:export:content:typeコマンド特定のコンテンツタイプとそのフィールドをエクスポートします。
Drupal 8)のコンテンツタイプとフィールドは2つの個別の構成であるため、フィールドを含むコンテンツタイプをエクスポートする場合は、すべてのフィールド構成もエクスポートする必要があります。
機能 モジュールは構成をグループ化するのに役立つかもしれませんが、まだ安定していません。まだ試していませんが、試す価値はあると思います。
私は書きましたPythonスクリプト(以下)をエクスポートするスクリプト構成アイテムのグループを使用してdrush
を使用します。私の場合でした)使用法:
export_config_group.py -s something -m foobar
これはdrush config-list
を実行し、名前にsomething
という用語が含まれるすべてのアイテムを取得して、modules/custom/foobar/config/install
に保存します。
スクリプトはまた、ymlを次のように調整します。
default_config_hash
エントリが存在する場合は削除します。uuid
エントリが存在する場合は削除します。スクリプトは ruamel.yaml に依存して、設定をロードおよびダンプします。事前にpip install
を確認してください。
import os
import argparse
import subprocess
import ruamel.yaml
MODULES_ROOT = "/var/www/html/dm/web/modules/custom"
def main():
search_term, module, keep_uuid = parse_arguments()
module_config_path = os.path.join(MODULES_ROOT, module, 'config/install')
items = run_process(['drush', 'config-list']).splitlines()
for item in items:
if search_term in item:
print "Config item:", item
yml = run_process(['drush', 'config-get', item])
new_yml = adjust_yml(yml, keep_uuid)
full_path = os.path.join(module_config_path, item + '.yml')
with open(full_path, 'w') as f:
f.write(new_yml)
def parse_arguments():
ap = argparse.ArgumentParser(description="Export config group.")
ap.add_argument("-s", "--search", required=True, help="Search term")
ap.add_argument("-m", "--module", required=True, help="Destination module")
ap.add_argument("-u", "--uuid", help="Keep UUID",
action='store_true', default=False)
args = ap.parse_args()
return args.search, args.module, args.uuid
def run_process(params):
process = subprocess.Popen(params, stdout=subprocess.PIPE)
stdout, _ = process.communicate()
return stdout
def adjust_yml(yml, keep_uuid):
loader = ruamel.yaml.RoundTripLoader
config = ruamel.yaml.load(yml, loader, preserve_quotes=True)
remove_core_config_hash(config)
if not keep_uuid:
remove_uuid(config)
dumper = Dumper = ruamel.yaml.RoundTripDumper
return ruamel.yaml.dump(config, Dumper=dumper, indent=2, block_seq_indent=2)
def remove_core_config_hash(config):
if '_core' in config:
if 'default_config_hash' in config['_core']:
config['_core'].pop('default_config_hash')
# Also remove '_core' node if empty
if not config['_core']:
config.pop('_core')
def remove_uuid(config):
if 'uuid' in config:
config.pop('uuid')
if __name__ == "__main__":
main()