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?


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

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>

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.