показать панель инструментов блока программно гутенберг

#block #toolbar #wordpress-gutenberg

Вопрос:

Я создаю блок с компонентом InnerBlocks. Если содержимое не добавлено во внутренние блоки (и даже с содержимым на самом деле), очень трудно всплывать на панели инструментов блоков .Я хотел бы добавить кнопку с иконкой в верхнем углу, которая покажет плавающую панель инструментов блоков. Как я могу указать, чтобы панель инструментов. block-editor-block-contextual-отображалась? Я не вижу в инспекторе никакого метода .wp-блока, который бы это делал, и документации по элементам управления блоками: Панели инструментов блоков и боковой панели настроек https://developer.wordpress.организация/редактор блоков/инструкции/учебник по блокам/элементы управления блоками-панель инструментов и боковая панель/ довольно просты, Большое спасибо

Ответ №1:

Вы можете использовать useSelect() , чтобы определить, присутствуют ли в компоненте какие-либо блоки InnerBlocks :

 import { useSelect } from '@wordpress/data';

const hasInnerBlocks = useSelect((select) => (
    select('core/block-editor').getBlock(clientId).innerBlocks.length > 0
), [clientId]);
 

Затем вы можете использовать hasInnerBlocks для условного отображения всего, что вы хотите, в edit функции:

 { !!hasInnerBlocks amp;amp; (
    <BlockControls group="block">
        <ToolbarGroup
            // Toolbar group settings here
        />
    </BlockControls>

) }
 

Комментарии:

1. Большое вам спасибо за быстрый ответ! Я попробую это сделать! Как вы находите эту документацию?

2. Это не совсем то, что я хотел знать. Что мне нужно, чтобы он показывал элементы управления блоками, когда я нажимаю на блок. Мой блок с внутренними блоками не показывает его, когда я нажимаю на него, мне нужно показать, что: raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/assets/…

3. Похоже, у вас выбран дочерний блок. BlockControls являются контекстными, в зависимости от того, какой блок вы выбрали. Это включает InnerBlocks в себя . Если вы выберете родительский блок, он должен отображать BlockControls .

4. Да, но когда я нажимаю на родительский блок, он не показывает элементы управления блоками. Я добавлю свой код на github и поделюсь им здесь…

5. Вот мой код: github.com/GregoireSailland/un-block-collection