마 젠토 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

아, 아마도 중간 이름은 빈 문자열이었고 null이 아니 었습니다. 이것을 반영하기 위해 코드를 업데이트했습니다
Fabian Schmengler

친절한 답변 감사합니다. 신규 등록 고객에게 적용됩니다. 이전 레코드는 DB 쿼리를 통해 수정할 수 있습니까?
Zinat

내가 한 번 테이블의 재 계산을 강제로 시도 할 것Mage::getModel('sales/order')->getResource()->updateGridRecords(Mage::getResourceModel('sales/order_collection')->getAllIds());
파비안 Schmengler에게

지침을 보려면 업데이트를 참조하십시오
Fabian Schmengler

1
나는 이슈 트래커에서 찾을하지 않았다, 지금보고 : magentocommerce.com/bug-tracking/issue/index/id/1202
파비안 Schmengler

2

허용 된 답변을 더 나아가려면 핵심 마 젠토 코드를 편집하지 않는 것이 좋습니다. 따라서 수정으로 다시 쓰는 것이 더 좋습니다.

config.xml에서

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

3
허용 된 답변은 핵심 Magento 코드를 편집하지 않으므로 @fschmengler는 로컬 코드 풀 재정의를 권장합니다. 이 특정 모델은 모듈에 의해 자주 다시 작성되므로 코드 풀 재정의가 더 좋습니다.
Michael Parkin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.