Magento 1.9.2.0:テーブル「sales_flat_order_grid」には、顧客の名前の値に余分なスペースが含まれています


19

管理パネルで、顧客名に基づいて注文を検索する場合、名と姓の間に2つのスペースを追加する必要があります。Inspect elementウィンドウで値を見ると、値に余分なスペースが表示されていることに気付きました。どうすれば修正できますか?


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、Magentoのルートディレクトリに実行し、それを削除します。しばらく時間がかかる場合がありますので、ブラウザではなくコンソールから実行する方が良いでしょう:

php fixordergrid.php

ああ、おそらく、ミドルネームは空の文字列で、nullではありませんでした。これも反映するようにコードを更新しました
ファビアンシュメングラー

親切な返事をありがとう。新規登録済みのお客様に有効です。古いレコードはどうですか、dbクエリで修正できますか?
-Zinat

私は一回表の再計算を強制しようとするMage::getModel('sales/order')->getResource()->updateGridRecords(Mage::getResourceModel('sales/order_collection')->getAllIds());
ファビアンSchmengler

手順については更新を参照してください
ファビアンシュメングラー

1
私は問題トラッカーでそれを見つけられませんでした、今報告しました:magentocommerce.com/bug-tracking/issue/index/id/1202
Fabian 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はローカルコードプールのオーバーライドを推奨しています。この特定のモデルはモジュールによって頻繁に書き換えられるため、おそらくコードプールのオーバーライドの方が優れています。
マイケルパーキン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.