Magento 1.9.2.0: tabel “sales_flat_order_grid” berisi ruang ekstra dalam nilai nama pelanggan

19

Di panel admin, ketika saya ingin mencari pesanan berdasarkan nama pelanggan, saya harus menambahkan 2 spasi antara nama depan dan nama belakang. Ketika saya melihat nilai di jendela elemen Inspect, saya perhatikan nilainya ditampilkan dengan ruang tambahan. Bagaimana saya bisa memperbaikinya?

Zinat
sumber
1
Masih hadir di 1.9.3.10
sv3n

Jawaban:

23

Di Magento 1.9.2 nama tengah telah ditambahkan ke kolom ini:

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

Sayangnya mereka tidak benar-benar memikirkan kasus di mana pelanggan tidak memiliki nama tengah. Ini adalah bagaimana kode harus terlihat seperti:

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

Anda dapat menyalin file ke app/code/local/Mage/Sales/Model/Resource/Order.phpdan menambalnya seperti yang dijelaskan.

Untuk memperbaiki catatan yang ada, Anda dapat menggunakan skrip PHP sekali pakai ini:

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

Tempatkan seperti fixordergrid.phpdi direktori root Magento, jalankan dan hapus. Mungkin perlu waktu, jadi Anda sebaiknya menjalankannya dari konsol, bukan di browser:

php fixordergrid.php
Fabian Schmengler
sumber
Ah, mungkin, nama tengahnya adalah string kosong dan bukan nol. Saya memperbarui kode untuk mencerminkan ini juga
Fabian Schmengler
Terima kasih atas balasannya. Ini berfungsi untuk pelanggan terdaftar yang baru. Bagaimana dengan catatan lama, dapatkah itu diperbaiki melalui permintaan db?
Zinat
Saya akan mencoba untuk memaksa penghitungan ulang tabel sekali denganMage::getModel('sales/order')->getResource()->updateGridRecords(Mage::getResourceModel('sales/order_collection')->getAllIds());
Fabian Schmengler
Silakan lihat pembaruan untuk instruksinya
Fabian Schmengler
1
Saya tidak menemukannya di pelacak masalah, laporkan sekarang: magentocommerce.com/bug-tracking/issue/index/id/1202
Fabian Schmengler
2

Untuk melanjutkan jawaban yang diterima, praktik terbaik adalah tidak mengedit kode magento inti sehingga menggunakan penulisan ulang dengan perbaikan akan lebih baik.

Di config.xml

<global>
    <models>
        <sales_resource>
            <rewrite>
                <order>Yournamespace_Yourextension_Model_Sales_Order_Resource_Order</order>
            </rewrite>
        </sales_resource>
    </models>
</global>
beingalex
sumber
3
Jawaban yang diterima tidak mengedit kode Magento inti, @fschmengler merekomendasikan penggantian kode lokal. Model khusus ini sering ditulis ulang oleh modul, dan oleh karena itu kode pool override mungkin lebih baik.
Michael Parkin