Create Custom Theme Layout Components for Experience Builder
Create a custom theme layout to transform the appearance and overall structure of the pages in the Customer Service template.
A theme layout component is the top-level layout for the template pages in your site. Theme layout components are organized and applied to your pages through theme layouts. A theme layout component includes the common header and footer, and often includes navigation, search, and the user profile menu. In contrast, the content layout defines the content regions of your pages. The next image shows a two-column content layout.
A theme layout type categorizes the pages in your Experience Builder site that share the same theme layout.
When you create a custom theme layout component in the Developer Console, it appears in Experience Builder in the Settings | Theme area. Here you can assign it to new or existing theme layout types. Then you apply the theme layout type—and then the theme layout—in the page’s properties.
1. Add an Interface to Your Theme Layout Component
A theme layout component must implement the forceCommunity:themeLayout interface to appear in Experience Builder in the Settings | Theme area.
Explicitly declare {!v.body} in your code to ensure that your theme layout includes the content layout. Add {!v.body} wherever you want the page’s contents to appear within the theme layout.
You can add components to the regions in your markup or leave regions open for users to drag-and-drop components into. Attributes declared as Aura.Component[] and included in your markup are rendered as open regions in the theme layout that users can add components to.
In Customer Service, the Template Header consists of these locked regions:
search, which contains the Search Publisher component
profileMenu, which contains the User Profile Menu component
navBar, which contains the Navigation Menu component
To create a custom theme layout that reuses the existing components in the Template Header region, declare search, profileMenu, or navBar as the attribute name value, as appropriate. For example:
If you create a custom profile menu or a search component, declaring the attribute name value also lets users select the custom component when using your theme layout.
Mark your resources, such as a component, with access="global" to make the resource usable outside of your own org. For example, if you want a component to be usable in an installed package or by a Lightning App Builder user or a Experience Builder user in another org.
You can also create documentation for a component, event, or interface marked access="global". This documentation is automatically displayed in the Component Library of an org that uses or installs your package.
Note
If you want to use a new, customizable profile menu instead of a self-service profile menu, you must declare the themeHeaderProfileMenu attribute instead of profileMenu in the theme layout component. This only works in a B2B store or where an out-of-box theme has been applied.
Note
2. Add a Design Resource to Include Theme Properties
You can expose theme layout properties in Experience Builder by adding a design resource to your bundle.
This example adds two checkboxes to a theme layout called Small Header.