Skip to content

Using Sections in Templates ​

Once a section is defined, it can be used in a page template a layout.

Usage in JSON Templates ​

Fields ​

FieldDescription
sectionsMap of section instances keyed by a unique name
orderList of section keys (from sections) to control rendering order
typeSection slug (use a vendor prefix for package-defined ones)
settingsSection-level settings
blocksNamed blocks, each with a type and settings

Referencing a Section ​

Each section in the template is referenced using its slug:

php
protected static string $slug = 'announcement-bar';

If the section belongs to a theme package, you should use a namespace prefix:

yaml
type: awesome-theme::announcement-bar

This ensures the editor resolves the correct section, even when multiple packages define similar slugs.

Usage in Blade views ​

In addition to JSON templates, sections can also be embedded statically in Blade views using the <visual:section> component.

This renders the section in a fixed location on the page. These statically-included sections:

  • Cannot be reordered or removed via the Visual Editor
  • Can still have their settings and blocks edited
  • Are rendered at a fixed location in the layout

Syntax ​

blade
<visual:section name="section-slug" />

For theme-based sections, use a vendor-prefixed slug:

blade
<visual:section name="awesome-theme::footer" />

In your default.blade.php layout

blade
<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
<head>
    <title>Awesome Theme</title>
    @bagisto_vite(['resources/assets/css/app.css', 'resources/assets/js/app.js'], 'awesome-theme')
</head>
<body>

    <visual:section name="awesome-theme::header" />

    <main>
        @visual_layout_content
    </main>

    <visual:section name="awesome-theme::footer" />

</body>
</html>

Notes ​

  • A section can only be used statically once per page (layout + template combined)
  • This is ideal for layout-bound sections like headers, footers, sidebars, banners

Released under the MIT License.