Exportando campos para o tipo de conteúdo

11

O recurso de exportação de configuração do Drupal 8 parece ser um recurso muito útil. No entanto, não tenho certeza de entender completamente como isso funciona.

Por exemplo, se eu fizer uma única exportação, escolha "Tipo de conteúdo" e, em seguida, selecione um dos meus tipos de conteúdo, espero que a exportação contenha uma descrição completa desse tipo de conteúdo. Mas não contém nenhuma informação sobre os campos nesse tipo de conteúdo. Portanto, se você deseja exportar uma configuração de tipo de conteúdo para uso em outro site, não parece possível fazer isso.

Não sei se entendi o uso de fazer exportações únicas se elas não contiverem todos os dados necessários para uma entidade. Estou esquecendo de algo?

James
fonte

Respostas:

10

ATUALIZAR

Você também pode tentar o drupal config:export:content:type comando do Drupal Console .

Sua descrição diz:

O comando config: export: content: type Exporte um tipo de conteúdo específico e seus campos.


Os tipos e campos de conteúdo são duas configurações separadas no Drupal 8, portanto, se você deseja exportar o tipo de conteúdo com campos, também é necessário exportar todas as configurações de campos.

O módulo de recursos pode ser útil para agrupar configurações, ainda não é estável, não tentei, mas acho que vale a pena tentar.

otarza
fonte
1
Obrigado pela resposta. Acho que estou surpreso que a exportação do tipo de conteúdo não contenha informações. sobre os campos, portanto, se você quiser fazer isso sozinho, precisará exportar cada campo manualmente.
James
Eu acho que isso funciona assim porque, se você alterar as configurações de um campo, precisará atualizar um ymlarquivo específico para esse campo, não a configuração do tipo de conteúdo inteiro. Portanto, há menos risco de conflitos e oferece mais flexibilidade.
Otarza 12/02/16
0

Eu escrevi um script Python (abaixo) que exporta um grupo de itens de configuração usando drush. Pode ser útil no seu caso (foi no meu caso). Uso:

export_config_group.py -s something -m foobar

Isso é executado drush config-list, obtém todos os itens cujo nome contém o termo somethinge os salva modules/custom/foobar/config/install.

O script também ajusta o yml da seguinte maneira:

  • remove a default_config_hashentrada quando existe;
  • remove a uuidentrada quando ela existe.

O script depende do ruamel.yaml para carregar e despejar a configuração. Certifique-se de que você pip installcom antecedência.

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()
turdus-merula
fonte