Skip to content

Defining Settings and Blocks ​

To make a section configurable in the Visual Editor, you need to define its settings and (optionally) repeatable blocks.

Settings Schema ​

Define settings in the settings() method. These fields appear in the section's configuration panel in the editor.

php
use BagistoPlus\Visual\Settings\Color;
use BagistoPlus\Visual\Settings\Link;
use BagistoPlus\Visual\Settings\Text;

public static function settings(): array
{
    return [
        Text::make('text', 'Text')->default('Free shipping on all orders'),
        Link::make('link', 'Call to Action'),
        Color::make('background_color', 'Background')->default('#facc15'),
        Color::make('text_color', 'Text Color')->default('#000000'),
    ];
}

→ Read more about Settings and supported setting types

Blocks Schema ​

Blocks allow merchants to add repeatable content structures like slides, features, or testimonials.

Define blocks using the Block class:

php
use BagistoPlus\Visual\Sections\Block;
use BagistoPlus\Visual\Settings\Text;

Block::make('announcement')
    ->settings([
        Text::make('text', 'Message')->default('Extended returns until Jan 31'),
    ])

Parameters ​

  • type - (string) — Internal identifier (e.g. announcement, feature)

  • name — (optional) — Display name shown in the editor UI.

    If omitted, it defaults to the title-cased version of the type (testimonial → Testimonial)

Configuration ​

  • limit(int) — Max number of blocks of this type (default: 16)
  • settings(array) — Setting definitions, just like for section settings

You can define multiple block types if needed.

Default Data ​

Use the $default property to define the initial state of the section when added.

php
protected static array $default = [
    'settings' => [
        'text' => 'Welcome to our store',
        'background_color' => '#facc15',
        'text_color' => '#000000',
    ],
    'blocks' => [
        ['type' => 'announcement', 'text' => 'Extended returns until Jan 31'],
        ['type' => 'announcement', 'text' => 'Free shipping on orders over $50'],
    ],
];

This ensures the section is immediately functional and visually populated.


Next: Writing section view

Released under the MIT License.