{% partial %}
Twig Tag
The {% partial %}
tag will parse a CMS partial and render the partial contents on the page. To display a partial called footer.htm, simply pass the name after the partial
tag quoted as a string.
{% partial "footer" %}
A partial inside a subdirectory can be rendered in the same way.
{% partial "sidebar/menu" %}
The Themes documentation has more details on subdirectory usage.
The partial name can also be a variable:
{% set tabName = "profile" %}
{% partial tabName %}
# Variables
You can pass variables to partials by specifying them after the partial name:
{% partial "blog-posts" posts=posts %}
You can also assign new variables for use in the partial:
{% partial "location" city="Vancouver" country="Canada" %}
Inside the partial, variables can be accessed like any other markup variable:
<p>Country: {{ country }}, city: {{ city }}.</p>
# Passing Markup as a Variable
It is possible to pass markup to a partial using the body
attribute.
{% partial "card" body %}
This is the card contents
{% endpartial %}
The contents are then available as the body
variable.
{{ body|raw }}
# Composable Partials
Composable partials are possible when combined with the {% placeholder %}
Twig tag. The following partial defines a header
and a body
section where HTML content can be added.
<div class="header">
{% placeholder header %}
</div>
<div class="body">
{{ body|raw }}
</div>
Next, you can include the {% put %}
tag inside the body
to compose the partial result with two HTML content sections.
{% partial "card" body %}
{% put header %}
<h2>This is the card header</h2>
{% endput %}
<p>This is the card contents</p>
{% endpartial %}
# Setting Partial Contents to a Twig Variable
In any template you can set the partial contents to a variable with the partial()
function. This lets you manipulate the output before display. Remember to use the |raw
filter to prevent output escaping.
{% set cardPartial = partial('my-cards/card') %}
{{ cardPartial|raw }}
You may also pass variables to the partial as the second argument.
{% set cardPartial = partial('my-cards/card', { foo: 'bar' }) %}
# Checking a Partial Exists
The hasPartial()
function can be used to check if a partial exists without rendering the contents, it will return true or false if the partial is found.
{% if hasPartial('my-cards/card') %}
{% partial 'my-cards/card' %}
{% else %}
<p>Card not found!</p>
{% endif %}