TwigTextExtension contains the following filters:
br2p
: Replaces double linebreaks formatting into paragraphs.hash
: Exposes the hash function included in PHP.p2br
: Replaces paragraph formatting with double linebreaks.paragraphs_slice
: Extracts paragraphs from a string. Similar to array_slice.regex_replace
: Exposes the preg_replace function included in PHP.repeat
: Exposes the str_repeat function included in PHP.
License: MIT
- Twig >= 1.12
Add the falc/twig-text-extension
package to your composer.json
:
composer require falc/twig-text-extension
To use it in a Symfony project you have to register the extension as a service.
services:
twig.extension.text:
class: Falc\Twig\Extension\TextExtension
tags:
- { name: twig.extension }
If there is already an extension registered as twig.extension.text
you can give the new one a different name:
services:
twig.extension.text:
class: Other\Twig\Extension\TextExtension
tags:
- { name: twig.extension }
twig.extension.falc_text:
class: Falc\Twig\Extension\TextExtension
tags:
- { name: twig.extension }
To use it in other projects:
$twig = new Twig_Environment($loader, $options);
$twig->addExtension(new Falc\Twig\Extension\TextExtension());
// Example
{{ 'This is a text.<br /><br>This should be another paragraph.' | br2p }}
// Output
"<p>This is a text.</p><p>This should be another paragraph.</p>"
algorithm
: Name of selected hashing algorithm (i.e. "md5", "sha256", "haval160,4", etc..)rawOutput
: When set totrue
, outputs raw binary data.False
outputs lowercase hexits.- Optional.
- Default is false.
// Example
{{ 'hash-something' | hash('md5') }}
// Output
"6885610d9373d81639f73b6844aad6b3"
Check hash_algos()
to find a list of available algorithms.
// Example
{{ '<p>This is a text.</p><p>This should be another paragraph.</p>' | p2br }}
// Output
"This is a text.<br /><br />This should be another paragraph."
offset
: Number of paragraphs to offset.- Optional.
- Default is 0.
length
: Number of paragraphs to return.- Optional.
- Default is null.
This filter works like array_slice.
Without parameters, it will return an array containing all the paragraphs:
// Example
{{ '<p>First paragraph.</p><p>Second paragraph.</p><p>Third paragraph</p>' | paragraphs_slice }}
// Output
["<p>First paragraph.</p>", "<p>Second paragraph.</p>", "<p>Third paragraph</p>"]
Return an array containing the first two paragraphs:
// Example
{{ '<p>First paragraph.</p><p>Second paragraph.</p><p>Third paragraph</p>' | paragraphs_slice(0, 2) }}
// Output
["<p>First paragraph.</p>", "<p>Second paragraph.</p>"]
Return an array containing only the second paragraph:
// Example
{{ '<p>First paragraph.</p><p>Second paragraph.</p><p>Third paragraph</p>' | paragraphs_slice(1, 1) }}
// Output
["<p>Second paragraph.</p>"]
Return an array containing the last paragraph:
// Example
{{ '<p>First paragraph.</p><p>Second paragraph.</p><p>Third paragraph</p>' | paragraphs_slice(0, -1) }}
// Output
["<p>Third paragraph</p>"]
Twig allows to chain filters, so you can join the resulting array using join...
// Example
{{ '<p>First paragraph.</p><p>Second paragraph.</p><p>Third paragraph</p>' | paragraphs_slice(0, 2) | join }}
// Output
"<p>First paragraph.</p><p>Second paragraph.</p>"
...and to make Twig process HTML, chain the raw filter:
{{ '<p>First paragraph.</p><p>Second paragraph.</p><p>Third paragraph</p>' | paragraphs_slice(0, 2) | join | raw }}
That way it is possible to truncate a text at a paragraph level.
pattern
: Pattern to search for. It can be either a string or an array with strings.replacement
: String or array with strings to replace.limit
: Maximum possible replacements for each pattern in each subject string.- Optional.
- Default is -1 (no limit).
// Example
{{ '<p>1) This is the first title<br>2) This is the second title<br>42) Another title</p>' | regex_replace('#\\d+\\)\\s*#', '') }}
// Output
"<p>This is the first title<br>This is the second title<br>Another title</p>"
num
: Number of times to repeat the string.
// Example
{{ '-=' | repeat(10) }}
// Output
"-=-=-=-=-=-=-=-=-=-="