Eksportowanie pól dla typu zawartości


11

Funkcja eksportu konfiguracji Drupala 8 wydaje się być bardzo przydatną funkcją. Nie jestem jednak pewien, czy całkowicie rozumiem, jak to działa.

Na przykład, jeśli dokonam pojedynczego eksportu, wybierz „Typ zawartości”, a następnie wybierz jeden z moich typów zawartości, oczekiwałbym, że ten eksport będzie zawierał pełny opis tego typu zawartości. Ale nie zawiera żadnych informacji o polach tego typu treści. Jeśli więc chcesz wyeksportować konfigurację typu zawartości do użycia w innej witrynie, nie wydaje się to możliwe.

Nie jestem pewien, czy rozumiem, jak to jest robić Pojedynczy eksport, jeśli nie zawierają wszystkich wymaganych danych dla jednostki. Czy coś brakuje?

Odpowiedzi:


10

AKTUALIZACJA

Możesz także wypróbować polecenie Drupal Console drupal config:export:content:type .

Jego opis mówi:

Polecenie config: export: content: type Eksportuj określony typ zawartości i ich pola.


Typy zawartości i pola to 2 osobne konfiguracje w Drupal 8, więc jeśli chcesz wyeksportować typ zawartości z polami, musisz również wyeksportować wszystkie konfiguracje pól.

Moduł funkcji może być pomocny w grupowaniu konfiguracji, nie jest jeszcze stabilny, nie próbowałem go, ale myślę, że warto spróbować.


1
Dziękuję za odpowiedź. Myślę, że jestem zaskoczony, że eksport typu zawartości nie zawiera żadnych informacji. o polach, więc jeśli chcesz to zrobić pojedynczo, musisz wyeksportować każde pole ręcznie.
James

Myślę, że tak to działa, ponieważ jeśli zmienisz ustawienia dla 1 pola, musisz zaktualizować 1 ymlplik specyficzny dla tego pola, a nie konfigurację całego typu zawartości. Dzięki temu ryzyko konfliktów jest mniejsze i daje większą elastyczność.
otarza

0

Napisałem skrypt Pythona (poniżej), który eksportuje grupę elementów konfiguracji za pomocą drush. Może być przydatny w twoim przypadku (tak było w moim przypadku). Stosowanie:

export_config_group.py -s something -m foobar

Wykonuje się drush config-list, pobiera wszystkie elementy, których nazwa zawiera termin something, a następnie zapisuje je modules/custom/foobar/config/install.

Skrypt dostosowuje również yml w następujący sposób:

  • usuwa default_config_hashwpis, jeśli istnieje;
  • usuwa uuidwpis, jeśli istnieje.

Skrypt zależy od ruamel.yaml, aby załadować i zrzucić konfigurację. Upewnij się, że pip installto z góry.

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()
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.