Exportation de champs pour le type de contenu

11

La fonctionnalité d'exportation de configuration de Drupal 8 semble être une fonctionnalité très utile. Cependant, je ne suis pas sûr de bien comprendre comment cela fonctionne.

Par exemple, si je fais une seule exportation, choisissez "Type de contenu" puis sélectionnez l'un de mes types de contenu, je m'attendrais à ce que l'exportation contienne une description complète de ce type de contenu. Mais il ne contient aucune information sur les champs de ce type de contenu. Donc, si vous souhaitez exporter une configuration de type de contenu pour une utilisation sur un autre site, cela ne semble pas possible.

Je ne suis pas sûr de comprendre l'utilité de faire des exportations simples si elles ne contiennent pas toutes les données requises pour une entité. Suis-je en train de manquer quelque chose?

James
la source

Réponses:

10

MISE À JOUR

Vous pouvez également essayer la drupal config:export:content:type commande de la console Drupal .

Sa description dit:

La commande config: export: content: type Exporte un type de contenu spécifique et leurs champs.


Les types de contenu et les champs sont 2 configurations distinctes dans Drupal 8, donc si vous souhaitez exporter le type de contenu avec des champs, vous devez également exporter toutes ses configurations de champs.

Le module de fonctionnalités peut être utile pour regrouper les configurations, il n'est pas encore stable, je ne l'ai pas essayé mais je pense qu'il vaut la peine d'essayer.

otarza
la source
1
Merci d'avoir répondu. Je suppose que je suis surpris que l'exportation de type de contenu ne contienne aucune information. sur les champs du tout, donc si vous voulez le faire séparément, vous devrez exporter chaque champ manuellement.
James
Je pense que cela fonctionne comme ça parce que si vous modifiez les paramètres pour 1 champ, vous devez mettre à jour 1 ymlfichier spécifique pour ce champ, pas la configuration de type de contenu entier. Il y a donc moins de risques de conflits et donne plus de flexibilité.
otarza
0

J'ai écrit un script Python (ci-dessous) qui exporte un groupe d'éléments de configuration à l' aide drush. Cela peut être utile dans votre cas (ça l'a été dans mon cas). Usage:

export_config_group.py -s something -m foobar

Cela s'exécute drush config-list, obtient tous les éléments dont le nom contient le terme something, puis les enregistre modules/custom/foobar/config/install.

Le script ajuste également le yml comme suit:

  • supprime l' default_config_hashentrée lorsqu'elle existe;
  • supprime l' uuidentrée lorsqu'elle existe.

Le script dépend de ruamel.yaml pour charger et vider la configuration. Assurez-vous de l' pip installavoir à l'avance.

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
la source