Как мы можем сделать атрибут компонента 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>

Я проверил это локально, и это работает отлично.

Другие вопросы по тегам