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.