Magento 1.9.2.0:表“ sales_flat_order_grid”在客户的名称值中包含额外的空间


19

在管理面板中,当我要根据客户名称搜索订单时,我必须在名字和姓氏之间添加2个空格。当我在“检查元素”窗口中查看值时,我注意到该值显示有多余的空格。我该如何解决?


1
仍存在于1.9.3.10
sv3n

Answers:


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在Magento根目录中,执行并删除它。这可能需要一些时间,因此最好从控制台而不是浏览器中运行它:

php fixordergrid.php

嗯,中间名可能是一个空字符串,然后不是null。我也更新了代码以反映这一点
Fabian Schmengler,2015年

多谢您的回覆。它适用于新注册的客户。旧记录如何,可以通过db查询解决?
Zinat

我将尝试一次与Mage::getModel('sales/order')->getResource()->updateGridRecords(Mage::getResourceModel('sales/order_collection')->getAllIds());
Fabian Schmengler

请参阅说明书更新
法比安Schmengler

1
我没有发现它在问题追踪器,现报吧:magentocommerce.com/bug-tracking/issue/index/id/1202
法比安Schmengler

2

为了进一步解决这个公认的问题,最好的做法是不编辑核心的magento代码,因此使用带有此修复程序的重写会更好。

在config.xml中

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

3
可接受的答案不会编辑核心的Magento代码,@ fschmengler建议您覆盖本地代码池。该特定模型经常由模块重写,因此代码池覆盖可能更好。
迈克尔·帕金
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.