Uso del Sections.xml

En web Storage se guardan datos de customer, cart, address etc. Si queremos que se renueven los datos, tenemos que usar el fichero sections.xml o usar algún fichero javascript y poner allí código para forzar la renovación de los datos.

Un ejemplo del sections.xml

        
            <?xml version="1.0"?>
                <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Customer:etc/sections.xsd">
                    <action name="customer/account/logout">
                        <section name="*"/>
                    </action>
                    <action name="customer/account/loginPost">
                        <section name="*"/>
                    </action>
                    <action name="customer/account/createPost">
                        <section name="*"/>
                    </action>
                    <action name="customer/account/editPost">
                        <section name="*"/>
                    </action>
                    <action name="customer/ajax/login">
                        <section name="checkout-data"/>
                        <section name="cart"/>
                    </action>
                </config>
        
    

En la etiqueta action se pone el path de la url a la que se hará petición post y en la etiqueta section se ponen secciones que se renovarán después de la petición post. Ojo! Esta petición post tiene que llevar el header XMLHttpRequest (x-requested-with: XMLHttpRequest) en la solicitud para que Magento la considere una petición válida del tipo POST o PUT. No es posible forzar la renovación de estos datos a través del Backend, con php. Hay que hacerlo por javascript.

Después de la petición POST, se hará inmediatamente una petición GET O HEAD para renovar localstorage. Sólo este tipo de peticiones pueden ser cacheadas. El siguiente ejemplo se renuevan todas las secciones.

        https://ejemplo.com/customer/section/load/?sections=messages,customer,compare-products,last-ordered-items,cart,directory-data,captcha,instant-purchase,persistent,review,wishlist,recently_viewed_product,recently_compared_product,product_data_storage,paypal-billing-agreement&force_new_section_timestamp=false&_=1641891224956
    

Entonces, un ejemplo para implementar esta funcionalidad puede ser la integración de algún api de Google o Facebook. Después de hacer petición a esas apis, nos devuelve respuesta con nombre y mail del cliente, entonces usando algún callback del javascript mediante el método JSONP, recogemos los datos y los enviamos al servidor para procesarlos. Entonces necesitaremos usar sections.xml si los datos procesados tienen que estar en el localstorage.

Referencias