Templates

We provide some basic templates for you to extend which come pre-bundled with included components to save you some time.

Wrapper

Every one of our provided templates extends the maelstrom::layouts.wrapper.

This acts as a generic framework which includes various smaller components such as

  • Page Titles
  • Head Meta
  • Head Style Sheets
  • Header Navigation
  • Sidebar Navigation
  • Main Content
  • Footer Scripts

If you're extending this layout, you're able to populate the content area by pushing a section to the main slot e.g.

@extends('maelstrom::layouts.wrapper')

@section('main')
    
    <h1>My Content</h1>
    
    <p>Stuff stuff stuff...</p>
    
@endsection

Basic

If you want a little more guff we also provide a maelstrom::layouts.basic template, this also includes

  • Heading 1
  • Breadcrumbs (optional)
  • Loading Animation
  • Flash Messages
  • Validation Messages

This can be very useful for when building pages such as a dashboard, reports or any other page that needs to look similar to the indexes and forms.

This template extends the maelstrom::layouts.wrapper which uses the main slot, so because these do not waterfall we have another one for you called content.

For this template to work, you will need to pass a $title and an optional $breadcrumbs.

@extends('maelstrom::layouts.basic', [
    'breadcrumbs' => [
        [
            'label' => 'Reports',
            'url' => route('admin.reports'),
        ],
        [
            'label' => 'Weekly',
        ],
    ]
])

@section('title')
    Weekly Reports
@endsection

You must provide a title before the breadcrumbs will appear.

Index

We also provide a pre-loaded template maelstrom::layouts.index for the index method to display the listing of entries. This is what most Panels will be able to use.

This includes everything from maelstrom.layouts.basic plus:

  • A buttons slot to include your own buttons e.g. Create / Export etc
  • The content slot
  • A footer slot

If you do not provide a content slot then it will fallback to adding @include('maelstrom::components.table') which will look for a global $entries and $columns which can be set via $this->panel->setTableHeadings() and $this->panel->getEntries() (see more on the Panel API)

class PageController
{
    public function __construct()
    {
        $this->panel = maelstrom(Page::class)->setTableHeadings([[
             'label' => 'Name',
             'name' => 'name'
         ]])
    }
    
    public function index()
    {   
        return $this->panel->index('admin.pages-index');
        
        // or
        
        return view('admin.pages-index', [
            'entries' => $this->panel->getEntries(),
            'columns' => $this->panel->getTableHeadings(),
        ]);
    }
}
// admin/pages-index.blade.php
@extends('maelstrom::layouts.index')

@section('buttons')
    @include('maelstrom::buttons.button', [
        'url' => route('pages.create'),
        'label' => 'Create Page'
    ])
@endsection

Form

The form template is the most complicated as it will house all your fields, tabs, repeaters etc.

Again it's very similar to the maelstrom::layouts.basic however it has no default content

It does have some additional slots which can be used for some basic use cases.

  • form_before to display content before the form.
  • form_after to display content after the form.
  • footer to display content in the footer.

Once you've got your template extending the maelstrom::layouts.form template you will still need to use the content slot and pass in the form component.

@extends('maelstrom::layouts.form')

@section('content')

    @component('maelstrom::components.form', [
        'action' => $action, // route('pages.create')
        'method' => $method, // POST
    ])
    
        @include('maelstrom::inputs.text', [
            'name' => 'page_name',
            'label' => 'Page Name',
        ])
    
    @endcomponent

@endsection

As both $action and $method can change between create and update it's best to pass these down from the controller method.

Edit Profile

We also have a simple template for editing your account information maelstrom::templates.edit-account. You can read more about this in the documentation.