컨텐츠 유형을위한 필드 내보내기


11

Drupal 8의 구성 내보내기 기능은 매우 유용한 기능인 것 같습니다. 그러나 그것이 어떻게 작동하는지 완전히 이해하지 못했습니다.

예를 들어, 단일 내보내기를 수행하는 경우 "컨텐츠 유형"을 선택한 다음 내 컨텐츠 유형 중 하나를 선택하면 해당 익스포트에 해당 컨텐츠 유형에 대한 전체 설명이 포함될 것으로 예상됩니다. 그러나 해당 컨텐츠 유형의 필드에 대한 정보는 포함되어 있지 않습니다. 따라서 다른 사이트에서 사용하기 위해 컨텐츠 유형 구성을 내보내려면 그렇게 할 수 없습니다.

엔티티에 필요한 모든 데이터가 포함되어 있지 않은 경우 단일 내보내기를 수행하는 방법을 이해하고 있는지 잘 모르겠습니다. 뭔가 빠졌습니까?

답변:


10

최신 정보

Drupal Console drupal config:export:content:type 명령을 시도 할 수도 있습니다 .

설명은 다음과 같습니다.

config : export : content : type 명령 특정 컨텐츠 유형 및 해당 필드를 내 보냅니다.


컨텐츠 유형과 필드는 Drupal 8에서 2 개의 개별 구성이므로, 컨텐츠 유형을 필드와 함께 내보내려면 모든 필드 구성도 내 보내야합니다.

기능 모듈은 구성을 그룹화하는 데 도움이 될 수 있지만 아직 안정적이지는 않지만 시도하지는 않았지만 시도해 볼 가치가 있다고 생각합니다.


1
답변 해주셔서 감사합니다. 콘텐츠 유형 내보내기에 정보가 없다는 것에 놀랐습니다. 필드에 대한 정보가 필요하므로 개별적으로 원하는 경우 각 필드를 수동으로 내 보내야합니다.
James

1 필드의 설정을 변경하면 yml전체 내용 유형 구성이 아닌 해당 필드에 대해 1 개의 파일 을 업데이트해야하기 때문에 이것이 효과가 있다고 생각 합니다. 따라서 충돌의 위험이 적고 유연성이 향상됩니다.
otarza

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.