https://github.com/carlcs/craft-helpers
Helpers plugin for Craft CMS
https://github.com/carlcs/craft-helpers
craft-plugin craftcms
Last synced: 10 months ago
JSON representation
Helpers plugin for Craft CMS
- Host: GitHub
- URL: https://github.com/carlcs/craft-helpers
- Owner: carlcs
- Created: 2016-05-26T05:47:09.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2017-07-24T00:18:19.000Z (almost 9 years ago)
- Last Synced: 2024-04-24T20:27:18.393Z (about 2 years ago)
- Topics: craft-plugin, craftcms
- Language: PHP
- Homepage:
- Size: 416 KB
- Stars: 60
- Watchers: 5
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
# Helpers plugin for Craft CMS
A collection of Twig functions.
## Installation
The plugin is available on Packagist and can be installed using Composer. You can also download the [latest release][1] and copy the files into craft/plugins/helpers/.
```
$ composer require carlcs/craft-helpers
```
[1]: https://github.com/carlcs/craft-helpers/releases/latest
## File Helpers
The plugin provides functions, which allow to read and convert JSON, YAML, CSV and PHP file contents. Using the `readText` or `inline` function you can read an entire file into a string.
All functions take a `path` argument, this can be either a relative or absolute path, or full URL to the file. A relative path is interpreted as relative to the web root by default, but this can be changed with the `basePath` config setting.
Here are some ideas for what you can do with reading files:
- read SVG files or “above-the-fold” CSS files and inline them into your templates
- read documents written in markdown that you version control in Git
- read mock data from JSON or YAML files for prototyping
- read Element API endpoints without Ajax requests
- read mapping tables for all sorts of things (keywords to element IDs, keywords to common sets of Atomic CSS classes, …)
#### readJson( path )
Reads a JSON file, parses and converts its contents.
- **`path`** (required) – The path to the file to read.
```twig
{% for article in readJson('https://example.com/api/news') %}
{{ article.body }}
{% endfor %}
```
#### readYaml( path )
Reads a YAML file, parses and converts its contents.
- **`path`** (required) – The path to the file to read.
```twig
{% set c = readYaml('tachyons/base.yaml') %}

{# outputs "br-100 pa1 ba b--black-10 h3 w3" #}
```
#### readCsv( path )
Reads a CSV file, parses and converts its contents.
- **`path`** (required) – The path to the file to read.
- **`associative`** (default `true`) – Whether an associative array should be returned for each row. The keys are provided from the first CSV row.
```twig
{% for customer in readCsv('data/customers.csv') %}
{{ customer['First Name'] }}
{% endfor %}
{# outputs "Paul Clara Max Thomas Simone" #}
```
#### readPhp( path )
Executes a PHP file’s return statement and returns the value.
- **`path`** (required) – The path to the file to read.
```twig
{% for element in readPhp('data/elements.php') %}
{{ element.getUrl() }}
{% endfor %}
```
#### readText( path )
Reads a file’s contents into a string. The plugin also provides an alias for this function with `inline( path )`.
- **`path`** (required) – The path to the file to read.
```twig
{{ readText('data/notes.md')|md }}
```
```twig
{{ inline('assets/svg/logo.svg') }}
```
```twig
{% set data = inline(url('api/elements.json')) %}
```
## String Helpers
#### truncate( length, suffix, preserve )
Truncates a string to a given length.
- **`length`** (default `30`) – The number of characters, beyond which the text should be truncated.
- **`suffix`** (default `'…'`) – The string to be appended if truncating occurs.
- **`preserve`** (default `true`) – Ensures that the filter doesn’t split words.
```twig
{{ 'This is some very long text and it is causing a lot of problems.'|truncate(30) }}
{# outputs "This is some very long text…" #}
```
#### truncateHtml( length, suffix, preserve )
A version of the `truncate` filter that is capable of handling HTML as an input string. `truncateHtml` closes HTML tags, if they’d be cut off by the truncation. Please note that its performance is worse than the normal `truncate` filter, so only use it when you need to.
- **`length`** (default `30`) – The number of characters, beyond which the text should be truncated.
- **`suffix`** (default `'…'`) – The string to be appended if truncating occurs.
- **`preserve`** (default `true`) – Ensures that the filter doesn’t split words.
```twig
{{ 'This is some very long text and it is causing a lot of problems.'|truncateHtml(30) }}
{# outputs "This is some very long text and…" #}
```
#### highlight( terms, format )
Highlights given terms in a text.
- **`terms`** (required) – A term or an array of terms that will be searched.
- **`format`** (default `'\1'`) – The replacement string with a backreference to the found term. The default string can be overridden with the `highlightFormat` config setting.
```twig
{% set terms = 'we craf'|split(' ') %}
{{ 'We just installed Craft!'|highlight(terms) }}
{# outputs "We just installed Craft!" #}
```
#### sentenceList( and, separator )
Generates a comma separated list from an array of strings, where the last two strings are joined with “and”.
- **`and`** (default `', and '`) – The separator between the last two strings (translatable using [translation files][2]).
- **`separator`** (default `', '`) – The separator between the other strings.
```twig
{% set names = ['Patrick', 'Clarisse', 'Caitlin', 'Danny', 'Loretta'] %}
{{ names|sentenceList }}
{# outputs "Patrick, Clarisse, Caitlin, Danny, and Loretta" #}
```
[2]: https://craftcms.com/support/static-translations
#### titleize( ignore )
Returns a string with the first letter of each word capitalized.
- **`ignore`** (default `['the', 'to', ...]`) – A list of words which should not be capitalized. The default list can be overridden with the `titleizeIgnore` config setting.
```twig
{{ 'i like to watch television'|titleize }}
{# outputs "I Like to Watch Television" #}
```
#### collapseWhitespace
Trims the string and replaces consecutive whitespace characters with a single space. This includes tabs and newline characters, as well as multibyte whitespace such as the thin space and ideographic space.
```twig
{{ ' where that extra whitespace might come from? '|collapseWhitespace }}
{# outputs "where that extra whitespace might come from?" #}
```
#### stripWords( wordlist, ignoreCase )
Returns the input string stripped from all words of a given list of words.
- **`wordlist`** (required) – The array of words that should get stripped from the input string.
- **`ignoreCase`** (default `true`) – Controls whether case is ignored or respected.
```twig
{% set string = 'In theory it removes both the A and AN, but not the THE.' %}
{{ string|stripWords(['a', 'an']) }}
{# outputs "In theory it removes both the and , but not the THE." #}
```
#### stripPunctuation
Returns the input string stripped from all punctuation.
```twig
{% set string = 'In theory it removes .,:;*# but not ßøü.' %}
{{ string|stripPunctuation }}
{# outputs "In theory it removes but not ßøü" #}
```
#### htmlEntityDecode
Returns the input string with all HTML entities converted to their applicable characters.
```twig
{% set string = 'Ein Anführungszeichen ist <b>fett</b>' %}
{{ string|htmlEntityDecode }}
{# outputs "Ein Anführungszeichen ist fett" #}
```
## Number Helpers
#### numbersToWords( locale )
Converts a number to its word representation. The filter uses the Numbers_Words library to generate the output. Have a look at its documentation for a [list of supported languages][5].
- **`locale`** (default `en_US`) – The language name abbreviation to set the ouput language.
```twig
{{ 42|numbersToWords('de') }}
{# outputs "zweiundvierzig" #}
```
#### currencyToWords( locale, currency, decPoint)
Converts a currency value to word representation. The filter uses the Numbers_Words library to generate the output. Have a look at its documentation for a [list of supported languages][5] and currency symbols.
- **`locale`** (default `en_US`) – The language name abbreviation to set the ouput language.
- **`currency`** (default `''`) – The international currency symbol to set the ouput currency.
- **`decPoint`** (default `null`) – The separator for the decimal point.
```twig
{{ 1700.99|currencyToWords('en_US', 'EUR') }}
{# outputs "one thousand seven hundred euros ninety-nine euro-cents" #}
```
[5]: https://github.com/pear/Numbers_Words
#### numeralSystem( numeralSystem, zero )
Converts a number (arabic numeral system) to a representation of that number in another numeral system. If applied to a rational number (float), the filter rounds it to the closest integer first.
- **`numeralSystem`** (required) – The numeral system the number gets converted to. You can convert to the roman numberal system (`'roman'`, `'upperRoman'` or `'lowerRoman'`) or to the alphabetical equivalent to the input number (`'alpha'`, `'upperAlpha'` or `'lowerAlpha'`).
- **`zero`** (default `-1`) – Maps all negative numbers and zero. Setting this argument to `-1` gives you a decimal number to alphabetical character mapping like so: `-1` → `-B`, `0` → `-A`, `1` → `A`. Any other argument value other than `-1` or `1` does only map `0` to this value (i.e. `0` → `myZero`) and leaves negative number untouched.
```twig
{{ 42|numeralSystem('roman') }}
{# outputs "XLII" #}
```
#### unitPrefix( system, decimals, trailingZeros, decPoint, thousandsSep, unitSep)
Formats a number with unit prefixes.
- **`system`** (default `decimal`) – Either a string (e.g. "decimal") to use a predefined configuration or an array of custom settings.
- **`decimals`** (default `1`) – The number of decimal points.
- **`trailingZeros`** (default `false`) – Whether to show trailing zeros.
- **`decPoint`** (default `'.'`) – The separator for the decimal point.
- **`thousandsSep`** (default `''`) – The thousands separator.
- **`unitSep`** (default `' '`) – The separator between number and unit.
```twig
{{ 72064|unitPrefix }}
{# outputs "72.1 k" #}
```
#### fractionToFloat( precision )
Converts a fraction to a decimal number.
- **`precision`** (default `4`) – The precision (number of digits after the decimal point) the returned value gets rounded to.
```twig
{{ '2/3'|fractionToFloat }}
{# outputs "0.6667" #}
```
#### floatToFraction( tolerance )
Converts a decimal number to a fraction.
- **`tolerance`** (default `0.001`) – The allowed tolerance for the fraction calculation. So, for example, `0.7143` gets converted to `5/7` instead of `7138/9993`.
```twig
{{ 0.7143|floatToFraction }}
{# outputs "5/7" #}
```
## Miscellaneous Helpers
#### randomString( length, extendedChars )
Generates a random string of a given length.
- **`length`** (default `36`) – The length of the generated string.
- **`extendedChars`** (default `false`) – Whether to use an extended set of characters.
```twig
{{ randomString(6) }}
{# outputs "mRU1wI" #}
```
#### md5( string )
Generates the md5 hash of a string.
- **`string`** (required) – The string to generate the hash from.
```twig
{% set string = 'Lorem ipsum dolor sit amet.' %}
{{ string|md5 }}
{# outputs "eb76f38646cca9420296bfc6731f94b5" #}
```
#### json_decode( assoc, depth, options )
Decodes a JSON string.
- **`assoc`** (default `false`) – Whether objects should be converted into associative arrays.
- **`depth`** (default `512`) – The recursion depth.
- **`options`** (default `null`) – Bitmask of JSON decode options.
```twig
{% set json = '{"beers":["Alpirsbacher Klosterbräu","Rothaus Tannenzäpfle","Neumarkter Lammsbräu"],"whiskeys":null}' %}
{% set drinks = json|json_decode() %}
{{ drinks.beers[1] }}
{# outputs "Rothaus Tannenzäpfle" #}
```
#### setNotice( message )
Stores a notice in the user’s flash data.
- **`message`** (required) – The message.
```twig
{% do setNotice('My short message.') %}
{{ craft.session.getFlash('notice') }}
{# outputs "My short message." #}
```
#### setError( message )
Stores an error message in the user’s flash data.
- **`message`** (required) – The message.
```twig
{% do setError('Do panic!') %}
{{ craft.session.getFlash('error') }}
{# outputs "Do panic!" #}
```
## Settings
You can override plugin defaults with a helpers.php config file, which you need to create in your craft/config/ folder.
```php
getenv('BASE_PATH') ?: $_SERVER['DOCUMENT_ROOT'],
'highlightFormat' => '\1',
'titleizeIgnore' => ['at', 'by', 'for', 'in', 'of', 'on', 'out', 'to', 'the'],
];
```
#### basePath
The `basePath` is used by the `inline` and file reading functions. The default setting uses the value of your `BASE_PATH` environment variable if you have that set, otherwise falls back your the web root. You can override it with something like, for example `CRAFT_CONFIG_PATH.'data/'`.
#### highlightFormat
A setting for the `highlight` filter, which defines how matched terms are replaced. The term itself is available from the `\1` backreference.
#### titleizeIgnore
List of words which should not be capitalized by the `titleize` filter.
## Requirements
- PHP 5.4+