2

Magento 1.7.0.0 の注文グリッドにカスタム列を追加する際にこの問題が発生しました。ここで手を差し伸べてくれることを願っていました。基本的に、私はこのガイドhttp://www.atwix.com/magento/customize-orders-grid/に従って、ローカル バージョンを/app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php作成し、必要な列を追加するためにいくつかの変更を加える必要があると説明しました。上記のガイドに従うことで、関数を編集して_prepareCollection()この行を追加する必要があると言われました(配列で抽出するフィールドを指定します)

$collection->getSelect()->join('magento_sales_flat_order_address', 'main_table.entity_id = magento_sales_flat_order_address.parent_id',array('telephone', 'email'));

return parent::_prepareCollection();

そして、次の_prepareColumns()ように 2 つの列を追加します。

$this->addColumn('telephone', array(
        'header' => Mage::helper('sales')->__('Telephone'),
        'index' => 'telephone',
    ));

$this->addColumn('email', array(
        'header' => Mage::helper('sales')->__('Email'),
        'index' => 'email',
    ));

そして、それはどうやらそれでした...または、そうではないかもしれません。それを行うと、次のエラーがスローされるためです。

Item (Mage_Sales_Model_Order) with the same id "XXXX" already exist

下のコメントによると、解決策は_prepareCollectionbefore に次の行を追加することでした$this->setCollection($collection):

$collection->getSelect()->group('main_table.entity_id');

行を追加した後、Order Grid には希望どおりに Email 列と Phone 列が表示されますが、ページネーションが機能しなくなり、最新の 20 のみが表示され、 「Pages 1 out of 1」「2 レコード」と表示されます。見つかった」を上に表示します。なぜこれが起こっているのか理解できないようで、周りにあるすべてのコメントは上記の最後の指示を超えていません。この問題の原因は何でしょうか?

このモデルの他の変更を行っていないため、複製できると思います。

4

3 に答える 3

5

了解しました。解決しました。これは私がしたことです:この回答に触発されてhttps://stackoverflow.com/a/4219386/2009617、私はファイルのコピーを作成し、lib/Varien/Data/Collection/Db.phpそれを下に置きapp/core/local/Varien/Data/Collection/Db.php、グループ選択カウントエラーを修正するためにその回答で提案された変更をコピーしましたそれは私に上記の問題を与えていました。これまでのところ、それは機能しているように見えました。

ただし、行に問題があり、注文をクリックすると、注文が「もう存在しません」と表示されたため、実際のURLを確認したところ、URLのorder_idがorder_addressテーブル。これは、注文の実際の関連付けID(parent_id)に対応していませんでした。MySQLクエリで長い間調整した後、問題は、間違ったIDを取得していたため、作成した関数_prepareColumns()getRowUrl()関数によって呼び出された関数にあることに気付きました。/app/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.phpそこで、次の変更を行いました。

では_prepareColumns()、Action列に対応するコード内で、次のように「getter」「getParentId」に変更しました。

 if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/view')) {
        $this->addColumn('action',
            array(
                'header'    => Mage::helper('sales')->__('Action'),
                'width'     => '50px',
                'type'      => 'action',
                //~ 'getter'     => 'getId',
                'getter'     => 'getParentId',
                'actions'   => array(
                    array(
                        'caption' => Mage::helper('sales')->__('View'),
                        'url'     => array('base'=>'*/sales_order/view'),
                        'field'   => 'order_id',
                    )
                ),
                'filter'    => false,
                'sortable'  => false,
                'index'     => 'stores',
                'is_system' => true,
        ));
    }

そして、関数では、次のように関数getRowUrl()内の$rowステートメントを変更しました。getUrl()

public function getRowUrl($row)
{
    if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/view')) {
        //~ return $this->getUrl('*/sales_order/view', array('order_id' => $row->getId()));
        return $this->getUrl('*/sales_order/view', array('order_id' => $row->getParentId()));
    }
    return false;
}

そして今、それは魅力のように機能します。これが他の誰かに役立つことを願っています。

于 2013-01-26T12:20:08.410 に答える
0

addColumn 関数で filter_index を使用してみてください。

$this->addColumn('telephone', array(
    'header' => Mage::helper('sales')->__('Telephone'),
    'index' => 'telephone',
     'filter_index' => 'tablename.telephone'
));

SQLクエリを出力してテーブル名を見つけることができます:

var_dump((string)$collection->getSelect())
于 2013-01-25T09:07:29.210 に答える