2016-04-14 8 views
0

Ich versuche, das Setup einer anderen Person zu ändern (ein Craft CMS mit einem Laravel-Plugin), aber ich kann die Syntax dieses Twig-Formulars nicht entziffern, ich hoffte jemanden, der mit Twig besser vertraut ist/Symfony Form Templating könnte mir sagen, was los ist oder mich auf die richtige Dokumentation verweisen.Twig/Symfony Formularvorlagensyntax

Insbesondere habe ich eine Variable, die ich als Platzhalter in einer Eingabe rendern möchte. Also {{ myvariable }} sollte <input type="text" placeholder="{{ myvariable }}" ... sein, aber ich bin nicht vertraut mit, wie die Eingänge gerendert werden.

Hier ist, was in der Zweig-Vorlage ist:

{% include "dir/content_type/_field" with { 
    control: { handle: 'location_address_1', value: 'address_1'}, 
    element: content_type, 
    errors: errors is defined ? errors : null 
} only %} 

Die _field Ich gehe davon eine in der Nähe HTML-Template, das hat:

{% set field = craft.fields.getFieldbyHandle(control['handle']) %} 
{% set fieldtype = craft.fields.populateFieldType(field, element) %} 
{% set value = element ? element[control['value']] : null %} 
{% set required = required is defined ? required : false %} 
{% set input = fieldtype.getInputHtml(field.handle, value) %} 
{% set label = no_label is defined and no_label ? '' : field.name|t|e%} 
{% set errors = errors is defined and errors[control['value']] is defined ?  errors[control['value']] : null %} 
{% include "_includes/forms/field" with { 
    label: label, 
    id: field.handle, 
    errors: errors, 
    input: input, 
    required: required 
} only %} 

Einsicht geschätzt wird.

Antwort

1

Die _field-Vorlage legt einige Parameter für das Feld basierend auf dem anfänglichen Include-Aufruf fest. Das _field verarbeitet einige dieser Parameter und ruft dann das Feld _includes/forms/mit den verarbeiteten Werten und dem Feld html in der Eingabevariablen auf.

craft.fields.getFieldbyHandle() ruft Ihr Feldobjekt ab. Die von diesem Objekt Es sieht aus wie fieldtype.getInputHtml(field.handle, value) `erzeugt das eigentliche HTML für die Eingabe. Also musst du herausfinden wo getInputHtml definiert ist und passiere deinen Platzhalter dort hin. Ändern Sie diese Funktion, um den HTML-Code mit Ihrem Platzhalterattribut zu erstellen.

Etwas wie so

endgültige Vorlage

{% include "dir/content_type/_field" with { 
    control: { handle: 'location_address_1', value: 'address_1', placeholder: "[Place holder value]"}, 
    element: content_type, 
    errors: errors is defined ? errors : null  
} only %} 

_field

... 
{% set input = fieldtype.getInputHtml(field.handle, value, control['placeholder']) %} 

getInputHTML (Griff, den Wert, Platzhalter)

<input type="text" placeholder="{{ placeholder }}" ... 
+0

erstaunlich. Danke – OrdinaryHuman