如何使用__ExamentalLayout为内部块提供对齐控制和默认布局?

时间:2021-11-16 作者:Elizabeth

如本期(https://github.com/WordPress/gutenberg/issues/33374) 我希望自定义块的内部块具有默认的布局和对齐控件,如组块的布局切换,但已烘焙。

回答了,但我想不出代码:

您可以通过向内部块提供布局来实现这一点,也就是说,该功能目前仍处于实验阶段,您应该能够将{experimentalLayout={{{contentSize:\'800px\',wideSize:\'1000px\'}}}传递给您的内部块,您还可以将{experimentalLayout={{inherit:true}}传递给您的内部块,以及继承定义的任何布局。

我的代码

export default function Edit() {
    return (
        <div {...useBlockProps()}>
            <InnerBlocks />
        </div>
    );
}
这行不通

export default function Edit() {
    return (
        <div {...useBlockProps()}>
            <InnerBlocks __experimentalLayout ={ { inherit: true } } />
        </div>
    );
}
它是否在块中的支架中。json?

这个问题解释了我试图创建的自定义块。非常简单!但我需要innerblocks具有对齐控制,当您使用主题时,innerblocks上的对齐控制就会丢失。json。https://github.com/WordPress/gutenberg/issues/36465

更新了代码,我将其添加到块中。json,它为默认布局添加了切换,但innerblocks仍然没有完全/宽对齐控制。不知道该怎么做,但已经完成了一半。

    "supports": {
    "__experimentalLayout": {
      "contentSize": "800px",
      "wideSize": "1000px",
            "inherit": true
    }
    },
根据stokeman的回答更新了代码。json

{
    "apiVersion": 2,
    "name": "mbp/details",
    "version": "0.1.0",
    "title": "Details",
    "category": "design",
    "icon": "heart",
    "supports": {
        "align": ["full"],
        "__experimentalLayout": {
        "allowSwitching": false,
        "default": {
                "inherit": true
        }
}
    },
        "attributes": {
    "align": {
            "type": "string",
            "default": "full"
        }
    },
    "textdomain": "mobilebevpros",
    "editorScript": "file:../../../../build/details.js"
}
编辑。js公司

import { __ } from "@wordpress/i18n";
import {
    useBlockProps,
    useSetting,
    InnerBlocks,
} from "@wordpress/block-editor";

export default function Edit() {
    const defaultLayout = useSetting("layout") || {};
    return (
        <div {...useBlockProps()}>
            <InnerBlocks __experimentalLayout={defaultLayout} />
        </div>
    );
}

2 个回复
SO网友:stokesman

你很接近。在块中指定布局详细信息。json应该嵌套在"default" 所有物这样做将相应地显示布局面板,但还有更多内容。

如果需要块的默认布局,则无需添加contentSizewideSize. 下面是我推荐的布局配置(在json块中supports 属性):

        "__experimentalLayout": {
            "allowSwitching": false,
            "default": {
                "inherit": true
            }
        }
这将使块的侧栏/检查器中的布局面板简化为仅显示继承切换(默认情况下启用),而不显示大小输入。

即使是街区。json指定默认情况下布局应继承,需要手动检索默认布局并将其传递给编辑组件中的InnerBlocks:

import {
    useBlockProps, // already in use from example
    useSetting     // new bit
} from \'@wordpress/block-editor\';

export default function Edit() {
    const defaultLayout = useSetting( \'layout\' ) || {};
    return (
        <div {...useBlockProps()}>
            <InnerBlocks __experimentalLayout={ defaultLayout } />
        </div>
    );
}
除此之外,该块必须在服务器上注册,但我认为这已经完成了。

我不确定我是否会寻找替代解决方案,因为API的实验性质意味着它需要一些小心,以免在将来的网站更新中中断。

SO网友:stokesman

根据我对您的理解,我认为注册block variation 对于组块。它可以预设默认布局的填充和继承,并具有使其显示为自己的单独块的选项。此示例创建一个将显示在插入器中的;Dat节;并具有一些预设填充和自定义类:

wp.blocks.registerBlockVariation(
    \'core/group\',
    {
        name:\'dat-section\',
        title: \'Dat Section\',
        isActive: (blockAttributes, vAttributes) =>
            blockAttributes.className
                .includes(vAttributes.className),
        attributes: {
            className: \'dat-section\',
            layout: {
                inherit: true,
            },
            style:{
               spacing:{
                   padding: { top: \'25px\', bottom:\'55px\' }
               }
            }
        },
    }
);
还有更多的选择。您可以设置不同的icondescription 或指定innerBlocks 插入一些已嵌套的块。

相关推荐