Как мы можем сделать атрибут компонента OOTB необязательным в дочернем компоненте в SmartEdit?
Есть ли способ сделать поле компонента OOTB необязательным в дочернем компоненте в SmartEdit?
Например, я расширил CMSParagraphComponent, создав дочерний компонент, например MyCustomParagraphComponent, который расширяет CMSParagraphComponent.
OOTB CMSParagraphComponent -> атрибут содержимого является обязательным, как определено в его CMS Structure API.
<bean class="de.hybris.platform.cmsfacades.types.service.impl.DefaultComponentTypeAttributeStructure" p:typecode="CMSParagraphComponent" p:qualifier="content">
<property name="populators">
<set>
<ref bean="richTextComponentTypeAttributePopulator" />
<ref bean="requiredComponentTypeAttributePopulator" />
</set>
</property>
</bean>
requiredComponentTypeAttributePopulator делает этот атрибут обязательным. Кроме того, OOTB SmartEdit использует cmsParagraphComponentValidator также для внутренней проверки.
Теперь я хочу сделать атрибут содержимого необязательным для моего настраиваемого MyCustomParagraphComponent.
Я попытался создать новый компонент populator unRequiredComponentTypeAttributePopulator с required=false и назначить его атрибуту содержимого моего пользовательского компонента, но это не работает
Пробуем что-то вроде этого...
<bean id="unRequiredComponentTypeAttributePopulator" class="de.hybris.platform.cmsfacades.types.populator.RequiredComponentTypeAttributePopulator">
<property name="required" value="false" />
</bean>
<bean class="de.hybris.platform.cmsfacades.types.service.impl.DefaultComponentTypeAttributeStructure" p:typecode="PromotionalBannerComponent" p:qualifier="content">
<property name="populators">
<set>
<ref bean="unRequiredComponentTypeAttributePopulator" />
</set>
</property>
</bean>
Но это не работает. Похоже, что CMS Structure API работает только с атрибутами, назначенными непосредственно этому компоненту, а не родительскому.
Тогда как правильно это сделать?
1 ответ
В вашем пользовательском файле "facade-spring.xml" определите bean-компонент:
<bean id="optionalComponentTypeAttributePopulator" class="de.hybris.platform.cmsfacades.types.populator.RequiredComponentTypeAttributePopulator">
<property name="required" value="false" />
</bean>
Теперь в вашем пользовательском «facade-spring.xml» попробуйте переопределить bean-компонент Out of the Box:
<bean class="de.hybris.platform.cmsfacades.types.service.impl.DefaultComponentTypeAttributeStructure" p:typecode="CMSLinkComponent" p:qualifier="product">
<property name="populators">
<set>
<ref bean="optionalComponentTypeAttributePopulator" />
</set>
</property>
</bean>
Я проверил это локально, и это работает отлично.