Gutenberg: Mevcut bloğun InnerBlocks içinde olup olmadığını bilmenin bir yolu var mı?


11

Bu yüzden Wordpress Gutenberg'de iç içe bloklar kullanıyorum. Önyükleme kabı sınıfı uygulayan öğelerime bir sarıcı uyguluyorum. Açıkçası bunu sadece en dıştaki bloklarda, iç içe bir bloğun içindeki bloklarda değil.

Geçerli bloğun InnerBlocksbir ana bloğun Tanımı içinde olup olmadığını bilmenin bir yolu var mı ? Şu anda blocks.getSaveElementFiltre içine sarıcı uyguluyorum .

Bunu yapmanın daha iyi bir yolu var mı?

Bağlam için: Önceki gutenberg versiyonlarında bunu başarmak için düzen niteliği vardı, ancak o zamandan beri kaldırıldı. Sürüm 3.9.0 kullanıyorum.

Bu benim sarma işlevinin kısaltılmış bir sürümüdür:

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

Hiç öğrendin mi?
Matthew Brown aka Lord Matt

Yanıtlar:


3

getBlockHierarchyRootClientIdbloğun clientId ile çağırabilirsiniz getBlockHierarchyRootClientId, geçerli blok innerBlocks içindeyse üst blok kimliğini döndürür ve eğer kökse aynı kimliği döndürür

buna böyle diyebilirsin

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

ayrıca, kodunuzda kullanabileceğiniz bir yardımcı işlev tanımlayabilirsiniz

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

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


Bence sorun henüz blocks.getSaveElementçalıştırılmadığı zaman clientIdhenüz filtre içinden mümkün değil gibi görünüyor. Belki başka bir şekilde çalışmayı deneyerek bir çözüm elde edilebilir.
Alvaro

Kullanabileceğiniz editor.blockListBlockbloğunun içinde bir çek çalıştırmak ve bir sınıf ya da bir şey atamak
N. Seghir
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.