Magento 1.9.2.0: tabela „Sales_flat_order_grid” zawiera dodatkowe miejsce w wartości nazwy klienta


19

W panelu administracyjnym, gdy chcę wyszukiwać zamówienia na podstawie nazwy klienta, muszę dodać 2 spacje między imieniem i nazwiskiem. Kiedy spojrzałem na wartość w oknie Inspect element, zauważyłem, że wartość jest wyświetlana z dodatkową spacją. Jak mogę to naprawić?


1
Nadal obecny w 1.9.3.10
sv3n

Odpowiedzi:


23

W Magento 1.9.2 drugie imię zostało dodane do tej kolumny:

Źródło: 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
    ));

Niestety tak naprawdę nie myśleli o sprawie, w której klient nie ma drugiego imienia. Tak powinien wyglądać kod :

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

Możesz skopiować plik app/code/local/Mage/Sales/Model/Resource/Order.phpi załatać go zgodnie z opisem.

Aby naprawić istniejące rekordy, możesz użyć tego wysuwanego skryptu PHP:

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

Umieść go jak fixordergrid.phpw katalogu głównym Magento, uruchom i usuń. Może to zająć trochę czasu, więc lepiej uruchomić go z konsoli, a nie w przeglądarce:

php fixordergrid.php

Ach, prawdopodobnie drugie imię było wówczas pustym ciągiem, a nie zerowym. Zaktualizowałem również kod, aby to odzwierciedlić
Fabian Schmengler

Dziękuję za miłą odpowiedź. Działa dla nowych zarejestrowanych klientów. Co powiesz na stare rekordy, czy można to naprawić za pomocą zapytania db?
Zinat

Spróbowałbym wymusić ponowne przeliczenie stołu raz zMage::getModel('sales/order')->getResource()->updateGridRecords(Mage::getResourceModel('sales/order_collection')->getAllIds());
Fabianem Schmengler

Proszę zobaczyć aktualizację instrukcji
Fabian Schmengler

1
Nie znalazłem go w narzędziu do śledzenia problemów, zgłosiłem to teraz: magentocommerce.com/bug-tracking/issue/index/id/1202
Fabian Schmengler

2

Aby uzyskać dalszą akceptowaną odpowiedź, najlepszą praktyką jest nie edytowanie podstawowego kodu magento, więc lepsze byłoby użycie przepisania z poprawką.

W config.xml

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

3
Przyjęta odpowiedź nie edytuje podstawowego kodu Magento, @fschmengler zaleca zastąpienie lokalnej puli kodów. Ten konkretny model jest często przepisywany przez moduły, dlatego też zastąpienie puli kodów jest prawdopodobnie lepsze.
Michael Parkin,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.