Esportazione di campi per tipo di contenuto


11

La funzione di esportazione della configurazione di Drupal 8 sembrerebbe essere una funzione molto utile. Tuttavia, non sono sicuro di aver capito completamente come funziona.

Ad esempio, se eseguo una singola esportazione, scelgo "Tipo di contenuto", quindi seleziono uno dei miei tipi di contenuto, mi aspetto che l'esportazione contenga una descrizione completa di quel tipo di contenuto. Ma non contiene alcuna informazione sui campi in quel tipo di contenuto. Pertanto, se si desidera esportare una configurazione del tipo di contenuto da utilizzare su un altro sito, non sembra possibile farlo.

Non sono sicuro di comprendere l'uso dell'essere fare esportazioni singole se non contengono tutti i dati richiesti per un'entità. Mi sto perdendo qualcosa?

Risposte:


10

AGGIORNARE

Puoi anche provare il drupal config:export:content:type comando di Drupal Console .

La sua descrizione dice:

Il comando config: export: content: type Esporta un tipo di contenuto specifico e i relativi campi.


I tipi di contenuto e i campi sono 2 configurazioni separate in Drupal 8, quindi se vuoi esportare il tipo di contenuto con i campi devi esportare anche tutte le sue configurazioni di campi.

Il modulo caratteristiche potrebbe essere utile per raggruppare le configurazioni, non è ancora stabile, non l'ho provato ma penso che valga la pena provare.


1
Grazie per la risposta. Immagino di essere sorpreso che l'esportazione del tipo di contenuto non contenga informazioni. sui campi, quindi se volessi farlo singolarmente dovresti esportare ogni campo manualmente.
James,

Penso che funzioni così perché se modifichi le impostazioni per 1 campo devi aggiornare 1 ymlfile specifico per quel campo, non l'intera configurazione del tipo di contenuto. Quindi c'è meno rischio di conflitti e offre maggiore flessibilità.
otarza,

0

Ho scritto uno script Python (sotto) che esporta un gruppo di elementi di configurazione usando drush. Potrebbe essere utile nel tuo caso (è stato nel mio caso). Uso:

export_config_group.py -s something -m foobar

Questo viene eseguito drush config-list, ottiene tutti gli elementi il ​​cui nome contiene il termine something, quindi li salva in modules/custom/foobar/config/install.

Lo script regola inoltre l'YML come segue:

  • rimuove la default_config_hashvoce quando esiste;
  • rimuove la uuidvoce quando esiste.

Lo script dipende da ruamel.yaml per caricare e scaricare la configurazione. Assicurati di pip installfarlo in anticipo.

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()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.