Magento 1.9.2.0: bảng sales sales_flat_order_grid 'chứa thêm không gian trong giá trị tên của khách hàng


19

Trong bảng quản trị, khi tôi muốn tìm kiếm các đơn hàng dựa trên tên của khách hàng, tôi phải thêm 2 khoảng trắng giữa tên và họ. Khi tôi nhìn vào giá trị trong cửa sổ phần tử Inspect, tôi nhận thấy giá trị được hiển thị với một khoảng trắng thừa. Làm thế nào tôi có thể khắc phục điều này?


1
Vẫn có mặt trong 1.9.3.10
sv3n

Câu trả lời:


23

Trong Magento 1.9.2, tên đệm đã được thêm vào cột này:

Nguồn: 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
    ));

Thật không may, họ đã không thực sự nghĩ về trường hợp khách hàng không có tên đệm. Đây là cách mã sẽ như thế nào:

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

Bạn có thể sao chép tập tin vào app/code/local/Mage/Sales/Model/Resource/Order.phpvà vá nó như mô tả.

Để sửa các bản ghi hiện có, bạn có thể sử dụng tập lệnh PHP vứt đi này:

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

Đặt nó như fixordergrid.phptrong thư mục gốc Magento, thực hiện và xóa nó. Nó có thể mất một chút thời gian, vì vậy bạn nên chạy nó từ bảng điều khiển, không phải trong trình duyệt:

php fixordergrid.php

À, có lẽ, tên đệm là một chuỗi trống sau đó và không null. Tôi cũng đã cập nhật mã để phản ánh điều này
Fabian Schmengler

Cảm ơn đã trả lời tử tế. Nó hoạt động cho các khách hàng đăng ký mới. Làm thế nào về các bản ghi cũ, nó có thể được sửa chữa thông qua truy vấn db?
Zinat

Tôi sẽ cố gắng tính toán lại bảng một lần vớiMage::getModel('sales/order')->getResource()->updateGridRecords(Mage::getResourceModel('sales/order_collection')->getAllIds());
Fabian Schmengler

Vui lòng xem cập nhật để được hướng dẫn
Fabian Schmengler

1
Tôi đã không tìm thấy nó trong trình theo dõi vấn đề, đã báo cáo ngay bây giờ: magentoc Commerce.com/orms-tracking/su/index/id/1202
Fabian Schmengler

2

Để biết thêm câu trả lời được chấp nhận, cách tốt nhất là không chỉnh sửa mã magento cốt lõi để sử dụng viết lại với bản sửa lỗi sẽ tốt hơn.

Trong cấu hình

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

3
Câu trả lời được chấp nhận không chỉnh sửa mã Magento cốt lõi, @fschmengler đang đề xuất ghi đè nhóm mã cục bộ. Mô hình cụ thể này được viết lại thường xuyên bởi các mô-đun và do đó, ghi đè nhóm mã có thể tốt hơn.
Michael Parkin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.