Twig/Symfony表单模板语法


Twig/Symfony form template syntax

我正试图修改别人的网站设置(带有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 }}" ...