0

カスタム モジュールを使用してクラスを拡張し、Mage_Adminhtml_Block_Sales_Order_Gridいくつかの顧客属性 (Magento EE 1.10) をグリッドに追加しました。

追加した属性のうち 2 つはテキスト フィールドです (つまり、それらはcustomer_entity_varcharテーブルに存在し、コレクションに追加してグリッドに表示することができました。今のところは問題ありません。

3 番目の属性は選択であるため、値はcustomer_entity_int、 、eav_attribute_optionおよびeav_attribute_option_valueテーブルに存在します。必要な値をコレクションに追加しました ( を使用し$collection->getSelect()->joinLeft(.....)ます。

私の問題は、属性を同時に表示およびフィルタリングできることです。

_prepareColumns()クラスの関数内で、MyCompany_MyModule_Block_Adminhtml_Order_Grid次のような列を追加すると、予想どおり、各行に属性の値を表示できますが、ヘッダーにドロップダウン フィルターが表示されません。

protected function _prepareColumns()
{
    ...
    $this->addColumn('bureau', array(
        'header'    => Mage::helper('sales')->__('Bureau'),
        'index'     => 'bureau',
        'type'      => 'text'
    ));
    ...
}

の例に従って、statusこのように列を追加すると、ヘッダーにドロップダウン フィルターが表示されますが、各行に属性の値が表示されなくなります。

protected function _prepareColumns()
{
    ...
    $this->addColumn('bureau', array(
        'header'    => Mage::helper('sales')->__('Bureau'),
        'index'     => 'bureau',
        'type'      => 'options',
        'options'   => $this->_getBureauOptions(),
        'filter_index' => 'value_option_table.option_id'
    ));
    ...
}   

protected function _getBureauOptions()
{
    $bureau = Mage::getResourceModel('eav/entity_attribute_collection')
        ->setCodeFilter('bureau')
        ->getFirstItem();

    $bureauOptions = $bureau->getSource()->getAllOptions(false);
    $optionsArr = array();

    foreach ($bureauOptions as $option) {
        $optionsArr[$option['value']] = $option['label'];
    }

    return $optionsArr;
} 

アドバイス/説明をいただければ幸いです。

更新: 管理者ユーザーが一部の Web サイトに対してのみ権限を持っている場合、マルチ Web サイト環境で私のコードが SQL エラーを引き起こすことも判明しました。 "SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'store_id' in where clause is ambiguous"

4

1 に答える 1

0

@clockworkgeek は私の質問の最初の部分に答えました。

問題はjoinLeft()、属性オプションからテキスト値を取得していたのに、'type => 'options'.

joinLeft()整数値のみを取得するように変更するとcustomer_entity_int(実際にはより単純な結合)、フィルタリングと表示は問題なく機能しました-ありがとうございます。

別の質問として、2 番目の問題 (パーミッションが原因の SQL エラーについて) を再投稿します。

于 2011-06-27T22:33:07.550 に答える