コンテンツタイプのフィールドのエクスポート


11

Drupal 8の構成エクスポート機能は非常に便利な機能のようです。しかし、それがどのように機能するかを完全に理解しているとは思えません。

たとえば、単一のエクスポートを行う場合は、[コンテンツタイプ]を選択し、コンテンツタイプの1つを選択すると、そのコンテンツタイプの完全な説明がエク​​スポートに含まれることが期待されます。ただし、そのコンテンツタイプのフィールドに関する情報は含まれていません。したがって、別のサイトで使用するためにコンテンツタイプの構成をエクスポートする場合、それを行うことはできないようです。

エンティティに必要なすべてのデータが含まれていない場合に、単一のエクスポートを行うことの使用法を理解しているとは思いません。何か不足していますか?

回答:


10

更新

Drupalコンソールの drupal config:export:content:typeコマンドを試すこともできます。

それの説明は言う:

config:export:content:typeコマンド特定のコンテンツタイプとそのフィールドをエクスポートします。


コンテンツタイプとフィールドは、Drupal 8では2つの個別の構成であるため、フィールドを含むコンテンツタイプをエクスポートする場合は、すべてのフィールド構成もエクスポートする必要があります。

機能モジュールは構成をグループ化するのに役立つかもしれませんが、まだ安定していません。まだ試していませんが、試す価値はあると思います。


1
答えてくれてありがとう。コンテンツタイプのエクスポートに情報が含まれていないことに驚いたと思います。フィールドについてですので、もしあなたが単独でそれをやりたいのなら、各フィールドを手動でエクスポートする必要があります。
ジェームズ

1つのフィールドの設定を変更する場合、ymlコンテンツタイプ全体の構成ではなく、そのフィールドに固有の1つのファイルを更新する必要があるため、これはそのように機能すると思います。したがって、競合のリスクが少なくなり、柔軟性が高まります。
otarza 2016

0

を使用して構成アイテムのグループをエクスポートする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()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.