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?


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

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>

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.