Я разработал собственный элемент формы CMS, похожий на контактную форму, но с дополнительными полями. Однако в моей пользовательской форме поле приветствия не отображает параметры. Ниже представлен вид моего элемента на витрине:
{% block element_form %}
{% set config = element.fieldConfig.elements %}
<div class = "cms-element-contact">
<div class = "row justify-content-center">
<div class = "col-lg-12">
{% set formViolations = app.request.get('errors') %}
<div class = "card">
<div class = "card-body">
<div class = "card-title mb-4" v-if = "element.config.title.value.length > 0">
{{ element.config.title.value }}
</div>
{% block cms_packageform %}
<form action = "" method = "post" data-form-validation = "true">
<div class = "form-content">
<div class = "row g-2">
{% block cms_packageform_select_salutation %}
{% sw_include '@Storefront/storefront/element/cms-element-form/form-components/cms-element-form-select-salutation.html.twig'
with {
additionalClass: 'col-md-6',
required: true
}
%}
{% endblock %}
{% block cms_packageform_input_first_name %}
{% sw_include '@Storefront/storefront/element/cms-element-form/form-components/cms-element-form-input.html.twig'
with {
fieldName: 'firstName',
required: true,
additionalClass: 'col-md-6',
label: 'packageform.label.firstName',
placeholder: 'packageform.placeholder.firstName'
}
%}
{% endblock %}
</div>
<div class = "row g-2">
{% block cms_packageform_input_email %}
{% sw_include '@Storefront/storefront/element/cms-element-form/form-components/cms-element-form-input.html.twig'
with {
fieldName: 'email',
type: 'email',
required: true,
additionalClass: 'col-md-6',
label: 'packageform.label.email',
placeholder: 'packageform.placeholder.email'
}
%}
{% endblock %}
{% block cms_packageform_input_phome %}
{% set phoneNumberFieldRequired = config('core.basicInformation.phoneNumberFieldRequired') == true %}
{% sw_include '@Storefront/storefront/element/cms-element-form/form-components/cms-element-form-input.html.twig'
with {
fieldName: 'phone',
required: true,
additionalClass: 'col-md-6',
label: 'packageform.label.phone',
placeholder: 'packageform.placeholder.phone'
}
%}
{% endblock %}
</div>
<div class = "row g-2">
{% block cms_packageform_input_street %}
{% sw_include '@Storefront/storefront/element/cms-element-form/form-components/cms-element-form-input.html.twig'
with {
required: true,
fieldName: 'street',
additionalClass: 'col-md-4',
label: 'packageform.label.street',
placeholder: 'packageform.placeholder.street'
}
%}
{% endblock %}
{% block cms_packageform_input_city %}
{% sw_include '@Storefront/storefront/element/cms-element-form/form-components/cms-element-form-input.html.twig'
with {
required: true,
fieldName: 'city',
additionalClass: 'col-md-4',
label: 'packageform.label.city',
placeholder: 'packageform.placeholder.city'
}
%}
{% endblock %}
{% block cms_packageform_input_zip %}
{% sw_include '@Storefront/storefront/element/cms-element-form/form-components/cms-element-form-input.html.twig'
with {
required: true,
fieldName: 'zip',
additionalClass: 'col-md-4',
label: 'packageform.label.zip',
placeholder: 'packageform.placeholder.zip'
}
%}
{% endblock %}
</div>
<div class = "row g-2">
{% block cms_packageform_input_packagetype %}
<div class = "col-md-4">
<label class = "form-label" for = "form-qty">{{ packageform.label.packagetype }}</label>
<select name = "package['type']" id = "packageform-packageType" required = "required" class = "form-select">
<option value = "1">
Type 1
</option>
<option value = "2">
Type 2
</option>
</select>
</div>
{% endblock %}
{% block cms_packageform_input_qty %}
{% sw_include '@Storefront/storefront/element/cms-element-form/form-components/cms-element-form-input.html.twig'
with {
required: true,
fieldName: 'qty',
additionalClass: 'col-md-4',
label: 'packageform.label.quantity',
placeholder: 'Quantity',
}
%}
{% endblock %}
<div class = "col-md-4">
<button >Add Package</button>
</div>
</div>
{% block cms_packageform_submit %}
{% sw_include '@Storefront/storefront/element/cms-element-form/form-components/cms-element-form-submit.html.twig' %}
{% endblock %}
</div>
</form>
{% endblock %}
</div>
</div>
</div>
</div>
</div>
{% endblock %}
Подскажите, пожалуйста, как добавить поле динамического приветствия в форму выше.
При создании пользовательских элементов CMS иногда необходимо использовать другие сущности. В этих случаях вы можете реализовать специальный CmsElementResolver
для разрешения данных конфигурации.
PackageFormCmsElementResolver.php
в каталоге <plugin root>/src/Core/Content/Cms/DataResolver/Element/
.Содержимое файла PackageFormCmsElementResolver.php
:
<?php declare(strict_types=1);
namespace Swag\BasicExample\Core\Content\Cms\DataResolver\Element;
use Shopware\Core\Content\Cms\DataResolver\Element\FormCmsElementResolver;
class PackageFormCmsElementResolver extends FormCmsElementResolver
{
public function getType(): string
{
return 'package-form';
}
}
Наш собственный преобразователь основан на FormCmsElementResolver. Как видите, метод getType
отражает имя элемента CMS.
<plugin root>/src/Resources/config/services.xml
.Содержимое файла services.xml
:
<?xml version = "1.0" ?>
<container xmlns = "http://symfony.com/schema/dic/services"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id = "Swag\BasicExample\Core\Content\Cms\DataResolver\Element\PackageFormCmsElementResolver">
<argument type = "service" id = "Shopware\Core\System\Salutation\SalesChannel\SalutationRoute"/>
<tag name = "shopware.cms.data_resolver"/>
</service>
</services>
</container>
Выбор приветствий теперь будет доступен в пользовательском элементе формы CMS.
Для получения дополнительной информации вы можете обратиться к документации.