Feature #37496

placeholder attribute in textarea-viewhelper

Added by Martin Hummer over 9 years ago. Updated over 8 years ago.

Status:
Closed
Priority:
Should have
Assignee:
-
Category:
ViewHelpers
Target version:
-
Start date:
2012-05-25
Due date:
% Done:

0%

Estimated time:
Has patch:
No

Description

hello,

i just discovered that the placeholder attribute in the textarea viewhelper is missing.
the following code adds the placeholder according to the textfield viewhelper:

    /**
     * Renders the textarea.
     *
     * @param string $placeholder A string used as a placeholder for the value to enter
     *
     * @return string
     * @api
     */
    public function render($placeholder = NULL) {
        $name = $this->getName();
        $this->registerFieldNameForFormTokenGeneration($name);

        $this->tag->forceClosingTag(TRUE);
        $this->tag->addAttribute('name', $name);
        $this->tag->setContent(htmlspecialchars($this->getValue()));

        if ($placeholder !== NULL) {
            $this->tag->addAttribute('placeholder', $placeholder);
        }

        $this->setErrorClassAttribute();

        return $this->tag->render();
    }
}

Related issues

Related to TYPO3.Fluid - Task #37558: Form.Textfield ViewHelper's placeholder attribute should be (re)movedResolvedKarsten Dambekalns2012-05-29

Actions
#1

Updated by Martin Hummer over 9 years ago

  • Assignee deleted (Martin Hummer)
#2

Updated by Adrian Föder over 9 years ago

  • Status changed from New to Closed

you can easily add arbitrary attributes with the additionalAttributes attribute; this goes for every tag based ViewHelper. Usage is, for example:

<f:form.textarea additionalAttributes="{placeholder: 'Search...'}" />

outputs
<textarea placeholder="Search..." />

I'll close this issue, feel free to add comments or reopen if you need further information.

#3

Updated by Martin Hummer over 9 years ago

thanks for this hint!
i saw the placeholder-argument for the textfield-viewhelper and thought that this is missing for textarea-viewhelper.

additionalArguments solves this problem entirely.
thanks adrian!

#4

Updated by Lorenz Ulrich almost 9 years ago

Unfortunately Adrian's solution is not working in case you want to get the placeholder from a variable:

<f:form.textarea placeholder="{myValue}">

would work (if enabled), but

<f:form.textarea additionalAttributes="{placeholder: {myValue}}">

won't work because it violates the syntax. So I think we need a solution for this.

#5

Updated by Adrian Föder almost 9 years ago

Lorenz, you are nearly at the correct solutionm, which will be

<f:form.textarea additionalAttributes="{placeholder: myValue}" />

#6

Updated by Lorenz Ulrich almost 9 years ago

Stuipd me, you're right of course. Thank you!

#7

Updated by Matthias Wehrlein over 8 years ago

  • Status changed from Closed to New

Why has this been closed with just a workaround provided?

The placeholder attribute should be supported out of the box, it's valid and nowadays more and more used.

In addition — to my knowledge — there's no way to do more complicated string operations inside the additionalAttributes construct.

I had a case where I wanted to append an asterisk to the placeholder text. Something along the lines of this:

{namespace vh=Tx_Powermail_ViewHelpers}

<div id="powermail_fieldwrap_{field.uid}" class="powermail_fieldwrap powermail_fieldwrap_textarea powermail_fieldwrap_{field.uid} {field.css}">
    <label for="powermail_field_{field.marker}" class="powermail_label">
        <vh:string.RawAndRemoveXss>{field.title}</vh:string.RawAndRemoveXss><f:if condition="{field.mandatory}"><span class="mandatory">*</span></f:if>
    </label>
    <f:if condition="{field.mandatory}">
        <f:then>
            <f:form.textarea cols="20" rows="5" id="powermail_field_{field.marker}" name="field[{field.uid}]" value="{vh:Misc.PrefillField(field: '{field}')}" class="powermail_field powermail_textarea {vh:Misc.ValidationClass(field: '{field}')}" additionalAttributes="{placeholder:field.title + '*'}" />
        </f:then>
        <f:else>
            <f:form.textarea cols="20" rows="5" id="powermail_field_{field.marker}" name="field[{field.uid}]" value="{vh:Misc.PrefillField(field: '{field}')}" class="powermail_field powermail_textarea {vh:Misc.ValidationClass(field: '{field}')}" additionalAttributes="{placeholder:field.title}" />
        </f:else>
    </f:if>
</div>

Ain't possible right now. But I could have solved this with "native" placeholder support for textareas. Like I can do with regular text inputs:

{namespace vh=Tx_Powermail_ViewHelpers}

<div id="powermail_fieldwrap_{field.uid}" class="powermail_fieldwrap powermail_fieldwrap_input powermail_fieldwrap_{field.uid} {field.css}">
    <label for="powermail_field_{field.marker}" class="powermail_label">
        <vh:string.RawAndRemoveXss>{field.title}</vh:string.RawAndRemoveXss><f:if condition="{field.mandatory}"><span class="mandatory">*</span></f:if>
    </label>

    <f:if condition="{field.mandatory}">
        <f:then>
            <f:form.textfield id="powermail_field_{field.marker}" name="field[{field.uid}]" value="{vh:Misc.PrefillField(field: '{field}')}" class="powermail_field powermail_input {vh:Misc.ValidationClass(field: '{field}')} {vh:Misc.ErrorClass(field: '{field}', class: 'powermail_field_error')}" placeholder="{field.title}*" required="{field.mandatory}" />
        </f:then>
        <f:else>
            <f:form.textfield id="powermail_field_{field.marker}" name="field[{field.uid}]" value="{vh:Misc.PrefillField(field: '{field}')}" class="powermail_field powermail_input {vh:Misc.ValidationClass(field: '{field}')} {vh:Misc.ErrorClass(field: '{field}', class: 'powermail_field_error')}" placeholder="{field.title}" />
        </f:else>
    </f:if>
</div>
#8

Updated by Matthias Wehrlein over 8 years ago

  • % Done changed from 100 to 0
#9

Updated by Bastian Waidelich over 8 years ago

Matthias Wehrlein wrote:

In addition — to my knowledge — there's no way to do more complicated string operations inside the additionalAttributes construct.

FYI, yes that is possible:

<f:form.textarea cols="20" rows="5" id="powermail_field_{field.marker}" name="field[{field.uid}]" value="{vh:Misc.PrefillField(field: '{field}')}" class="powermail_field powermail_textarea {vh:Misc.ValidationClass(field: '{field}')}" additionalAttributes="{placeholder: '{field.title}*'}" />

But I agree: HTML5 has become a standard now, we should update the form viewhelpers to reflect that (but not only for the placeholder attribute)

#10

Updated by Adrian Föder over 8 years ago

  • Status changed from New to Closed

it's "coincidentally" resolved with https://review.typo3.org/#/c/17684/ right?

Feel free to reopen if I missed something.

#11

Updated by Bastian Waidelich over 8 years ago

Adrian Föder wrote:

it's "coincidentally" resolved with https://review.typo3.org/#/c/17684/ right?

Right, thanks Adrian ;)

Also available in: Atom PDF