Magento 1.9.2.0: la tabla "sales_flat_order_grid" contiene espacio adicional en el valor del nombre del cliente

19

En el panel de administración, cuando quiero buscar los pedidos según el nombre del cliente, debo agregar 2 espacios entre el nombre y el apellido. Cuando miré el valor en la ventana del elemento Inspeccionar, noté que el valor se muestra con un espacio adicional. ¿Cómo puedo arreglar esto?

Zinat
fuente
1
Todavía presente en 1.9.3.10
sv3n

Respuestas:

23

En Magento 1.9.2, el segundo nombre se ha agregado a esta columna:

Fuente: https://github.com/OpenMage/magento-mirror/blob/magento-1.9/app/code/core/Mage/Sales/Model/Resource/Order.php#L93-L99

    $ifnullFirst   = $adapter->getIfNullSql('{{table}}.firstname', $adapter->quote(''));
    $ifnullMiddle  = $adapter->getIfNullSql('{{table}}.middlename', $adapter->quote(''));
    $ifnullLast    = $adapter->getIfNullSql('{{table}}.lastname', $adapter->quote(''));
    $concatAddress = $adapter->getConcatSql(array(
        $ifnullFirst,
        $adapter->quote(' '),
        $ifnullMiddle,
        $adapter->quote(' '),
        $ifnullLast
    ));

Desafortunadamente, realmente no pensaron en el caso en que un cliente no tiene un segundo nombre. Así es como debería verse el código :

    $ifnullFirst   = $adapter->getIfNullSql('{{table}}.firstname', $adapter->quote(''));
    $ifnullMiddle  = $adapter->getIfNullSql('{{table}}.middlename', $adapter->quote(''));
    $ifnullLast    = $adapter->getIfNullSql('{{table}}.lastname', $adapter->quote(''));
    $concatAddress = $adapter->getConcatSql(array(
        $ifnullFirst,
        $adapter->quote(' '),
        $ifnullMiddle,
        new Zend_Db_Expr('IF({{table}}.middlename IS NULL OR {{table}}.middlename="", "", " ")'),
        $ifnullLast
    ));

Puede copiar el archivo app/code/local/Mage/Sales/Model/Resource/Order.phpy parchearlo como se describe.

Para arreglar los registros existentes, puede usar este script PHP desechable:

<?php
require 'app/Mage.php';
Mage::app();
Mage::getModel('sales/order')->getResource()->updateGridRecords(
    Mage::getResourceModel('sales/order_collection')->getAllIds()); 
echo 'done';

Colóquelo como fixordergrid.phpen el directorio raíz de Magento, ejecútelo y elimínelo. Puede llevar algo de tiempo, por lo que es mejor que lo ejecute desde la consola, no en el navegador:

php fixordergrid.php
Fabian Schmengler
fuente
Ah, probablemente, el segundo nombre era una cadena vacía y no nula. También actualicé el código para reflejar esto
Fabian Schmengler
Gracias por la amable respuesta. Funciona para los nuevos clientes registrados. ¿Qué hay de los registros antiguos, se puede arreglar a través de la consulta db?
Zinat
Intentaría forzar el recálculo de la mesa una vez conMage::getModel('sales/order')->getResource()->updateGridRecords(Mage::getResourceModel('sales/order_collection')->getAllIds());
Fabian Schmengler
Consulte la actualización para obtener instrucciones
Fabian Schmengler
1
No lo encontré en el rastreador de problemas, lo informé ahora: magentocommerce.com/bug-tracking/issue/index/id/1202
Fabian Schmengler el
2

Para promover la respuesta aceptada, se recomienda no editar el código principal de magento, por lo que sería mejor usar una reescritura con la solución.

En config.xml

<global>
    <models>
        <sales_resource>
            <rewrite>
                <order>Yournamespace_Yourextension_Model_Sales_Order_Resource_Order</order>
            </rewrite>
        </sales_resource>
    </models>
</global>
siendoalex
fuente
3
La respuesta aceptada no edita el código principal de Magento, @fschmengler recomienda una anulación de grupo de código local. Este modelo en particular es reescrito a menudo por módulos y, por lo tanto, la anulación del grupo de códigos es probablemente mejor.
Michael Parkin