सामग्री प्रकार के लिए निर्यात क्षेत्र


11

Drupal 8 की विन्यास निर्यात सुविधा एक बहुत ही उपयोगी सुविधा प्रतीत होगी। हालांकि, मुझे यकीन नहीं है कि मैं पूरी तरह से समझता हूं कि यह कैसे काम करता है।

उदाहरण के लिए, यदि मैं एकल निर्यात करता हूं, तो "सामग्री प्रकार" चुनें, फिर मेरी सामग्री प्रकारों में से एक का चयन करें, मैं उम्मीद करूंगा कि निर्यात में उस सामग्री प्रकार का पूरा विवरण होगा। लेकिन इसमें उस सामग्री प्रकार के फ़ील्ड के बारे में कोई जानकारी नहीं है। इसलिए यदि आप किसी अन्य साइट पर उपयोग के लिए सामग्री प्रकार के कॉन्फ़िगरेशन को निर्यात करना चाहते हैं, तो ऐसा करना संभव नहीं लगता है।

मुझे यकीन नहीं है कि मैं एकल निर्यात करने के उपयोग को समझता हूं यदि वे एक इकाई के लिए सभी आवश्यक डेटा नहीं रखते हैं। क्या मैं कुछ भूल रहा हूँ?

जवाबों:


10

अपडेट करें

आप Drupal Console की drupal config:export:content:type कमांड भी आज़मा सकते हैं ।

यह वर्णन कहता है:

कॉन्फ़िगरेशन: निर्यात: सामग्री: प्रकार कमांड एक विशिष्ट सामग्री प्रकार और उनके क्षेत्र निर्यात करें।


Drupal 8 में सामग्री प्रकार और फ़ील्ड 2 अलग कॉन्फ़िगरेशन हैं, इसलिए यदि आप फ़ील्ड के साथ सामग्री प्रकार निर्यात करना चाहते हैं, तो आपको सभी फ़ील्ड कॉन्फ़िगरेशन भी निर्यात करना होगा।

फीचर्स मॉड्यूल ग्रुपिंग कॉन्फ़िगरेशन के लिए मददगार हो सकता है, यह अभी तक स्थिर नहीं है, मैंने इसे आजमाया नहीं है लेकिन मुझे लगता है कि यह कोशिश करने लायक हो सकता है।


1
जवाब के लिए धन्यवाद। मुझे लगता है कि मुझे आश्चर्य है कि सामग्री प्रकार के निर्यात में कोई जानकारी नहीं है। सभी क्षेत्रों के बारे में, इसलिए यदि आप इसे अकेले करना चाहते हैं तो आपको प्रत्येक क्षेत्र को मैन्युअल रूप से निर्यात करना होगा।
जेम्स

मुझे लगता है कि यह इस तरह काम करता है क्योंकि यदि आप 1 फ़ील्ड के लिए सेटिंग्स बदलते हैं, तो आपको ymlउस फ़ील्ड के लिए 1 फ़ाइल विशिष्ट अपडेट करने की आवश्यकता है , न कि संपूर्ण सामग्री प्रकार कॉन्फ़िगरेशन। इसलिए संघर्षों का जोखिम कम है और अधिक लचीलापन देता है।
ओटर्जा

0

मैंने एक पायथन स्क्रिप्ट (नीचे) लिखी है जो कॉन्फ़िगरेशन आइटमों के एक समूह का उपयोग करके निर्यात करता हैdrush । यह आपके मामले में उपयोगी हो सकता है (यह मेरे मामले में रहा है)। उपयोग:

export_config_group.py -s something -m foobar

यह निष्पादित करता है drush config-list, उन सभी वस्तुओं को प्राप्त करता है जिनके नाम में शब्द होता है something, फिर उन्हें बचाता है modules/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()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.