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) %}

array_diff

Computes the difference of arrays.

{% set diff = array_diff(array1, array2...) %}

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)}}

outputs: 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) }}

outputs: 1

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)) }}

outputs: Array ( [meat] => steak )

array_unique

Wrapper for PHP array_unique() that removes duplicates from an array.

array_unique(['foo', 'bar', 'foo', 'baz']) Array ( [0] => foo [1] => bar [3] => 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'])

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'])

cron

Create a "Cron" object from cron syntax

cron("3 * * * *").getNextRunDate()|date(config.date_format.default)

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.

dump(page.header)

debug

Same as dump()

evaluate

The evaluate function can be used to evaluate a string as Twig:

evaluate('grav.language.getLanguage')

evaluate_twig

Similar to evaluate, but will evaluate and process with Twig

evaluate_twig('This is a twig variable: {{ foo }}', {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 }}

This would write the MaxApertureValue-value set in the camera, for example "40/10". You can always use {{ dump(exif)}} 5 to show all the available data in the debugger.

Retrieve the value of a cookie with this function:

get_cookie('your_cookie_key')

get_type

Gets the type of a variable:

get_type(page) object

gist

Takes a Github Gist ID and creates appropriate Gist embed code

gist('bc448ff158df4bc56217') <script src="https://gist.github.com/bc448ff158df4bc56217.js"></script>

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.

http_response_code(404)

isajaxrequest

the isajaxrequest() function can be used to check if HTTP_X_REQUESTED_WITH header option is set:

json_decode

You can decode JSON by simply applying this filter:

json_decode({"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

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) 12.43 k

nicetime

Output a date in a human readable nice time format

nicetime(page.date) 2 hours 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="0e7460d1e6f2d17014b66838cc8722ed" />

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) }}

outputs: Array ( [dirname] => /www/htdocs/inc [basename] => lib.inc.php [extension] => php [filename] => lib.inc )

Prints a variable in a readable format

print_r(page.header)

stdClass Object
(
    [title] => Twig Functions
    [body_classes] => twig__headers
    [page-toc] => Array
        (
            [active] => 1
            [start] => 3
            [depth] => 1
        )

    [process] => Array
        (
            [twig] => 1
        )

    [taxonomy] => Array
        (
            [category] => docs
        )

    [metadata] => Array
        (
            [description] => 
            [generator] => GravCMS
            [title] => Twig Functions
            [image] => https://webshot.getgrav.org/?url=aHR0cHM6Ly9sZWFybi5nZXRncmF2Lm9yZy8xNi90aGVtZXMvdHdpZy10YWdzLWZpbHRlcnMtZnVuY3Rpb25zL2Z1bmN0aW9ucw==
            [robots] => all
            [fb:app_id] => 
            [og:url] => https://learn.getgrav.org/16/themes/twig-tags-filters-functions/functions
            [og:type] => website
            [og:site_name] => Grav Documentation
            [og:title] => Twig Functions
            [og:description] => 
            [og:image] => https://webshot.getgrav.org/?url=aHR0cHM6Ly9sZWFybi5nZXRncmF2Lm9yZy8xNi90aGVtZXMvdHdpZy10YWdzLWZpbHRlcnMtZnVuY3Rpb25zL2Z1bmN0aW9ucw==
            [twitter:card] => summary_large_image
            [twitter:site] => 
            [twitter:title] => Twig Functions
            [twitter:description] => 
            [twitter:image] => https://webshot.getgrav.org/?url=aHR0cHM6Ly9sZWFybi5nZXRncmF2Lm9yZy8xNi90aGVtZXMvdHdpZy10YWdzLWZpbHRlcnMtZnVuY3Rpb25zL2Z1bmN0aW9ucw==
            [twitter:image:alt] => Twig Functions
        )

    [page-toc.merged] => Grav\Common\Data\Data Object
        (
            [gettersVariable:protected] => items
            [items:protected] => Array
                (
                    [enabled] => 1
                    [active] => 1
                    [start] => 3
                    [depth] => 1
                )

            [blueprints:protected] => 
            [storage:protected] => 
            [missingValuesAsNull:Grav\Common\Data\Data:private] => 
            [keepEmptyValues:Grav\Common\Data\Data:private] => 1
            [nestedSeparator:protected] => .
        )

)

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) FfqrK85m0e

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_' }) uniqueid(11, { prefix: 'user' }) }} unique_id(13, { suffix: '.json' }) unique_id(13, { suffix: '.json' }) }}

range

Generates an array containing a range of elements, optionally stepped

range(25, 300, 50) Array ( [0] => 25 [1] => 75 [2] => 125 [3] => 175 [4] => 225 [5] => 275 )

read_file

Simple function to read a file based on a filepath and output it.

read_file('plugins://admin/README.md')|markdown

# Grav Standard Administration Panel Plugin

This **admin plugin** for [Grav](https://github.com/getgrav/grav) is an HTML user interface that provides a convenient way to configure Grav and easily create and modify pages...

redirect_me

Redirects to a URL of your choosing

redirect_me('http://google.com', 304)

regex_filter

Performs a preg_grep on an array with a regex pattern

regex_filter(['pasta', 'fish', 'steak', 'potatoes'], "/p.*/")

Array
(
    [0] => pasta
    [3] => 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.

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) => "23"

string(['test' => 'x']) => {"test":"x"}

theme_var

Get a theme variable from the page header if it exists, else use the theme config:

theme_var('grid-size')

This will first try page.header.grid-size, if that is not set, it will try theme.grid-size from the theme configuration file. it can optionally take a default:

theme_var('grid-size', 1024)

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'])

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') http://www.placehold.it/150x100/f4f4f4

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) }}

array(2) {
  ["foo"]=>
  string(3) "bar"
  ["baz"]=>
  string(3) "qux"
}

xss

Allow a manual check of a string for XSS vulnerabilities

xss('this string contains a <script>alert("hello");</script> XSS vulnerability') dangerous_tags

Found errors? Think you can improve this documentation? Simply click the Edit link at the top of the page, and then the icon on Github to make your changes.