我正试图修改别人的网站设置(带有Laravel插件的Craft CMS),但我无法破译这个Twig表单的语法,我希望更熟悉Twig/Symfony表单模板的人能告诉我发生了什么,或者给我指给正确的文档。
具体来说,我有一个变量,我想在输入中呈现为占位符。所以{{ myvariable }}
应该是<input type="text" placeholder="{{ myvariable }}" ...
,但我不熟悉输入是如何呈现的。
以下是Twig模板中的内容:
{% include "dir/content_type/_field" with {
control: { handle: 'location_address_1', value: 'address_1'},
element: content_type,
errors: errors is defined ? errors : null
} only %}
我假设字段是附近的html模板,它有:
{% 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 %}
任何见解都值得赞赏。
_field模板根据初始include调用为字段设置一些参数。_field处理其中的一些参数,然后用处理后的值和输入变量中的字段html调用_includes/forms/field。
craft.fields.getFieldbyHandle()获取字段对象。来自该对象的看起来像fieldtype.getInputHtml(field.handle, value
)`正在为输入生成实际的HTML。因此,您需要找到getInputHtml的定义位置,并通过占位符传递到那里。更改该函数以使用占位符属性构建html。
类似
最终模板
{% 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 %}
_字段
...
{% set input = fieldtype.getInputHtml(field.handle, value, control['placeholder']) %}
getInputHTML(句柄、值、占位符)
<input type="text" placeholder="{{ placeholder }}" ...