6

When I try to login in to the frontend, as a customer, I get this error:

Exception #0 (Magento\Framework\Config\Dom\ValidationException): Element 'referenceBlock', attribute 'ifconfig': The attribute 'ifconfig' is not allowed.
Line: 1052

I've read about other people running into the same issue here, with the solution being this.

I've never worked with reference blocks so I am unsure if they mean that I need to edit any of the Magento files or is the problem in my extensions?

EDIT

Found this in one of my extension layout files:

<referenceBlock name="customer_account_dashboard_top" ifconfig="cancelorder/general/active" template="CancelOrder::recent.phtml">

Could this be whats causing the error?

12

Yes that's most probably it.
This is the intended behavior:
You can use ifconfig attributes only on block, ui_component, action.
referenceBlock does not allow this attribute.
The xsd section that describes referenceBlock can be found in vendor/magento/framework/View/Layout/etc/elements.xsd.

<xs:complexType name="blockReferenceType" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="action" type="actionType" minOccurs="0" maxOccurs="unbounded">
            <xs:annotation>
                <xs:documentation>
                    Argument name must be unique in scope of action.
                </xs:documentation>
            </xs:annotation>
            <xs:key name="blockReferenceActionArgumentName">
                <xs:selector xpath="argument"></xs:selector>
                <xs:field xpath="@name"></xs:field>
            </xs:key>
        </xs:element>
        <xs:element ref="arguments" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="block" minOccurs="0"/>
        <xs:element name="container" type="containerType" minOccurs="0"/>
        <xs:element ref="referenceBlock" minOccurs="0" />
        <xs:element ref="referenceContainer" minOccurs="0"/>
        <xs:element ref="uiComponent" minOccurs="0" />
    </xs:choice>
    <xs:attribute type="elementNameType" name="name" use="required"/>
    <xs:attribute type="xs:string" name="template" use="optional"/>
    <xs:attribute type="xs:boolean" name="display" default="true" use="optional"/>
    <xs:attribute type="xs:boolean" name="remove" use="optional"/>
</xs:complexType>

Nothing about ifconfig in there.

You can try a different approach to solve your issue.
I assume that you are using <referenceBlock name="customer_account_dashboard_top" to add a block or execute an action on the specified block.
You can add the ifconfig attribute on your block or action tags.

<referenceBlock name="customer_account_dashboard_top">
    <action method="setTemplate" ifconfig="cancelorder/general/active">
        <argument name="setTemplate" xsi:type="string">CancelOrder::recent.phtml</argument>
    </action>
    <!-- or -->
    <block class="..." ifconfig="cancelorder/general/active">...</block>
</referenceBlock>
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.