Passing variables into templates

Perch allows for variables to be set at runtime which are then available within templates.

Note: this will only work if the template is processed as the page loads, so it won’t work with perch_content() as that renders the template when the content is edited. Use perch_content_custom() instead.

Using a data option

Most page functions accept a data option passed into their options array. This is an associative array with the key being the IDs and the value being the value you want to appear in the template.

perch_content_custom('My region', [
    'data' => [
        'colour' => 'red',
        'fruit'  => 'apple',
        'season' => 'winter',
    ],
]);

Using PerchSystem

The PerchSystem class can be used to set variables at runtime which are then available within templates.

Note, this only works for templates which are parsed at runtime – such as content rendered with perch_content_custom() rather than the precompiled output from perch_content().

Using PerchSystem::set_var('name', 'value') you can do things like this:


PerchSystem::set_var('lang', 'en');
perch_content_custom('My region', [
    'template'=>'template.html'
]);

Then in your template:

<a href="/<perch:content id="lang" />/contact/">Contact Us</a>

The variable set with set_var() is passed into the template and merged with the regular content. You should think about avoiding ID collisions, and perhaps devise a naming scheme.

Bulk setting variables

You can also use the plural PerchSystem::set_vars() to set multiple variables at once. It takes a PHP associative array with keys and values.

<?php
    PerchSystem::set_vars([
        'colour'=>'red',
        'fruit'=>'apple',
        'season'=>'winter'
    ]);
?>

Unsetting variables

Variables set will persist for the duration of the page load. They can be reset by using the same name again, or explicitly unset.

PerchSystem::unset_var('lang');

Getting values back

A variable previously set can be read back.

$lang = PerchSystem::get_var('lang');

Or all get be fetched at once, as an associative array.

print_r(PerchSystem::get_vars());