Gutenberg: Có cách nào để biết liệu khối hiện tại có ở trong InsideBlocks không?


11

Vì vậy, tôi đang sử dụng các khối lồng nhau trong Wordpress Gutenberg. Tôi đang áp dụng một trình bao bọc trên các phần tử của tôi áp dụng lớp container bootstrap. Rõ ràng tôi chỉ muốn điều đó ở các khối ngoài cùng, không phải trên các khối bên trong một khối lồng nhau.

Có cách nào để biết khối hiện tại có nằm trong InnerBlocksDefiniton của khối cha không? Tôi hiện đang áp dụng trình bao bọc bên trong blocks.getSaveElementBộ lọc.

Có cách nào tốt hơn để làm điều này?

Đối với ngữ cảnh: Trong các phiên bản gutenberg trước đây từng có thuộc tính bố cục để đạt được điều đó, nhưng nó đã bị xóa. Tôi đang sử dụng Phiên bản 3.9.0.

Đây là phiên bản rút gọn của chức năng trình bao bọc của tôi:

    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);

Bạn đã bao giờ tìm hiểu?
Matthew Brown hay còn gọi là Lord Matt

Câu trả lời:


3

bạn có thể gọi getBlockHierarchyRootClientIdvới clientId của khối, getBlockHierarchyRootClientIdsẽ trả về id khối cha nếu khối hiện tại nằm trong InternalBlocks và sẽ trả về cùng id nếu nó là root

bạn có thể gọi nó như thế này

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

ngoài ra, bạn có thể định nghĩa một hàm trợ giúp mà bạn có thể sử dụng trong mã của mình

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

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

Tôi nghĩ vấn đề là tại thời điểm blocks.getSaveElementchạy chưa clientIdđược chỉ định nên có vẻ như không thể từ bên trong bộ lọc. Có lẽ một giải pháp có thể đạt được khi thử một công việc xung quanh theo một cách khác.
Alvaro

bạn có thể sử dụng editor.blockListBlockđể chạy một kiểm tra bên trong khối và chỉ định một lớp hoặc thứ gì đó
N. Seghir
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.