Magento 1.9.2.0: la tabella "sales_flat_order_grid" contiene spazio aggiuntivo nel valore del nome del cliente


19

Nel pannello di amministrazione, quando voglio cercare gli ordini in base al nome del cliente, devo aggiungere 2 spazi tra il nome e il cognome. Quando ho guardato il valore nella finestra dell'elemento Inspect, ho notato che il valore è visualizzato con uno spazio aggiuntivo. Come posso risolvere questo?


1
Ancora presente in 1.9.3.10
sv3n,

Risposte:


23

In Magento 1.9.2 il secondo nome è stato aggiunto a questa colonna:

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

Sfortunatamente non hanno davvero pensato al caso in cui un cliente non ha un secondo nome. Ecco come dovrebbe apparire il codice :

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

È possibile copiare il file app/code/local/Mage/Sales/Model/Resource/Order.phpe correggerlo come descritto.

Per correggere i record esistenti, puoi usare questo script PHP usa e getta:

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

Posizionalo come fixordergrid.phpnella directory principale di Magento, eseguilo ed eliminalo. Potrebbe volerci un po 'di tempo, quindi è meglio eseguirlo dalla console, non nel browser:

php fixordergrid.php

Ah, probabilmente, il secondo nome era una stringa vuota allora e non nulla. Ho aggiornato il codice per riflettere anche questo
Fabian Schmengler,

Grazie per la cortese risposta. Funziona per i nuovi clienti registrati. Che ne dici dei vecchi record, può essere risolto tramite query db?
Zinat,

Vorrei provare a forzare il ricalcolo della tabella una volta conMage::getModel('sales/order')->getResource()->updateGridRecords(Mage::getResourceModel('sales/order_collection')->getAllIds());
Fabian Schmengler,

Si prega di consultare l'aggiornamento per le istruzioni
Fabian Schmengler,

1
Non l'ho trovato nel tracker dei problemi, l'ho segnalato ora: magentocommerce.com/bug-tracking/issue/index/id/1202
Fabian Schmengler

2

Per favorire la risposta accettata, è consigliabile non modificare il codice Magento di base, quindi sarebbe meglio usare una riscrittura con la correzione.

In config.xml

<global>
    <models>
        <sales_resource>
            <rewrite>
                <order>Yournamespace_Yourextension_Model_Sales_Order_Resource_Order</order>
            </rewrite>
        </sales_resource>
    </models>
</global>

3
La risposta accettata non modifica il codice Magento di base, @fschmengler consiglia una sostituzione del pool di codici locale. Questo particolare modello viene riscritto spesso dai moduli, e quindi l'override del pool di codici è probabilmente migliore.
Michael Parkin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.