Magento 1.9.2.0: tabela “sales_flat_order_grid” contém espaço extra no valor do nome do cliente

19

No painel do administrador, quando quero pesquisar os pedidos com base no nome do cliente, tenho que adicionar 2 espaços entre o nome e o sobrenome. Quando observei o valor na janela do elemento Inspecionar, notei que o valor é exibido com um espaço extra. Como eu posso consertar isso?

Zinat
fonte
11
Ainda presente em 1.9.3.10
sv3n 28/09

Respostas:

23

No Magento 1.9.2, o nome do meio foi adicionado a esta coluna:

Fonte: 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
    ));

Infelizmente, eles realmente não pensaram no caso em que um cliente não tem um nome do meio. É assim que o código deve ficar:

    $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
    ));

Você pode copiar o arquivo app/code/local/Mage/Sales/Model/Resource/Order.phpe corrigi-lo conforme descrito.

Para corrigir os registros existentes, você pode usar este script PHP descartável:

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

Coloque-o como fixordergrid.phpno diretório raiz do Magento, execute e exclua-o. Pode levar algum tempo, portanto, você deve executá-lo melhor no console, não no navegador:

php fixordergrid.php
Fabian Schmengler
fonte
Ah, provavelmente, o nome do meio era uma string vazia e não nula. Eu atualizei o código para refletir isso também
Fabian Schmengler
Obrigado pela resposta gentil. Funciona para os novos clientes registrados. E quanto aos registros antigos, ele pode ser corrigido através da consulta db?
Zinat
Gostaria de tentar forçar o recálculo da tabela uma vez comMage::getModel('sales/order')->getResource()->updateGridRecords(Mage::getResourceModel('sales/order_collection')->getAllIds());
Fabian Schmengler
Consulte a atualização para obter instruções
Fabian Schmengler
11
Eu não encontrá-lo no issue tracker, informou agora: magentocommerce.com/bug-tracking/issue/index/id/1202
Fabian Schmengler
2

Para promover a resposta aceita, é uma prática recomendada não editar o código magento principal, portanto, usar uma reescrita com a correção seria melhor.

No config.xml

<global>
    <models>
        <sales_resource>
            <rewrite>
                <order>Yournamespace_Yourextension_Model_Sales_Order_Resource_Order</order>
            </rewrite>
        </sales_resource>
    </models>
</global>
beingalex
fonte
3
A resposta aceita não edita o código principal do Magento, @fschmengler está recomendando uma substituição do conjunto de códigos local. Esse modelo específico é reescrito frequentemente por módulos e, portanto, a substituição do conjunto de códigos é provavelmente melhor.
Michael Parkin