it-swarm.com.de

Felder für den Inhaltstyp exportieren

Die Konfigurationsexportfunktion von Drupal 8 scheint eine sehr nützliche Funktion zu sein. Ich bin mir jedoch nicht sicher, ob ich die Funktionsweise vollständig verstehe.

Wenn ich beispielsweise einen einzelnen Export durchführe, "Inhaltstyp" und dann einen meiner Inhaltstypen auswähle, würde ich erwarten, dass dieser Export eine vollständige Beschreibung dieses Inhaltstyps enthält. Es enthält jedoch keine Informationen zu den Feldern in diesem Inhaltstyp. Wenn Sie also eine Konfiguration des Inhaltstyps zur Verwendung auf einer anderen Site exportieren möchten, scheint dies nicht möglich zu sein.

Ich bin mir nicht sicher, ob ich die Verwendung von Einzelexporten verstehe, wenn sie nicht alle erforderlichen Daten für eine Entität enthalten. Vermisse ich etwas

11
James

[~ # ~] Update [~ # ~]

Sie können auch versuchen Drupal Console'sdrupal config:export:content:type Befehl.

Die Beschreibung lautet:

Der Befehl config: export: content: type Exportiert einen bestimmten Inhaltstyp und seine Felder.


Inhaltstypen und Felder sind zwei separate Konfigurationen in Drupal 8). Wenn Sie also Inhaltstypen mit Feldern exportieren möchten, müssen Sie auch alle Feldkonfigurationen exportieren.

Features Modul kann hilfreich sein, um Konfigurationen zu gruppieren. Es ist noch nicht stabil. Ich habe es noch nicht ausprobiert, aber ich denke, es könnte sich lohnen, es auszuprobieren.

10
otarza

Ich habe ein Python Skript (unten) geschrieben, das eine Gruppe von Konfigurationselementen mit drush exportiert. Es kann in Ihrem Fall nützlich sein (es war in meinem Fall). Verwendungszweck:

export_config_group.py -s something -m foobar

Dies führt drush config-list Aus, ruft alle Elemente ab, deren Name den Begriff something enthält, und speichert sie dann in modules/custom/foobar/config/install.

Das Skript passt die yml auch wie folgt an:

  • entfernt den Eintrag default_config_hash, falls vorhanden;
  • entfernt den Eintrag uuid, falls vorhanden.

Das Skript hängt von ruamel.yaml ab, um die Konfiguration zu laden und zu sichern. Stellen Sie sicher, dass Sie pip install Im Voraus.

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