Twig Functions
Twig functions are called directly with any parameters being passed in via parenthesis.
array
Cast a value to array
{% set value = array(value) %}
(value cast to array)
array_diff
Computes the difference of arrays.
{% set diff = array_diff(array1, array2...) %}
(array containing all entries from array1 not in other arrays)
array_key_value
The array_key_value function allows you to add a key/value pair to an associate array
{% set my_array = {fruit: 'apple'} %}
{% set my_array = array_key_value('meat','steak', my_array) %}
{{ print_r(my_array)}}
[
"fruit" => "apple"
"meat" => "steak"
]
array_key_exists
Wrapper for PHP's array_key_exists function that returns whether or not a key exists in an associative array.
{% set my_array = {fruit: 'apple', meat: 'steak'} %}
{{ array_key_exists('meat', my_array) }}
true
array_intersect
The array_intersect function provides the intersection of two arrays or Grav collections.
{% set array_1 = {fruit: 'apple', meat: 'steak'} %}
{% set array_2 = {fish: 'tuna', meat: 'steak'} %}
{{ print_r(array_intersect(array_1, array_2)) }}
[
"meat" => "steak"
]
array_unique
Wrapper for PHP array_unique() that removes duplicates from an array.
{{ array_unique(['foo', 'bar', 'foo', 'baz']) }}
['foo', 'bar', 'baz']
authorize
Authorizes an authenticated user to see a resource. Accepts a single permission string or an array of permission strings.
{{ authorize(['admin.statistics', 'admin.super']) }}
true/false (depending on user permissions)
body_class
Takes an array of classes, and if they are not set on body_classes look to see if they are set in current theme configuration.
set body_classes = body_class(['header-fixed', 'header-animated', 'header-dark', 'header-transparent', 'sticky-footer'])
header-fixed header-animated header-dark
cron
Create a "Cron" object from cron syntax
{{ cron("3 * * * *").getNextRunDate()|date(config.date_format.default) }}
2024-01-15 14:03:00
dump
Takes a valid Twig variable and dumps it out into the Grav debugger panel. The debugger must be enabled to see the values in the messages tab.
{% do dump(page.header) %}
(outputs variable to debugger panel)
debug
Same as dump()
evaluate
The evaluate function can be used to evaluate a string as Twig:
{{ evaluate('grav.language.getLanguage') }}
en
evaluate_twig
Similar to evaluate, but will evaluate and process with Twig
{{ evaluate_twig('This is a twig variable: {% verbatim %}{{ foo }}{% endverbatim %}', {foo: 'bar'}) }}
This is a twig variable: bar
exif
Output the EXIF data from an image based on its filepath. This requires that media: auto_metadata_exif: true is set in system.yaml. For example, in a Twig-template:
{% set image = page.media['sample-image.jpg'] %}
{% set exif = exif(image.filepath, true) %}
{{ exif.MaxApertureValue }}
40/10
This would write the MaxApertureValue-value set in the camera, for example "40/10". You can always use {{ dump(exif) }} to show all the available data in the debugger.
get_cookie
Retrieve the value of a cookie with this function:
{{ get_cookie('your_cookie_key') }}
cookie_value
get_type
Gets the type of a variable:
{{ get_type(page) }}
Grav\Common\Page\Page
gist
Takes a Github Gist ID and creates appropriate Gist embed code
{{ gist('bc448ff158df4bc56217') }}
<script src="https://gist.github.com/bc448ff158df4bc56217.js"></script>
header_var
header_var($variable, $pages = null)
Returns page.header.<variable>.
Warning
NOTE: Deprecated since Grav 1.7. theme_var should be used.
Warning
The logic of finding the variable has changed, which might lead to unexptected results:
- If an array of lookup pages is provided as second parameter, only the first page will be used.
- If
<variable>is not defined in het header of the page, Grav will search for the variable in the tree of parents of the page. - If still not found, Grav will search for the variable in the config file of the theme
Given frontmatter of
---
title: Home
---
{{ header_var('title') }}
Home
http_response_code
If response_code is provided, then the previous status code will be returned. If response_code is not provided, then the current status code will be returned. Both of these values will default to a 200 status code if used in a web server environment.
{% do http_response_code(404) %}
(sets HTTP response code to 404)
isajaxrequest
the isajaxrequest() function can be used to check if HTTP_X_REQUESTED_WITH header option is set:
{{ isajaxrequest() }}
true/false
json_decode
You can decode JSON by simply applying this filter:
{{ json_decode('{"first_name": "Guido", "last_name":"Rossum"}') }}
[
"first_name" => "Guido"
"last_name" => "Rossum"
]
media_directory
Returns a media object for an arbitrary directory. Once obtained you can manipulate images in a similar fashion to pages.
{{ media_directory('theme://images')['some-image.jpg'].cropResize(200,200).html }}
<img src="/user/themes/mytheme/images/some-image.jpg" width="200" height="200">
nicefilesize
Output a file size in a human readable nice size format
{{ nicefilesize(612394) }}
598.04 KB
nicenumber
Output a number in a human readable nice number format
{{ nicenumber(12430) }}
12K
nicetime
Output a date in a human readable nice time format
{{ nicetime(page.date) }}
1 month ago
nonce_field
Generate a Grav security nonce field for a form with a required action:
{{ nonce_field('action') }}
<input type="hidden" name="nonce" value="abc123def456">
of_type
Checks the type of a variable to the param:
{{ of_type(page, 'string') }}
false
pathinfo
Parses a path into an array.
{% set parts = pathinfo('/www/htdocs/inc/lib.inc.php') %}
{{ print_r(parts) }}
[
"dirname" => "/www/htdocs/inc"
"basename" => "lib.inc.php"
"extension" => "php"
"filename" => "lib.inc"
]
print_r
Prints a variable in a readable format
{{ print_r(page.header) }}
[
"title" => "My Page"
"published" => true
]
random_string
Will generate a random string of the required number of characters. Particularly useful in creating a unique id or key.
{{ random_string(10) }}
aBc123XyZ9
unique_id
Generates a random string with configurable length, prefix and suffix. Unlike the built-in PHP uniqid() function and the random_string utils, this string will be generated truly unique and non-conflicting.
{{ unique_id(9) }}
{{ unique_id(11, { prefix: 'user_' }) }}
{{ unique_id(13, { suffix: '.json' }) }}
a1b2c3d4e
user_a1b2c3d4e5f
a1b2c3d4e5f6g.json
range
Generates an array containing a range of elements, optionally stepped
{{ range(25, 300, 50) }}
[25, 75, 125, 175, 225, 275]
read_file
Simple function to read a file based on a filepath and output it.
{{ read_file('plugins://admin/README.md')|markdown }}
<h1>Grav Standard Administration Panel Plugin</h1>
<p>This <strong>admin plugin</strong> for Grav...</p>
redirect_me
Redirects to a URL of your choosing
{% do redirect_me('http://google.com', 304) %}
(redirects to http://google.com with 304 status)
regex_filter
Performs a preg_grep on an array with a regex pattern
{{ regex_filter(['pasta', 'fish', 'steak', 'potatoes'], "/p.*/") }}
['pasta', 'potatoes']
regex_replace
A helpful wrapper for the PHP preg_replace() method, you can perform complex Regex replacements on text via this filter:
{{ regex_replace('The quick brown fox jumps over the lazy dog.', ['/quick/','/brown/','/fox/','/dog/'], ['slow','black','bear','turtle']) }}
The slow black bear jumps over the lazy turtle.
regex_match
A helpful wrapper for the PHP preg_match() method, you can perform complex regular expression match on text via this filter:
{{ regex_match('http://www.php.net/index.html', '@^(?:http://)?([^/]+)@i') }}
[
0 => "http://www.php.net"
1 => "www.php.net"
]
regex_split
A helpful wrapper for the PHP preg_split() method. Split string by a regular expression on text via this filter:
{{ regex_split('hypertext language, programming', '/\\s*,\\s*/u') }}
['hypertext language', 'programming']
repeat
Will repeat whatever is passed in a certain amount of times.
{{ repeat('blah ', 10) }}
blah blah blah blah blah blah blah blah blah blah
string
Returns a string from a value. If the value is array, return it json encoded
{{ string(23) }}
{{ string(['test' => 'x']) }}
"23"
{"test":"x"}
svg_image
Returns the content of an SVG image and adds extra classes as needed. Provides the benefits of inline svg without having to paste the code directly on the page. Useful for reusable images such as social media icons.
{{ svg_image(path, classes, strip_style) }}
strip_style = remove the svg inline styling - useful for styling with css classes.
{{ svg_image('theme://images/something.svg', 'my-class-here mb-10', true) }}
<svg class="my-class-here mb-10" viewBox="0 0 24 24">...</svg>
theme_var
theme_var($variable, $default = null, $page = null)
Get a theme variable from the page's header, or, if not found, from its parent(s), the theme's config file, or the default value if provided:
{{ theme_var('grid-size') }}
1200
This will first try page.header.grid-size, if not set, it will traverse the tree of parents. If still not found, it will try theme.grid-size from the theme's configuration file.
It can optionally take a default value as fallback:
{{ theme_var('grid-size', 1024) }}
1024 (if not found elsewhere)
t
Translate a string, as the |t filter.
{{ t('SITE_NAME') }}
Site Name
ta
Functions the same way the |ta filter does.
tl
Translates a string in a specific language. For more details check out the multi-language documentation.
{{ tl('SIMPLE_TEXT', ['fr']) }}
Texte simple
url
Will create a URL and convert any PHP URL streams into a valid HTML resources. A default value can be passed in in case the URL cannot be resolved.
{{ url('theme://images/logo.png')|default('http://www.placehold.it/150x100/f4f4f4') }}
/user/themes/mytheme/images/logo.png
vardump
The vardump() function outputs the current variable to the screen (rather than in the debugger as with dump())
{% set my_array = {foo: 'bar', baz: 'qux'} %}
{{ vardump(my_array) }}
[
"foo" => "bar"
"baz" => "qux"
]
xss
Allow a manual check of a string for XSS vulnerabilities
{{ xss('this string contains a <script>alert("hello");</script> XSS vulnerability') }}
this string contains a XSS vulnerability
The xss() function removes the malicious script tag from the string.