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.