Symfony oro平台:覆盖oro_datetime_小部件选项 上下文

Symfony oro平台:覆盖oro_datetime_小部件选项 上下文,symfony,orocrm,orocommerce,Symfony,Orocrm,Orocommerce,实际上,我正在尝试更改OroDateTimeType::class的时间输入的默认占位符 例如,我想要文本Horaires,而不是Temps 这是我的表单类型中的“我的表单”字段: ->add('expirationDate',OroDateTimeType::class[ “label'=>“app.subscription.fields.expirationDate”, ]) 在我看来: form_row(form.expirationDate) 问题 开始时,我尝试使用Symfony

实际上,我正在尝试更改
OroDateTimeType::class
的时间输入的默认占位符

例如,我想要文本
Horaires
,而不是
Temps

这是我的表单类型中的“我的表单”字段:

->add('expirationDate',OroDateTimeType::class[
“label'=>“app.subscription.fields.expirationDate”,
])
在我看来:

form_row(form.expirationDate)
问题 开始时,我尝试使用Symfony 4
占位符
选项作为日期时间类型:。它不起作用,因为
orodetime
使用了不同的日期选择器,并且在加载时覆盖了Symfony值:

{# vendor/oro/platform/src/Oro/Bundle/FormBundle/Resources/views/Form/fields.html.twig #}

{% block oro_datetime_widget %}
    {% set dateValidation = {'Date' : {}} %}
    {% set timeValidation = {'Time' : {}} %}

    {% if required %}
        {% set dateValidation = dateValidation|merge({'NotBlank' : {}}) %}
        {% set timeValidation = timeValidation|merge({'NotBlank' : {}}) %}
    {% endif %}

    {% if attribute(attr, 'class') is defined %}
        {% set attrClass = attr['class'] %}
    {% else %}
        {% set attrClass = '' %}
    {% endif %}

    {% set options = {
        view: 'oroui/js/app/views/datepicker/datetimepicker-view',
        nativeMode: isMobileVersion(),
        dateInputAttrs: {
            placeholder: 'oro.form.choose_date'|trans,
            id: id,
            name: id,
            class: 'input-small datepicker-input ' ~ attrClass,
            'data-validation': dateValidation|json_encode(constant('JSON_FORCE_OBJECT')),
            'aria-live': 'assertive',
            autocomplete: 'off',
            autocorrect: 'off',
            autocapitalize: 'off'
        },
        datePickerOptions: {
            altFormat: 'yy-mm-dd',
            changeMonth: true,
            changeYear: true,
            yearRange: years|default('-80:+1'),
            showButtonPanel: true
        },
        timeInputAttrs: {
            placeholder: 'oro.form.choose_time'|trans,
            id: 'time_selector_' ~ id,
            name: 'time_selector_' ~ id,
            class: 'input-small timepicker-input ' ~ attrClass,
            'data-validation': timeValidation|json_encode(constant('JSON_FORCE_OBJECT'))
        },
        timePickerOptions: {
        }
    } %}
    {% set id = 'hidden_' ~ id %}
    {% set attr = attr|merge({
        'data-page-component-module': 'oroui/js/app/components/view-component',
        'data-page-component-options': options|json_encode(constant('JSON_FORCE_OBJECT'))
    }) %}

    {{ block('datetime_widget') }}
{% endblock oro_datetime_widget %}
如果我从
选项
变量中更改值
timeinputtrs.placeholder
。它起作用了。 但是,我想把这个变量传递给我的特定表单字段,而不是全局传递

更新 我最终选择更改
oro.form。在我的项目中选择\u time
翻译

因此,在我的
Resources/translations/messages.fr\u fr.yml
中,我创建了以下行:

oro:
表格:
选择时间:Horaires
认证:
说明:
主播:巴尔的摩
然后,我知道翻译是在
var/cache/dev/translations/catalog.fr\u fr
中的一个文件中生成的:


覆盖Oro应用程序UI中任何文本的最简单方法是覆盖用于呈现该文本的消息的翻译。由于表单占位符也会被翻译,因此可以使用此技术。如果这是表单所需的唯一自定义项,请遵循

如果要覆盖HTML,可以通过以下方式扩展模板


但是,如果您想修改单个表单的标签,那么最好的方法是使用新选项修改和覆盖单个表单字段。

感谢您提供了不同的方法。我已经用你的第一个解决方案更新了我问题的最后一部分。当你已经用Crowdin的更新或UI中的手动编辑覆盖翻译时,YAML更改将不再应用。在这种情况下,您必须编写数据迁移来更新数据库中加载的翻译。