Magento 1.9.2.0: ตาราง“ sales_flat_order_grid” มีพื้นที่พิเศษในมูลค่าชื่อลูกค้า


19

ในแผงผู้ดูแลระบบเมื่อฉันต้องการค้นหาคำสั่งซื้อตามชื่อลูกค้าฉันต้องเพิ่ม 2 ช่องว่างระหว่างชื่อและนามสกุล เมื่อฉันดูค่าในหน้าต่างองค์ประกอบตรวจสอบฉันสังเกตเห็นว่าค่านั้นถูกแสดงด้วยพื้นที่พิเศษ ฉันจะแก้ไขได้อย่างไร


1
ยังคงมีอยู่ใน 1.9.3.10
sv3n

คำตอบ:


23

ใน Magento 1.9.2 มีการเพิ่มชื่อกลางในคอลัมน์นี้:

ที่มา: 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
    ));

น่าเสียดายที่พวกเขาไม่ได้คิดถึงกรณีที่ลูกค้าไม่มีชื่อกลาง นี่คือลักษณะของรหัสที่ควรเป็น :

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

คุณสามารถคัดลอกไฟล์app/code/local/Mage/Sales/Model/Resource/Order.phpและแก้ไขตามที่อธิบายไว้

เพื่อแก้ไขระเบียนที่มีอยู่คุณสามารถใช้สคริปต์ PHP ใบนี้:

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

วางไว้fixordergrid.phpในไดเรกทอรีรากของวีโอไอพีเรียกใช้และลบทิ้ง อาจใช้เวลาสักครู่ดังนั้นคุณควรเรียกใช้จากคอนโซลไม่ใช่ในเบราว์เซอร์:

php fixordergrid.php

อาอาจเป็นชื่อกลางเป็นสตริงว่างแล้วและไม่เป็นโมฆะ ฉันอัปเดตรหัสเพื่อสะท้อนสิ่งนี้เช่นกัน
Fabian Schmengler

ขอบคุณสำหรับการตอบกลับที่ดี มันทำงานให้กับลูกค้าที่ลงทะเบียนใหม่ วิธีการเกี่ยวกับบันทึกเก่าสามารถแก้ไขผ่านแบบสอบถาม db?
Zinat

ฉันจะพยายามบังคับให้คำนวณตารางใหม่อีกครั้งด้วยMage::getModel('sales/order')->getResource()->updateGridRecords(Mage::getResourceModel('sales/order_collection')->getAllIds());
Fabian Schmengler

โปรดดูการปรับปรุงสำหรับคำแนะนำ
Fabian Schmengler

1
ฉันไม่พบในตัวติดตามปัญหารายงานตอนนี้: magentocommerce.com/bug-tracking/issue/index/id/1202
Fabian Schmengler

2

เพื่อเพิ่มเติมคำตอบที่ยอมรับเป็นแนวปฏิบัติที่ดีที่สุดที่จะไม่แก้ไขโค้ดหลักของวีโอไอพีหลักดังนั้นการใช้การเขียนซ้ำด้วยการแก้ไขจะดีกว่า

ใน config.xml

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

3
คำตอบที่ยอมรับไม่ได้แก้ไขรหัสหลักของวีโอไอพี @fschmengler ขอแนะนำให้แทนที่รหัสพูลในเครื่อง โมเดลเฉพาะนี้ถูกเขียนใหม่บ่อยครั้งโดยโมดูลดังนั้นการแทนที่รหัสพูลน่าจะดีกว่า
Michael Parkin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.