Pregunta

Quiero establecer el valor máximo del atributo "Fecha de nacimiento" (DOB) del cliente.

Quiero establecer esta fecha solo antes que hoy (no para el futuro). Después del cambio, quiero tener validación JS en el backend adminhtml en la pantalla de edición del cliente.

Quiero actualizar este atributo en scripts de configuración dentro de mi módulo. ¿Cómo lograr esto?

Gracias de antemano por tu ayuda.

¿Fue útil?

Solución

Debe agregar una nueva validación de JavaScript al objeto de validación y decirle al atributo "Fecha de nacimiento" para usarlo.

  1. Agregue un archivo de actualización de diseño para el área de backend y dígale a Magento que cargue un archivo JavaScript

    En tus config.xml Agregue una sección como esta:

    <config>
        <!-- ... -->
        <adminhtml>
            <layout>
                <updates>
                    <emzee_dobvalidation>
                        <file>emzee_dobvalidation/emzee_dobvalidation.xml</file>
                    </emzee_dobvalidation>
                </updates> 
            </layout>
        </adminhtml>
    </config>
    

    Crear el archivo app/design/adminhtml/default/default/layout/emzee_dobvalidation/emzee_dobvalidation.xml y agregue este contenido:

    <?xml version="1.0"?>
    <layout>
        <default>
            <reference name="head">
                <action method="addJs"><script>emzee_dobvalidation/validation.js</script></action>
            </reference>
        </default>
    </layout>    
    
  2. Agregue la validación de JavaScript al objeto de validación

    Crear el archivo js/emzee_dobvalidation/emzee_dobvalidation.js que contiene este código:

    Validation.add('validate-customer-dob','Date of birth cannot be in the future!',function(v){
        var test = new Date(v);
        var now = new Date();
    
        return test.getTime() <= now.getTime();
    });
    

    No se le permitirá establecer una fecha en el futuro.

  3. Reconfigurar el atributo "Fecha de nacimiento" para usar la validación

    Asegúrese de que su clase de configuración de extensión use una clase heredadora Mage_Eav_Model_Entity_Setup, p.ej Mage_Customer_Model_Entity_Setup.

    Agrega esto a tu config.xml:

    <config>
        <global>
            <resources>
                <emzee_dobvalidation_setup>
                    <setup>
                        <module>Emzee_DobValidation</module>
                        <class>Mage_Customer_Model_Entity_Setup</class>
                    </setup>
                </emzee_dobvalidation_setup>
            </resources>
        </global>
    </config>
    

    Cree el script de configuración actualizando su atributo (app/code/community/Emzee/DobValidation/sql/emzee_dobvalidation_setup/install-0.0.1.php):

    <?php
    
    $installer = $this;
    
    $installer->startSetup();
    
    $entityTypeId = $installer->getEntityTypeId('customer');
    $installer->updateAttribute($entityTypeId, 'dob', 'frontend_class', 'validate-customer-dob');
    
    $installer->endSetup();
    
  4. Asegúrate de que todo funcionara

    Si todo salió bien, recibirá un error al enviar una fecha en el futuro:

    No unborn customers anymore!

Tenga en cuenta que, según lo solicitado, solo es una validación de JavaScript. También puede verificar la entrada correcta en el lado del servidor. Como esto no se solicitó, lo dejé como un ejercicio en casa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top