การส่งออกฟิลด์สำหรับประเภทเนื้อหา


11

คุณสมบัติการส่งออกการกำหนดค่าของ Drupal 8 ดูเหมือนจะเป็นคุณสมบัติที่มีประโยชน์มาก อย่างไรก็ตามฉันไม่แน่ใจว่าฉันเข้าใจการทำงานของมันอย่างไร

ตัวอย่างเช่นหากฉันทำการส่งออกครั้งเดียวให้เลือก "ประเภทเนื้อหา" จากนั้นเลือกประเภทเนื้อหาประเภทใดประเภทหนึ่งฉันคาดว่าการส่งออกจะมีคำอธิบายแบบเต็มของประเภทเนื้อหานั้น แต่ไม่มีข้อมูลใด ๆ เกี่ยวกับฟิลด์ในประเภทเนื้อหานั้น ดังนั้นหากคุณต้องการส่งออกการกำหนดค่าประเภทเนื้อหาสำหรับใช้ในเว็บไซต์อื่นดูเหมือนจะเป็นไปไม่ได้ที่จะทำเช่นนั้น

ฉันไม่แน่ใจว่าฉันเข้าใจการใช้งานการส่งออกแบบครั้งเดียวหากพวกเขาไม่มีข้อมูลที่จำเป็นทั้งหมดสำหรับเอนทิตี ฉันพลาดอะไรไปรึเปล่า?

คำตอบ:


10

UPDATE

คุณอาจลองใช้คำสั่งของ Drupal Console drupal config:export:content:type

มันอธิบายว่า:

คำสั่ง config: export: content: type ส่งออกประเภทเนื้อหาเฉพาะและฟิลด์เหล่านั้น


ประเภทเนื้อหาและฟิลด์เป็น 2 การกำหนดค่าแยกต่างหากใน Drupal 8 ดังนั้นหากคุณต้องการส่งออกประเภทเนื้อหาด้วยฟิลด์คุณจะต้องส่งออกการกำหนดค่าฟิลด์ทั้งหมดด้วย

โมดูลคุณสมบัติอาจมีประโยชน์สำหรับการจัดกลุ่มการกำหนดค่ามันยังไม่เสถียรฉันยังไม่ได้ลอง แต่ฉันคิดว่ามันน่าลอง


1
ขอบคุณสำหรับคำตอบ. ฉันเดาว่าฉันประหลาดใจที่การส่งออกประเภทเนื้อหาไม่มีข้อมูล เกี่ยวกับฟิลด์เลยดังนั้นหากคุณต้องการทำอย่างเดียวคุณต้องส่งออกแต่ละฟิลด์ด้วยตนเอง
James

ฉันคิดว่ามันใช้งานได้เพราะถ้าคุณเปลี่ยนการตั้งค่าสำหรับ 1 ฟิลด์คุณจำเป็นต้องอัปเดตymlไฟล์1 ไฟล์เฉพาะสำหรับฟิลด์นั้นไม่ใช่การกำหนดค่าประเภทเนื้อหาทั้งหมด ดังนั้นจึงมีความเสี่ยงน้อยกว่าของความขัดแย้งและให้ความยืดหยุ่นมากขึ้น
otarza

0

ฉันได้เขียนสคริปต์หลาม (ด้านล่าง) ซึ่งการส่งออกเป็นกลุ่มของรายการค่าdrushใช้ มันอาจมีประโยชน์ในกรณีของคุณ (ในกรณีของฉัน) การใช้งาน:

export_config_group.py -s something -m foobar

รันนี้drush config-listได้รับรายการทั้งหมดที่มีชื่อมีคำว่าแล้วบันทึกไว้ในsomethingmodules/custom/foobar/config/install

สคริปต์ยังปรับ yml ดังต่อไปนี้:

  • ลบdefault_config_hashรายการเมื่อมีอยู่
  • ลบuuidรายการเมื่อมีอยู่

สคริปต์ขึ้นอยู่กับruamel.yamlเพื่อโหลดและดัมพ์การกำหนดค่า ตรวจสอบให้แน่ใจว่าpip installมันล่วงหน้า

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()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.