Xuất các trường cho loại nội dung


11

Tính năng xuất cấu hình của Drupal 8 dường như là một tính năng rất hữu ích. Tuy nhiên, tôi không chắc là tôi hoàn toàn hiểu cách thức hoạt động của nó.

Ví dụ: nếu tôi thực hiện một lần xuất, chọn "Loại nội dung" rồi chọn một trong các loại nội dung của mình, tôi sẽ mong rằng xuất đó có chứa mô tả đầy đủ về loại nội dung đó. Nhưng nó không chứa bất kỳ thông tin nào về các trường trong loại nội dung đó. Vì vậy, nếu bạn muốn xuất cấu hình loại nội dung để sử dụng trên một trang web khác, dường như không thể làm điều đó.

Tôi không chắc chắn tôi hiểu việc sử dụng để thực hiện Xuất khẩu đơn lẻ nếu chúng không chứa tất cả dữ liệu cần thiết cho một thực thể. Tui bỏ lỡ điều gì vậy?

Câu trả lời:


10

CẬP NHẬT

Bạn cũng có thể thử lệnh của Drupal Console drupal config:export:content:type .

Đó là mô tả nói:

Cấu hình: export: content: type lệnh Xuất một loại nội dung cụ thể và các trường của chúng.


Các loại nội dung và Trường là 2 cấu hình riêng biệt trong Drupal 8, vì vậy nếu bạn muốn xuất loại nội dung với các trường, bạn cũng phải xuất tất cả các cấu hình trường của nó.

Mô-đun tính năng có thể hữu ích cho việc nhóm các cấu hình, nó chưa ổn định, tôi chưa thử nhưng tôi nghĩ nó có thể đáng để thử.


1
Cảm ơn câu trả lời. Tôi đoán tôi ngạc nhiên khi xuất nội dung kiểu không chứa thông tin. về tất cả các trường, vì vậy nếu bạn muốn làm điều đó một cách đơn lẻ, bạn phải xuất từng trường theo cách thủ công.
James

Tôi nghĩ điều này hoạt động như vậy bởi vì nếu bạn thay đổi cài đặt cho 1 trường, bạn cần cập nhật 1 ymltệp cụ thể cho trường đó, chứ không phải toàn bộ cấu hình loại nội dung. Vì vậy, có ít nguy cơ xung đột và cho phép linh hoạt hơn.
otarza

0

Tôi đã viết một tập lệnh Python (bên dưới) để xuất một nhóm các mục cấu hình bằng cách sử dụng drush. Nó có thể hữu ích trong trường hợp của bạn (nó đã có trong trường hợp của tôi). Sử dụng:

export_config_group.py -s something -m foobar

Điều này thực thi drush config-list, lấy tất cả các mục có tên chứa thuật ngữ something, sau đó lưu chúng vào modules/custom/foobar/config/install.

Kịch bản cũng điều chỉnh yml như sau:

  • loại bỏ các default_config_hashmục khi nó tồn tại;
  • loại bỏ các uuidmục khi nó tồn tại.

Kịch bản phụ thuộc vào ruamel.yaml để tải và kết xuất cấu hình. Hãy chắc chắn rằng bạn pip installtrước.

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()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.