Control Panel Templates

The control panel is built using Twig templates, so extending it with new pages should feel familiar if you’ve worked with Twig on the front-end.

Plugins can define templates within the templates/ folder within their base source folder. Templates within there can be referenced using the plugin’s handle as the template path prefix.

For example if a plugin’s handle is foo and it has a templates/bar.twig template, that template could be accessed by going to /admin/foo/bar, or from Twig by including/extending foo/bar (or foo/bar.twig).

Modules can have templates too, but they will need to manually define a template root before they are accessible.

# Page Templates

At a minimum, page templates should extend Craft’s _layouts/cp layout template, set a title variable, and define a content block.

{% extends "_layouts/cp" %}
{% set title = "Page Title"|t('plugin-handle') %}

{% block content %}
    <p>Page content goes here</p>
{% endblock %}

The following blocks can also be defined, to customize other aspects of the page:

  • header – Used to output the page header, including the page title and other header elements.
  • pageTitle – Used to output the page title.
  • contextMenu – Used to output context menus beside the page title. (For example, the entry revision menu on Edit Entry pages.)
  • actionButton – Used to output the primary page action button. (For example, the Save button on Edit Entry pages.)
  • sidebar – Used to output the page sidebar contents.
  • details – Used to output the detail pane contents.