GitHub Star 1.6k

Layouts

Layouts are regular components that serve as the root of the component tree for pages. They don't have any specialized features - they are just components that wrap the page's content. For detailed information about components, see the Components documentation.

Specifying a Layout for a Page

Each page must specify which layout component to use. This can be done in one of the following ways.

Using the layout/1 macro to specify just the layout component:

layout MyApp.MainLayout

Using the layout/2 macro to specify the layout component and its props:

layout MyApp.MainLayout, page_title: "My Page", show_sidebar?: true

Using the layout/1 macro and setting props through the page's init/3 function:

layout MyApp.MainLayout

def init(_params, component, _server) do
  put_state(component, page_title: "My Page", show_sidebar?: true)
end

Layout Template

A layout template must include:

Basic Example

Here's a complete layout component implementation:

defmodule MyApp.MainLayout do
  use Hologram.Component

  prop :page_title, :string

  def template do
    ~HOLO"""
    <html>
      <head>
        <title>{@page_title}</title>
        <Hologram.UI.Runtime />
      </head>
      <body>
        <slot />
      </body>
    </html>
    """
  end
end

Component ID

The layout component is always assigned a component ID (cid) of "layout". This is important to remember when targeting actions or commands at the layout component.

Sponsored by
Curiosum
Main sponsor
Erlang Ecosystem Foundation
Milestone sponsor
Evo Store
Performance sponsor
Sruplex
Innovation partner
Previous
← Pages
Next
Events →