我们如何才能将古腾堡中的列块模仿成一个列表呢?

时间:2021-07-21 作者:klewis

我们如何模仿古腾堡中的列块而不是列表元素?我希望我能提供一个例子,但我对这个例子的起点没有任何线索。

这是我最好的解释。。。而不是像这样生成依赖于自定义类逻辑的div元素的列。。。

<div class="wp-block-column block-editor-block-list__block wp-block block-core-columns block-editor-block-list__layout">
我只希望包装元素是<li> 对于每个内部块,具有单个父块<ul> 包裹整个自定义块。

我从哪里开始建造这样的东西?

是否可以复制由wp/wp-includes/columns/block.json 以及如何将其作为自定义块存储在插件中,以实现我上面描述的功能。

我的推理

对于我的客户项目,我们使用项目符号列表为不同的学生提供指导。许多项目符号列表重复相同的部分(即警告部分、信息部分、指南部分)。因此,与其一遍又一遍地写同样的东西,还不如把这些;警报“;在列表中,我们利用了;“可重复使用的块”;和;“块模式”;只需抓取这些警报,将其发布到我们的列表中。But the existing list block does not allow users to add inner blocks into their list items. 如果有一种方法让我们的开发人员能够生成包含内部块的列表,那将有助于解决这个问题。

问题是怎么做。

1 个回复
最合适的回答,由SO网友:Phil 整理而成

这很容易通过两个自定义块实现:(1)对于包装器<ul>...</ul> 元素和(2)另一个元素<li>...</li> 项目。每个人都会使用InnerBlocks 允许您在<li> 项目。

入门的基本示例:

import { __ } from \'@wordpress/i18n\';
import { registerBlockType } from \'@wordpress/blocks\';
import {
    useBlockProps,
    InnerBlocks,
    __experimentalUseInnerBlocksProps as useInnerBlocksProps,
} from \'@wordpress/block-editor\';

// List block
registerBlockType(\'pb/list\', {
    apiVersion: 2,

    title: __(\'List\', \'pb\'),

    category: \'text\',

    edit: (props) => {
        const blockProps = useBlockProps();

        const innerBlocksProps = useInnerBlocksProps(blockProps, {
            allowedBlocks: [\'pb/list-item\'],
        });

        return (
            <ul { ...innerBlocksProps } />
        );
    },

    save: () => {
        const blockProps = useBlockProps.save();

        return (
            <ul { ...blockProps }>
                <InnerBlocks.Content />
            </ul>
        );
    },
});

// List item block
registerBlockType(\'pb/list-item\', {
    apiVersion: 2,

    title: __(\'List Item\', \'pb\'),

    parent: [\'pb/list\'],

    category: \'text\',

    edit: (props) => {
        const blockProps = useBlockProps();

        const innerBlocksProps = useInnerBlocksProps(blockProps);

        return (
            <li { ...innerBlocksProps } />
        );
    },

    save: () => {
        const blockProps = useBlockProps.save();

        return (
            <li { ...blockProps }>
                <InnerBlocks.Content />
            </li>
        );
    },
});

相关推荐