Skip to content

Blocks

An Evolve block is a reusable component that can be added to a page or other resources. Blueprints define the structure of a block, while Blade or Livewire components define the frontend representation.

Blade views

Every blueprint has a corresponding Blade view that is used to render the block in the frontend. The block components are located in the theme/views/components/blocks.

INFO

Depending of your blueprint name, the Blade view is nested in a directory structure that matches the blueprint name. For example, a blueprint with the name cms.quote would have the Blade view located at theme/views/components/blocks/cms/quote.blade.php.

You can access the block instance in the blade view using the $block prop that is passed to the Blade component.

Accessing field data

To access field data, use the magic getter syntax by prefixing the field name with an underscore (_). For example, to access the title field, you can use $block->_title.

blade
@props(['block'])

<section id="{{ $block->anchor }}">
    <h3>{{ $block->_title }}</h3>
    <blockquote>
        {{ $block->_content }}
    </blockquote>
</section>

Relationships

If your block has a relationship field, you can access the related model(s) using a standard Eloquent relationship (without the underscore).

blade
@props(['block'])

<section id="{{ $block->anchor }}">
    <h3>{{ $block->_title }}</h3>
    <p>Author: {{ $block->author->name }}</p>
</section>

Rendering nested blocks

If your block allows nested blocks, you can access them with the visibleBlocks relation. This relation returns all published blocks that are nested inside the current block.

blade
@props(['block'])

<section id="{{ $block->anchor }}">
    <h3>{{ $block->_title }}</h3>

    @foreach ($block->visibleBlocks as $nestedBlock)
        <!-- Do something with the nested block -->
    @endforeach
</section>

If your block allows other top-level blocks to be nested inside, you probably want to render them using our <x-common.blocks> component instead of manually looping through the blocks.

blade
<x-common.blocks :blocks="$block->visibleBlocks" />