Filters
On top of the template filters that Twig comes with (opens new window), Craft provides a few of its own.
# camel
Returns a string formatted in “camelCase”.
{{ "foo bar"|camel }}
{# Outputs: fooBar #}
# currency( currency, stripZeroCents )
Formats a number with a given currency according to the user’s preferred language.
If you pass true
into the second argument, the “.00” will be stripped if there’s zero cents.
{{ 1000000|currency('USD') }} => $1,000,000.00
{{ 1000000|currency('USD', true) }} => $1,000,000
# datetime
Formats a date according to the user’s preferred language.
# filesize
Formats a number of bytes into something nicer.
# filter
Removes any empty elements from an array and returns the modified array.
# group
Groups the items of an array together based on common properties.
{% set allEntries = craft.entries.section('blog').find() %}
{% set allEntriesByYear = allEntries|group('postDate.year') %}
{% for year, entriesInYear in allEntriesByYear %}
<h2>{{ year }}</h2>
<ul>
{% for entry in entriesInYear %}
<li><a href="{{ entry.url }}">{{ entry.title }}</a></li>
{% endfor %}
</ul>
{% endfor %}
# hash
Prefixes the given string with a keyed-hash message authentication code (HMAC), for securely passing data in forms that should not be tampered with.
<input type="hidden" name="foo" value="{{ 'bar'|hash }}">
PHP scripts can validate the value via CSecurityManager::validateData() (opens new window):
$foo = craft()->request->getPost('foo');
$foo = craft()->security->validateData($foo);
if ($foo !== false) {
// data is valid
}
# indexOf
Returns the index of a passed-in value within an array, or the position of a passed-in string within another string. (Note that the returned position is 0-indexed.) If no position can be found, -1
is returned instead.
{% set colors = ['red', 'green', 'blue'] %}
<p>Green is located at position {{ colors|indexOf('green') + 1 }}.</p>
{% set position = "team"|indexOf('i') %}
{% if position != -1 %}
<p>There <em>is</em> an “i” in “team”! It’s at position {{ position + 1 }}.</p>
{% endif %}
# intersect
Returns an array containing only the values that are also in a passed-in array.
{% set ownedIngredients = [
'vodka',
'gin',
'triple sec',
'tonic',
'grapefruit juice'
] %}
{% set longIslandIcedTeaIngredients = [
'vodka',
'tequila',
'rum',
'gin',
'triple sec',
'sweet and sour mix',
'Coke'
] %}
{% set ownedLongIslandIcedTeaIngredients =
ownedIngredients|intersect(longIslandIcedTeaIngredients)
%}
# kebab
Returns a string formatted in “kebab-case”.
That’s a reference to shish kebabs (opens new window) for those of you that don’t get the analogy.
{{ "foo bar?"|kebab }}
{# Outputs: foo-bar #}
# lcfirst
Lowercases the first character of a string.
# markdown
or md
Processes a string with Markdown (opens new window).
{% set content %}
# Everything You Need to Know About Computer Keyboards
The only *real* computer keyboard ever made was famously
the [Apple Extended Keyboard II] [1].
[1]: https://www.flickr.com/photos/gruber/sets/72157604797968156/
{% endset %}
{{ content|markdown }}
# number
Formats a number according to the user’s preferred language.
You can optionally pass false
to it if you want group symbols to be omitted (e.g. commas in English).
{{ 1000000|number }} => 1,000,000
{{ 1000000|number(false) }} => 1000000
# parseRefs
Parses a string for reference tags.
{% set content %}
{entry:blog/hello-world:link} was my first blog post. Pretty geeky, huh?
{% endset %}
{{ content|parseRefs|raw }}
# pascal
Returns a string formatted in “PascalCase” (AKA “UpperCamelCase”).
{{ "foo bar"|pascal }}
{# Outputs: FooBar #}
# percentage
Formats a percentage according to the user’s preferred language.
# replace
Replaces parts of a string with other things.
You can replace multiple things at once by passing in an object of search/replace pairs:
{% set str = "Hello, FIRST LAST" %}
{{ str|replace({
FIRST: currentUser.firstName,
LAST: currentUser.lastName
}) }}
Or you can replace one thing at a time:
{% set str = "Hello, NAME" %}
{{ str|replace('NAME', currentUser.name) }}
You can also use a regular expression to search for matches by starting and ending the replacement string’s value with forward slashes:
{{ tag.name|lower|replace('/[^\\w]+/', '-') }}
Any backslashes in the regular expression will need to be double-escaped '\\
' for them to work properly.
# snake
Returns a string formatted in “snake_case”.
{{ "foo bar"|snake }}
{# Outputs: foo_bar #}
# translate
or t
If the user’s preferred language doesn’t match your site’s language, Craft will look for a translation file for the user’s preferred language, and see if it contains a translation for the preceding string (see Translating Static Text (opens new window)).
If your text contains dynamic variables, add tokens to the string where they should go, and pass an object to the t
filter that contains their values:
<p>{{ "Welcome, {name}"|t({ name: user.friendlyName }) }}<p>
# ucfirst
Capitalizes the first character of a string.
# ucwords
Capitalizes the first character of each word in a string.
# values
Returns an array of all the values in a given array, but without any custom keys.
{% set arr1 = {foo: "Foo", bar: "Bar"} %}
{% set arr2 = arr1|values %}
{# arr2 = ["Foo", "Bar"] #}
# without
Returns an array without the specified element(s).
{% set entries = craft.entries.section('articles').limit(3).find %}
{% set firstEntry = entries[0] %}
{% set remainingEntries = entries|without(firstEntry) %}