গুটেনবার্গ: ইনার ব্লকের ভিতরে বর্তমান ব্লক রয়েছে কিনা তা জানার কোনও উপায় আছে?


11

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

বর্তমান ব্লকটি InnerBlocksপ্যারেন্ট ব্লকের একটি ডেফিনিটনের ভিতরে আছে কিনা তা জানার কোনও উপায় আছে ? আমি বর্তমানে blocks.getSaveElementফিল্টারটির অভ্যন্তরে মোড়কটি প্রয়োগ করছি ।

এই কাজ করতে একটি ভাল উপায় আছে কি?

প্রসঙ্গে: পূর্ববর্তী গুটেনবার্গ সংস্করণগুলিতে এটি অর্জনের জন্য লেআউট বৈশিষ্ট্য ব্যবহৃত হত, তবে এটি সরিয়ে ফেলা হয়েছে। আমি সংস্করণ 3.9.0 ব্যবহার করছি।

এটি আমার মোড়ক ফাংশনের একটি সংক্ষিপ্ত সংস্করণ:

    namespace.saveElement = ( element, blockType, attributes ) => {
        const hasBootstrapWrapper = hasBlockSupport( blockType.name, 'bootstrapWrapper' );

        if (hasBlockSupport( blockType.name, 'anchor' )) {
            element.props.id = attributes.anchor;
        }
        if (hasBootstrapWrapper) {

            // HERE I NEED TO CHECK IF THE CURRENT ELEMENT IS INSIDE A INNERBLOCKS ELEMENT AND THEN APPLY DIFFERENT WRAPPER

            var setWrapperInnerClass = wrapperInnerClass;
            var setWrapperClass = wrapperClass;
            if (attributes.containerSize) {
                setWrapperInnerClass = wrapperInnerClass + ' ' + attributes.containerSize;
            }
            if (attributes.wrapperType) {
                setWrapperClass = wrapperClass + ' ' + attributes.wrapperType;
            }

            const setWrapperAnchor = (attributes.wrapperAnchor) ? attributes.wrapperAnchor : false;

            return (
                newEl('div', { key: wrapperClass, className: setWrapperClass, id: setWrapperAnchor},
                    newEl('div', { key: wrapperInnerClass, className: setWrapperInnerClass},
                        element
                    )
                )
            );
        } else {
            return element;
        }
    };

wp.hooks.addFilter('blocks.getSaveElement', 'namespace/gutenberg', namespace.saveElement);

আপনি কি কখনও খুঁজে পেয়েছেন?
ম্যাথিউ ব্রাউন ওরফে লর্ড ম্যাট

উত্তর:


3

আপনি getBlockHierarchyRootClientIdব্লকের ক্লায়েন্টআইডির সাথে কল করতে পারবেন , getBlockHierarchyRootClientIdবর্তমান ব্লকটি যদি অভ্যন্তরীণ ব্লকের অভ্যন্তরে থাকে তবে প্যারেন্ট ব্লক আইডিটি ফিরিয়ে দেবে এবং মূলটি থাকলে এটি একই আইডি ফিরে আসবে

আপনি এটি এভাবে কল করতে পারেন

wp.data.select( 'core/editor' ).getBlockHierarchyRootClientId( clientId );

অতিরিক্তভাবে, আপনি কোনও সহায়তা সহায়ক ফাংশন সংজ্ঞায়িত করতে পারেন যা আপনি আপনার কোডটিতে ব্যবহার করতে পারেন

const blockHasParent = ( clientId ) => clientId !== wp.data.select( 'core/editor' ).getBlockHierarchyRootClientId( clientId );

if ( blockHasParent( yourClientId ) { 
    ....
}

আমি মনে করি সমস্যাটি হ'ল সময়টি blocks.getSaveElementচালানোর জন্য clientIdএখনও কোনও বরাদ্দ দেওয়া হয়নি তাই দেখে মনে হচ্ছে ফিল্টারটির ভিতরে থেকে এটি সম্ভব নয়। অন্য কোনও উপায়ে আশেপাশের কাজের চেষ্টা করে কোনও সমাধান অর্জন করা যেতে পারে।
আলভারো

আপনি editor.blockListBlockব্লকের ভিতরে একটি চেক চালাতে এবং একটি ক্লাস বা কিছু বরাদ্দ করতে ব্যবহার করতে পারেন
এন সেঘির
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.