Magento 1.9.2.0: Die Tabelle "sales_flat_order_grid" enthält zusätzlichen Platz im Kundennamen

19

Wenn ich im Admin-Bereich die Bestellungen anhand des Kundennamens durchsuchen möchte, muss ich zwischen dem Vor- und Nachnamen zwei Leerzeichen einfügen. Als ich mir den Wert im Inspect-Elementfenster ansah, bemerkte ich, dass der Wert mit einem zusätzlichen Leerzeichen angezeigt wird. Wie kann ich das beheben?

Zinat
quelle
1
Noch vorhanden in 1.9.3.10
sv3n

Antworten:

23

In Magento 1.9.2 wurde dieser Spalte der zweite Vorname hinzugefügt:

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

Leider haben sie nicht wirklich über den Fall nachgedacht, dass ein Kunde keinen zweiten Vornamen hat. So sollte der Code aussehen:

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

Sie können die Datei kopieren app/code/local/Mage/Sales/Model/Resource/Order.phpund wie beschrieben patchen.

Um die vorhandenen Datensätze zu korrigieren, können Sie dieses wegwerfbare PHP-Skript verwenden:

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

Legen Sie es wie fixordergrid.phpim Magento-Stammverzeichnis ab, führen Sie es aus und löschen Sie es. Es kann einige Zeit dauern, deshalb sollten Sie es besser über die Konsole ausführen, nicht über den Browser:

php fixordergrid.php
Fabian Schmengler
quelle
Ah, wahrscheinlich war der zweite Vorname eine leere Zeichenkette und nicht null. Ich habe den Code aktualisiert, um dies auch
wiederzugeben
Danke für die freundliche Antwort. Es funktioniert für die neu registrierten Kunden. Wie wäre es mit den alten Datensätzen, kann es durch DB-Abfrage behoben werden?
Zinat
Ich würde versuchen, eine Neuberechnung der Tabelle einmal mitMage::getModel('sales/order')->getResource()->updateGridRecords(Mage::getResourceModel('sales/order_collection')->getAllIds());
Fabian Schmengler
Anweisungen finden Sie im Update
Fabian Schmengler
1
Ich habe es im Issue-Tracker nicht gefunden und es jetzt gemeldet: magentocommerce.com/bug-tracking/issue/index/id/1202
Fabian Schmengler
2

Um die akzeptierte Antwort zu unterstützen, ist es empfehlenswert, den Kern-Magento-Code nicht zu bearbeiten. Daher ist es besser, ein Umschreiben mit dem Fix durchzuführen.

In config.xml

<global>
    <models>
        <sales_resource>
            <rewrite>
                <order>Yournamespace_Yourextension_Model_Sales_Order_Resource_Order</order>
            </rewrite>
        </sales_resource>
    </models>
</global>
beingalex
quelle
3
Die akzeptierte Antwort bearbeitet den Magento-Kerncode nicht. @Fschmengler empfiehlt eine Überschreibung des lokalen Code-Pools. Dieses spezielle Modell wird häufig von Modulen umgeschrieben, weshalb die Überschreibung des Codepools wahrscheinlich besser ist.
Michael Parkin