Plain Text Fields
Plain text fields give you either a normal text input
or a multi-line textarea
, where plain text can be entered. How that text is used is entirely up to you!
# Settings
Plain text fields have the following settings:
- UI Mode — How the field should be presented in the control panel. (Defaults to “Normal”, can be “Enlarged”.)
- Placeholder Text — The field’s placeholder text, to be displayed if the field has no value yet.
- Field Limit — The maximum number of characters or bytes the field is allowed to have. (Accepts a number and a unit, which defaults to “Characters” with another option for “Bytes”.)
- Use a monospaced font — Whether field input’s text will use a monospaced font.
- Allow line breaks — Whether to allow line breaks in this field.
- Initial Rows — For multi-line inputs, choose how many lines of text fit in the field, initially. This setting does not affect how many lines of text can be stored.
# The Field
Plain text fields will either show a normal text input
element or a multi-line textarea
, depending on whether Allow line breaks was checked. To give editors more space, increase the number of Initial Rows.
# Development
Accessing a plain text field in your templates will return the value that was entered in the field. Suppose our field was named “Summary” and had a handle of summary
:
{{ entry.summary }}
# Testing for a Value
An empty text field is a “falsey” value, so you can use it in a conditional:
{% if entry.summary %}
<h3>Summary</h3>
<p>{{ entry.summary }}</p>
{% endif %}
Keep in mind that whitespace characters count the same as any other character—use the trim
filter to remove spaces and newlines from the beginning and end:
{% if entry.summary|trim %}
{# Ok, there really is content in here! #}
<h3>Summary</h3>
<p>{{ entry.summary }}</p>
{% endif %}
# Processing Text
Craft’s Twig environment has a ton of useful text processing features.
# Markdown
Parse a field’s value as Markdown with the markdown
or md
filter:
{% if entry.summary %}
<h3>Summary</h3>
{{ entry.summary|md }}
{% endif %}
Note that we’re not manually wrapping the output in <p></p>
tags! Markdown takes care of this for us, unless you pass the inlineOnly
argument:
<h3>{{ entry.stylizedHeader|md(inlineOnly = true) }}</h3>
# Reference Tags
To include dynamic information in a Plain Text field, you can copy reference tags from other elements, then use the parseRefs
filter to render their values:
# Querying
Plain text field values are stored as strings, and therefore support a variety of convenient query features via craft\helpers\Db::parseParam() (opens new window).
# Exact Matches
Open-ended inputs aren’t ideal for storing enum-style data (leave that to a dropdown field), but you can still query based on the exact text content of a field:
{% set reds = craft.entries()
.section('swatches')
.colorGroupCode('RED')
.all() %}
# Multiple Values
Match against a list using comma-separated values or an array:
{# Separate values with commas... #}
{% set sunrisePalette = craft.entries()
.section('swatches')
.colorGroupCode('PINK, RED, YELLOW, ORANGE')
.all() %}
{# ...or use an array: #}
{% set sunrisePalette = craft.entries()
.section('swatches')
.colorGroupCode(['PINK', 'RED', 'YELLOW', 'ORANGE'])
.all() %}
These examples are ultimately assembled into a NOT IN (...)
SQL clause.
# Negation
Exclude elements with a specific field value by preceding a value with not
:
{% set notCool = craft.entries()
.section('swatches')
.colorGroupCode('not BLUE')
.all() %}
Multiple values can be excluded by preceding each term in a comma-separated list by a not
('not BLUE, not GREEN'
), or by using not
as the first item in an array (['not', 'BLUE', 'GREEN']
).
The grouping of terms is important when combining ranges and negation! not RED, YELLOW
means “Swatches with a color other than RED
, or swatches with a color of YELLOW
.” On the other hand, ['not', 'RED', 'YELLOW']
means “Swatches with a color other than RED
or YELLOW
.” The former would exclude “red” swatches, but allow “yellow;” the latter would exclude both colors.
# Partial Matches
You can query using partial matches by including an asterisk (*
) at the beginning and/or end of a value:
{# All “pastel” families: #}
{% set pastels = craft.entries()
.section('swatches')
.colorGroupCode('PASTEL-*')
.all() %}
{# All “glossy” group variations: #}
{% set glosses = craft.entries()
.section('swatches')
.colorGroupCode('*-GLOSS')
.all() %}
Combined with the above, a param like 'not *-MATTE'
is also valid. Queries that use asterisks are generally compiled into LIKE
statements compatible with the database driver.
# Empty Values
The special tokens :empty:
and :notempty:
can be used to find elements with a plain text field that is empty or populated, respectively. Both tokens are compiled into query conditions that compare against null
and empty string (''
) values.
# Literal Symbols
To use asterisks or commas in a query param, pass your value through the literal
Twig filter.
# Case-Sensitivity
Query values are case-sensitive, by default. To make a query case-insensitive, use a hash with value
and caseInsensitive
keys:
{% set reds = craft.entries()
.section('swatches')
.colorGroupCode({
value: 'red',
caseInsensitive: true,
})
.all() %}