Twig extensions plugin adds new filters and functions to your templates! No other plugin dependencies.
Features
- supported filters strftime, uppercase, lowercase, ucfirst, lcfirst, ltrim, rtrim, str_repeat, plural, truncate, wordwrap, strpad, leftpad, rightpad, rtl, shuffle, time_diff, localizeddate, localizednumber, localizedcurrency, mailto, var_dump, revision, sortbyfield
- supported functions config, session, trans, var_dump, template_from_string
- special filter mailto for rendering encrypted email as spam prevention
Available filters
strftime, uppercase, lowercase, ucfirst, lcfirst, ltrim, rtrim, str_repeat, plural, truncate, wordwrap, strpad, leftpad, rightpad, rtl, shuffle, time_diff, localizeddate, localizednumber, localizedcurrency, mailto, var_dump, revision, sortbyfield
strftime
Format a local time/date according to locale settings.
Posted at {{ article.date | strftime('%d.%m.%Y %H:%M:%S') }}
The example would output Posted at 04.01.2016 22:57:42. See more format parameters.
uppercase
Make a string uppercase
Hello I'm {{ 'Jack' | uppercase }}
The example would output Hello I'm JACK.
lowercase
Make a string lowercase
Hello I'm {{ 'JACK' | lowercase }}
The example would output Hello I'm jack.
ucfirst
Make a string's first character uppercase
Hello I'm {{ 'jack' | ucfirst }}
The example would output Hello I'm Jack.
lcfirst
Make a string's first character lowercase
Hello I'm {{ 'Jack' | lcfirst }}
The example would output Hello I'm jack.
ltrim
Strip whitespace (or other characters) from the beginning of a string
Hello I'm {{ ' jack' | ltrim }}
The example would output Hello I'm jack without whitespaces from the start.
rtrim
Strip whitespace (or other characters) from the end of a string.
Hello I'm {{ 'jack ' | rtrim }}
The example would output Hello I'm jack without whitespaces from the end.
str_repeat
Repeat a string
I'm the {{ 'best' | str_repeat(3) }}!
The example would output I'm the best best best!
plural
Get the plural form of an English word.
You have {{ count }} new {{ 'mail' | plural(count) }}
The example would output You have 1 new mail or You have 3 new mails - depending on mails count.
truncate
Use the truncate filter to cut off a string after limit is reached
{{ "Hello World!" | truncate(5) }}
The example would output Hello..., as ... is the default separator.
You can also tell truncate to preserve whole words by setting the second parameter to true. If the last Word is on the the separator, truncate will print out the whole Word.
{{ "Hello World!" | truncate(7, true) }}
Here Hello World! would be printed.
If you want to change the separator, just set the third parameter to your desired separator.
{{ "Hello World!" | truncate(7, false, "??") }}
This example would print Hello W??.
wordwrap
Use the wordwrap filter to split your text in lines with equal length.
{{ "Lorem ipsum dolor sit amet, consectetur adipiscing" | wordwrap(10) }}
This example would print:
Lorem ipsu m dolor si t amet, co nsectetur adipiscing
The default separator is "\n", but you can easily change that by providing one:
{{ "Lorem ipsum dolor sit amet, consectetur adipiscing" | wordwrap(10, "zz\n") }}
This would result in:
Lorem ipsuzz m dolor sizz t amet, cozz nsectetur zz adipiscing
rtl
Reverse a string.
{{ 'Hello world!' | rtl }}
This would print:
!dlrow olleH
shuffle
Shuffle an array
{{ songs | shuffle }}
time_diff
Use the time_diff filter to render the difference between a date and now.
{{ post.published_at | time_diff }}
The example above will output a string like 4 seconds ago or in 1 month, depending on the filtered date.
time_diff arguments
- date: The date for calculate the difference from now. Can be a string or a DateTime instance.
- now: The date that should be used as now. Can be a string or a DateTime instance. Do not set this argument to use current date.
time_diff translation
To get a translatable output, give a Symfony\Component\Translation\TranslatorInterface as constructor argument. The returned string is formatted as diff.ago.XXX or diff.in.XXX where XXX can be any valid unit: second, minute, hour, day, month, year.
localizeddate
Use the localizeddate filter to format dates into a localized string representating the date.
{{ post.published_at | localizeddate('medium', 'none', locale) }}
The localizeddate filter accepts strings (it must be in a format supported by the strtotime function), DateTime instances, or Unix timestamps.
localizeddate arguments
- date_format: The date format. Choose one of these formats:
- 'none': IntlDateFormatter::NONE
- 'short': IntlDateFormatter::SHORT
- 'medium': IntlDateFormatter::MEDIUM
- 'long': IntlDateFormatter::LONG
- 'full': IntlDateFormatter::FULL
- time_format: The time format. Same formats possible as above.
- locale: The locale used for the format. If NULL is given, Twig will use Locale::getDefault()
- timezone: The date timezone
- format: Optional pattern to use when formatting or parsing. Possible patterns are documented in the ICU user guide.
localizednumber
Use the localizednumber filter to format numbers into a localized string representating the number.
{{ product.quantity | localizednumber }}
Internally, Twig uses the PHP NumberFormatter::create() function for the number.
localizednumber arguments
- style: Optional date format (default: 'decimal'). Choose one of these formats:
- 'decimal': NumberFormatter::DECIMAL
- 'currency': NumberFormatter::CURRENCY
- 'percent': NumberFormatter::PERCENT
- 'scientific': NumberFormatter::SCIENTIFIC
- 'spellout': NumberFormatter::SPELLOUT
- 'ordinal': NumberFormatter::ORDINAL
- 'duration': NumberFormatter::DURATION
- type: Optional formatting type to use (default: 'default'). Choose one of these types:
- 'default': NumberFormatter::TYPE_DEFAULT
- 'int32': NumberFormatter::TYPE_INT32
- 'int64': NumberFormatter::TYPE_INT64
- 'double': NumberFormatter::TYPE_DOUBLE
- 'currency': NumberFormatter::TYPE_CURRENCY
- locale: The locale used for the format. If NULL is given, Twig will use Locale::getDefault()
localizedcurrency
Use the localizedcurrency filter to format a currency value into a localized string.
{{ product.price | localizedcurrency('EUR') }}
localizedcurrency arguments
- currency: The 3-letter ISO 4217 currency code indicating the currency to use.
- locale: The locale used for the format. If NULL is given, Twig will use Locale::getDefault()
mailto
Filter for rendering email as normal mailto link, but with encryption against bots!
{{ 'vojtasvoboda.cz@gmail.com' | mailto }}
returns
<span id="e846043876">[javascript protected email address]</span><script type="text/javascript">/*<![CDATA[*/eval("var a=\"9IV1G0on6.ryWZYS28iPcNBwq4aeUJF5CskjuLQAh3XdlEz@7KtmpHbTxM-ODg_+Rvf\";var b=a.split(\"\").sort().join(\"\");var c=\"_TtD3O_TXTl3VdfZ@H3KpVdTH\";var d=\"\";for(var e=0;e<c.length;e++)d+=b.charAt(a.indexOf(c.charAt(e)));document.getElementById(\"e846043876\").innerHTML=\"<a href=\\\"mailto:\"+d+\"\\\">\"+d+\"</a>\"")/*]]>*/</script>
which will be rendered to page as normal
<a href="mailto:vojtasvoboda.cz@gmail.com">vojtasvoboda.cz@gmail.com</a>
PHP encrypts your email address and generates the JavaScript that decrypts it. Most bots can't execute JavaScript and that is what makes this work. A visitors of your web page will not notice that you used this script as long as they has JavaScript enabled. The visitors will see "[javascript protected email address]" instead of the email address if they has JavaScript disabled.
You can also use additional filter parameters
{{ 'vojtasvoboda.cz@gmail.com' | mailto(true, true, 'Let me know', 'my-class') }}
Where first parameter means "returns email with mailto link" and you can set it to false. Second parameter means "encryption is enabled". Third is link text and fourth is custom CSS class.
var_dump
Dumps information about a variable.
<pre>{{ users | var_dump }}</pre>
revision
Force the browser to reload cached modified/updated asset files. You can provide a format parameter so that the prepended timestamp get converted accordingly to the PHP date() function.
<img src="{{ 'assets/images/image_file.jpg' | theme | revision("m.d.y.H.i.s") }}" />
Will return something like
<img src="https://www.example.com/themes/my-theme/assets/image_file.png?12.03.16.04.52.38" />
sortbyfield
Sort array/collection by given field (key).
{% set data = [{'name': 'David', 'age': 31}, {'name': 'John', 'age': 28}] %} {% for item in data | sortbyfield('age') %} {{ item.name }} {% endfor %}
Output will be: John David
Available functions
config, session, trans, var_dump, template_from_string
config
Function transports the functionality of the Laravel config()
helper function to Twig.
{{ config('app.locale') }}
The example would output the value currently stored in app.locale
.
See more about the Laravel config helper function here.
session
Function transports the functionality of the Laravel session()
helper function to Twig.
{{ session('my.session.key') }}
The example would output the value currently stored in my.session.key
.
See more about the Laravel session helper function here.
trans
Function transports the functionality of the Laravel trans()
helper function to Twig.
{{ trans('acme.blog::lang.app.name') }}
The example would output a value stored in a localization file of an imaginary blog plugin. See more about localization in October CMS here.
var_dump
Dumps information about a variable. Can be also used as filter.
<pre>{{ var_dump(users) }}</pre>
template_from_string
Function loads a template from a string.
{% set name = 'John' %} {{ include(template_from_string("Hello {{ name }}")) }} {{ include(template_from_string("Hurry up it is: {{ "now"|date("m/d/Y") }}")) }}
The following plugins extend or depend on the plugin

Next and Prev Post
Retrieve the next and previuos post from the current post
Next and Prev Post
Retrieve the next and previuos post from the current post

Arcane SEO
Automatic sitemap.xml. Dynamic meta. Asset minification. Favicon. Schema.org
Arcane SEO
Automatic sitemap.xml. Dynamic meta. Asset minification. Favicon. Schema.org

Job applications management
Simple and powerful plugin to setup job listings on your website
Job applications management
Simple and powerful plugin to setup job listings on your website
The following themes use this plugin

Modular Theme with PAGE BUILDER - Clear
Modular Theme with PAGE BUILDER - Clear
Octobercms Multipurpose Theme with Powerful Settings and an easy CRUD Generator - Page Builder system

Sneakers E-Commerce Theme for Shopaholic
Sneakers E-Commerce Theme for Shopaholic
Customizable and mobile-friendly e-commerce theme for Shopaholic designed especially for an online shoe store.

Ultimate Website Builder - CREATOR Theme Bundle
Ultimate Website Builder - CREATOR Theme Bundle
The Ultimate Octobercms Theme Bundle with Advanced Page Builder & Powerful Component Blocks

Vermillion
Vermillion
Ultimate Responsive Company Profile Theme

eMarket - Advanced E-Commerce Octobercms theme
eMarket - Advanced E-Commerce Octobercms theme
Premium Ecommerce Octobercms theme based on OFFLINE Mall Plugin

Axiam E-Commerce Theme for Shopaholic
Axiam E-Commerce Theme for Shopaholic
Responsive Bootstrap 4 Shopaholic theme for October CMS

Biolia E-Commerce Theme for Shopaholic
Biolia E-Commerce Theme for Shopaholic
Customizable and mobile-friendly e-commerce theme for Shopaholic designed especially for an online organic food & eco products store.

Levo
Levo
Theme specially designed for tutoring/teaching bussines
Installation
Just install VojtaSvoboda.TwigExtensions plugin a you can use new added plugin at your templates:
<h1 class="heading">{{ article.heading | uppercase }}</h1> <p class="created"> Posted at {{ article.date | strftime('%d.%m.%Y %H:%M:%S') }} </p> <p class="perex"> {{ article.perex | truncate(80) }} </p>
Contributing
Do you want some extra feature or fix bug? Send me pull request or create issue, please.
Code check
Unit tests
License
Twig extensions plugin is open-sourced software licensed under the MIT license same as OctoberCMS platform.
Icon made by Freepik from www.flaticon.com.
-
Noly Bom
Found the plugin useful on 2 Sep, 2020
A must plugin! Thank you!!!
-
Paulo Cesar Soto
Found the plugin useful on 20 Jun, 2020
This plugin help me to validate if the image exists on disk, I add the PHP function on his section getPhpFunctions.
Great Plugin!!
-
Daniels Teddy
Found the plugin useful on 23 Feb, 2020
Alway in my plugins handbook, thank you for your great work!
-
Jean Perez
Found the plugin useful on 26 Jul, 2019
Great plugin
-
LOVATA
Found the plugin useful on 15 Mar, 2019
Thx for the great plugin!
We're using it in each of our projects based on October CMS to work with Twig templates in a more comfortable way.
-
Jan Vince
Found the plugin useful on 25 Oct, 2018
Great work! One of my essential plugins.
-
Szabó Gergő
Found the plugin useful on 7 Aug, 2018
Very useful and essential plugin. Thank you!
-
Abdulsalam
Found the plugin useful on 22 Mar, 2018
Thanks for the plugin! How to make in Russian?
-
Vojta Svoboda author
Replied on 23 Mar, 2018
Just create pull request in official repository, it's easy :-) https://github.com/vojtasvoboda/oc-twigextensions-plugin
-
Justin Patterson
Found the plugin useful on 6 Feb, 2018
I was so happy when I found this plugin. I didn't even know how much I needed some of these filters, now I use them so much. Cheers!
-
papaya
Found the plugin useful on 17 Jan, 2018
Great work!
-
Akkarin
Found the plugin useful on 18 Jan, 2017
Very usefull plugin! Thank you very much!
-
Ronaldo Ribeiro de Sousa
Found the plugin useful on 9 Jan, 2017
Great work!
Excellent plugin
Thanks Vojta Svoboda
-
Zanor
Found the plugin useful on 28 Nov, 2016
Excellent plugin, provides some very useful filters which saves me a lot of time.
Vojta, thanks for the new mailto filter, I'm loving it! :)
-
Arman Zhilkaidarov
Found the plugin useful on 12 Aug, 2016
Great works!
Add please this extension) https://github.com/asm89/twig-cache-extension
-
sam
Found the plugin useful on 4 Jul, 2016
good work
-
Sebastian Hilger
Found the plugin useful on 18 Apr, 2016
Great plugin, very useful.
-
1.2.7 |
Add slovenian locale, thanks to Marko Kodrič Oct 04, 2020 |
---|---|
1.2.6 |
Fix ucfirst, thanks to Aurélien Roy Jan 24, 2020 |
1.2.5 |
Add env() helper function, thanks to Marek Závacký Mar 22, 2019 |
1.2.4 |
Add sk_SK locale, thanks to Marek Závacký Feb 22, 2019 |
1.2.3 |
Added an optional css class parameter to mailto function Oct 20, 2018 |
1.2.2 |
Add str_replace filter (thanks to Szabó Gergő) May 10, 2018 |
1.2.1 |
Add linter and code sniffer for better automatization. Feb 04, 2018 |
1.2.0 |
Require PHP 7.0 as minimum version. Sep 24, 2017 |
1.1.3 |
Add sortbyfield filter to sorting arrays/fields by key. Sep 11, 2017 |
1.1.2 |
Add strip_tags filter Sep 11, 2017 |
1.1.1 |
Add revision filter Aug 03, 2017 |
1.1.0 |
Make changes for Laravel 5.5. Aug 03, 2017 |
1.0.15 |
Add DE and HU locale (thanks to Szabó Gergő and Sebastian Hilger) Jan 09, 2017 |
1.0.14 |
Add pt-br locale for time_diff translation (thanks to Ronaldo Ribeiro de Sousa) Jan 08, 2017 |
1.0.13 |
Make time_diff translatable. Jan 08, 2017 |
1.0.12 |
Add mailto text parameter and rtl filter. Dec 20, 2016 |
1.0.11 |
Add mailto filter for rendering encrypted email addresses. Nov 28, 2016 |
1.0.10 |
Remove pre tag from var_dump Oct 15, 2016 |
1.0.9 |
Add var_dump filter and function. Oct 15, 2016 |
1.0.8 |
Plugin can be installed over Composer. Oct 15, 2016 |
1.0.7 |
Add the session() and trans() helper functions (thanks to Sebastian Hilger) Jul 12, 2016 |
1.0.6 |
Fix localizednumber and localizedcurrency filters (thanks to Vita Zoubek) Apr 20, 2016 |
1.0.5 |
Add config function (thanks to Sebastian Hilger) Apr 18, 2016 |
1.0.4 |
Add leftpad, rightpad and strpad filters. Cover by unit tests. Mar 25, 2016 |
1.0.3 |
Fix uppercase, lowercase and ucfirst for UTF-8 characters Mar 07, 2016 |
1.0.2 |
Add template_from_string function Feb 28, 2016 |
1.0.1 |
First version of TwigExtensions Jan 05, 2016 |