Magento 1.9.2.0: “sales_flat_order_grid” tablosu müşterinin ad değerinde fazladan boşluk içeriyor


19

Yönetici panelinde, siparişleri müşteri adına göre aramak istediğimde, ad ve soyadı arasına 2 boşluk eklemem gerekiyor. Öğeyi incele penceresindeki değere baktığımda, değerin fazladan bir boşlukla görüntülendiğini fark ettim. Bunu nasıl düzeltebilirim?


1
1.9.3.10'da hala mevcut
sv3n

Yanıtlar:


23

Magento 1.9.2'de ikinci sütun bu sütuna eklenmiştir:

Kaynak: 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
    ));

Ne yazık ki, müşterinin ikinci adı olmadığı durum hakkında gerçekten düşünmediler. Bu kod nasıl olmalıdır gibi bakmak:

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

Dosyayı app/code/local/Mage/Sales/Model/Resource/Order.phpaçıklandığı gibi kopyalayabilir ve yamalayabilirsiniz.

Varolan kayıtları düzeltmek için şu atlamalı PHP komut dosyasını kullanabilirsiniz:

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

fixordergrid.phpMagento kök dizinine olduğu gibi yerleştirin, yürütün ve silin. Biraz zaman alabilir, bu yüzden tarayıcıda değil konsoldan daha iyi çalıştırmalısınız:

php fixordergrid.php

Ah, muhtemelen, ikinci isim boş bir dize idi ve boş değil. Kodu da bunu yansıtacak şekilde güncelledim
Fabian Schmengler

Nazik cevap için teşekkürler. Yeni kayıtlı müşteriler için çalışır. Eski kayıtlar nasıl olur, db sorgusu ile düzeltilebilir mi?
Zinat

Tablonun bir kez yeniden hesaplanmasını zorlamaya çalışacağımMage::getModel('sales/order')->getResource()->updateGridRecords(Mage::getResourceModel('sales/order_collection')->getAllIds());
Fabian Schmengler

Talimatlar için lütfen güncellemeye bakın
Fabian Schmengler

1
Sorun izleyicide bulamadım, şimdi rapor ettim: magentocommerce.com/bug-tracking/issue/index/id/1202
Fabian Schmengler

2

Kabul edilen cevabı daha da ileriye götürmek için, temel magento kodunu düzenlememek en iyi uygulamadır, böylece düzeltmeyle yeniden yazma kullanmak daha iyi olur.

Config.xml dosyasında

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

3
Kabul edilen yanıt çekirdek Magento kodunu düzenlemez, @fschmengler yerel kod havuzunun geçersiz kılınmasını önerir. Bu model modüller tarafından sık sık yeniden yazılır ve bu nedenle kod havuzu geçersiz kılma muhtemelen daha iyidir.
Michael Parkin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.