Magento 1.9.2.0: таблиця “sales_flat_order_grid” містить додаткове місце у значенні імені клієнта


19

У панелі адміністратора, коли я хочу шукати замовлення на основі імені клієнтів, я повинен додати 2 пробіли між іменем та прізвищем. Коли я подивився на значення у вікні елемента Огляд, я помітив, що значення відображається з додатковим пробілом. Як я можу це виправити?


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

А, мабуть, прізвище тоді було порожнім рядком і не було нульовим. Я оновив код, щоб це відобразив і
Фабіан Шменглер,

Дякую за добру відповідь. Він працює для нових зареєстрованих клієнтів. Як щодо старих записів, чи можна це виправити за допомогою db-запиту?
Зінат

Я б спробував один раз змусити перерахунок таблиціMage::getModel('sales/order')->getResource()->updateGridRecords(Mage::getResourceModel('sales/order_collection')->getAllIds());
Фабіан Шменглер

Будь ласка, дивіться оновлення для інструкцій
Fabian 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 рекомендує замінити пул локального коду. Ця конкретна модель часто переписується модулями, і, отже, перекриття пулу коду, ймовірно, краще.
Майкл Паркін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.