İçerik türü için alanları dışa aktarma


11

Drupal 8'in yapılandırma verme özelliği çok kullanışlı bir özellik gibi görünüyor. Ancak, nasıl çalıştığını tamamen anladığımdan emin değilim.

Örneğin, tek bir dışa aktarma yaparsam, "İçerik türü" nü seçip içerik türlerimden birini seçerseniz, dışa aktarmanın bu içerik türünün tam bir açıklamasını içermesini beklerim. Ancak bu içerik türündeki alanlar hakkında herhangi bir bilgi içermez. Dolayısıyla, içerik türü yapılandırmasını başka bir sitede kullanmak üzere dışa aktarmak istiyorsanız, bunu yapmak mümkün görünmemektedir.

Bir varlık için gerekli tüm verileri içermiyorlarsa, Tekli dışa aktarma işlemleri yapmanın kullanımını anladığımdan emin değilim. Bir şey mi kaçırıyorum?

Yanıtlar:


10

GÜNCELLEME

Ayrıca Drupal Console'un drupal config:export:content:type komutunu da deneyebilirsiniz .

Açıklamasına göre:

Config: export: content: type komutu Belirli bir içerik türünü ve alanlarını dışa aktarır.


İçerik türleri ve Alanlar, Drupal 8'de 2 ayrı yapılandırmadır, bu nedenle içerik türünü alanlarla dışa aktarmak istiyorsanız, tüm alan yapılandırmalarını da dışa aktarmanız gerekir.

Özellikler modülü yapılandırmaları gruplandırmak için yararlı olabilir, henüz kararlı değil, ben denemedim ama bence denemeye değer olabilir.


1
Cevap için teşekkürler. İçerik türü dışa aktarma işleminin bilgi içermediğini düşünüyorum. alanlar hakkında, bu yüzden tek tek yapmak istiyorsanız her alanı manuel olarak dışa aktarmanız gerekir.
James

Bunun böyle çalıştığını düşünüyorum, çünkü 1 alan için ayarları değiştirirseniz yml, tüm içerik türü yapılandırmasını değil, o alana özgü 1 dosyayı güncellemeniz gerekir . Dolayısıyla, daha az çatışma riski vardır ve daha fazla esneklik sağlar.
otarza

0

Bir grup yapılandırma öğesini kullanarak bir Python betiği (aşağıda) yazdım drush. Sizin durumunuzda yararlı olabilir (benim durumumda oldu). Kullanımı:

export_config_group.py -s something -m foobar

Bu, yürütülür drush config-list, adı terimi içeren tüm öğeleri alır ve somethingsonra bunları kaydeder modules/custom/foobar/config/install.

Komut dosyası ayrıca yml'yi aşağıdaki gibi ayarlar:

  • default_config_hashvarsa , girişi kaldırır ;
  • uuidvarsa , girişi kaldırır .

Komut dosyası , yapılandırmayı yüklemek ve boşaltmak için ruamel.yaml dosyasına bağlıdır . pip installÖnceden yaptığınızdan emin olun .

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()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.