সামগ্রী প্রকারের জন্য ক্ষেত্র রফতানি করা


11

ড্রুপাল 8 এর কনফিগারেশন রফতানি বৈশিষ্ট্যটি খুব কার্যকর বৈশিষ্ট্য বলে মনে হবে। তবে আমি নিশ্চিত না যে আমি কীভাবে এটি কাজ করে তা পুরোপুরি বুঝতে পারি।

উদাহরণস্বরূপ, আমি যদি একক রফতানি করি তবে "সামগ্রী প্রকার" চয়ন করুন তারপরে আমার সামগ্রীর ধরণের একটি নির্বাচন করুন, আমি প্রত্যাশা করব যে রফতানিতে সেই সামগ্রীর ধরণের পুরো বিবরণ থাকবে। তবে এতে সামগ্রীর ধরণের ক্ষেত্রগুলি সম্পর্কে কোনও তথ্য নেই। সুতরাং আপনি যদি অন্য কোনও সাইটে ব্যবহারের জন্য কোনও সামগ্রী ধরণের কনফিগারেশন রফতানি করতে চান তবে এটি করা সম্ভব বলে মনে হয় না।

আমি নিশ্চিত নই যে আমি যদি কোনও সত্তার জন্য প্রয়োজনীয় সমস্ত ডেটা না রাখি তবে একক রফতানি করার কাজটি আমি বুঝতে পেরেছি। আমি কিছু অনুপস্থিত করছি?

উত্তর:


10

হালনাগাদ

আপনি ড্রপাল কনসোলের drupal config:export:content:type কমান্ডটিও চেষ্টা করে দেখতে পারেন ।

এটি বিবরণ বলে:

কনফিগার: রফতানি: সামগ্রী: টাইপ কমান্ড একটি নির্দিষ্ট সামগ্রী প্রকার এবং তাদের ক্ষেত্রগুলি রফতানি করে।


সামগ্রীর ধরণ এবং ক্ষেত্রগুলি দ্রুপাল 8 এ 2 পৃথক কনফিগারেশন, সুতরাং আপনি যদি ক্ষেত্রের সাথে সামগ্রী প্রকার রফতানি করতে চান তবে আপনাকে এর সমস্ত ক্ষেত্র কনফিগারেশনও রফতানি করতে হবে।

বৈশিষ্ট্যগুলি মডিউলটি কনফিগারেশনগুলিকে গোষ্ঠীকরণের জন্য সহায়ক হতে পারে, এটি এখনও স্থিতিশীল নয়, আমি এটি চেষ্টা করি নি তবে আমি মনে করি এটি চেষ্টা করার মতো হতে পারে।


1
উত্তর করার জন্য ধন্যবাদ. আমার ধারণা আমি অবাক হয়েছি যে সামগ্রীর ধরণের রফতানিতে কোনও তথ্য নেই। ক্ষেত্রগুলি সম্পর্কে মোটামুটি, সুতরাং আপনি যদি এটি একা করতে চান তবে আপনাকে প্রতিটি ক্ষেত্র ম্যানুয়ালি রফতানি করতে হবে।
জেমস

আমি মনে করি এটি এর মতোই কাজ করে কারণ আপনি যদি 1 ক্ষেত্রের জন্য সেটিংস পরিবর্তন করেন তবে আপনাকে ymlসেই ক্ষেত্রের জন্য নির্দিষ্ট 1 টি ফাইল আপডেট করতে হবে , পুরো সামগ্রীর ধরণের কনফিগারেশন নয়। সুতরাং বিবাদগুলির ঝুঁকি কম এবং আরও নমনীয়তা দেয়।
otarza

0

আমি একটি পাইথন স্ক্রিপ্ট লিখেছি (নীচে) যা ব্যবহার করে কনফিগারেশন আইটেমগুলির একটি গ্রুপ রফতানি করে drush। এটি আপনার ক্ষেত্রে কার্যকর হতে পারে (এটি আমার ক্ষেত্রে হয়েছে)। ব্যবহার:

export_config_group.py -s something -m foobar

এটি কার্যকর করে drush config-list, সমস্ত আইটেম পায় যার নামে শব্দটি রয়েছে something, তারপরে সেগুলি সংরক্ষণ করে modules/custom/foobar/config/install

স্ক্রিপ্টটি নীচে yML সামঞ্জস্য করে:

  • default_config_hashএটি উপস্থিত থাকলে এন্ট্রি সরিয়ে দেয় ;
  • uuidএটি উপস্থিত থাকলে এন্ট্রি সরিয়ে দেয় ।

স্ক্রিপ্টটি কনফিগারেশনটি লোড এবং ডাম্প করতে রুমেল.আইএমএল এর উপর নির্ভর করে । আপনি 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.