私はかなりの量のグーグル、試行錯誤を行ってきましたが、問題の解決策を見つけることができません。
- sales_order_gridのフィールドと順序を変更する機能。そして
- このグリッドに2つのカスタムフィールドを表示する機能(フィルター可能)。
前者(ポイント1)はMage_Adminhtml_Block_Widget_Grid
、カスタムモジュールを拡張することで解決されました(オブザーバーについては知っていますが、インストールされている他のモジュールは、オブザーバーによる私の変更をオーバーライドしていました)。
とにかく、後者は私の現在の問題です。以下は、これまでに失敗した2つの方法です。
方法1
<?php
/* @var $this Mage_Sales_Model_Mysql4_Setup */
$this->startSetup();
$connection = $this->getConnection();
/**
* Create the payment method dropdown field, because this field _may_ be
* used for searching we will create an index for it.
*/
$connection->addColumn(
$this->getTable('sales/order_grid'),
'x_payment_method',
"ENUM('PayPal', 'SagePay') DEFAULT NULL"
);
$connection->addKey($this->getTable('sales/order_grid'), 'x_payment_type', 'x_payment_type');
/**
* Create the order channel field to identify where the order was originally
* generated from. Also add an index for this field for additional filtering.
*/
$connection->addColumn(
$this->getTable('sales/order_grid'),
'x_sale_channel',
"ENUM('Amazon', 'Play', 'eBay', 'Website') NOT NULL DEFAULT 'Website'"
);
$connection->addKey($this->getTable('sales/order_grid'), 'x_sale_channel','x_sale_channel');
$this->endSetup();
方法2
この時点で、私は助けにならなかった同じ7つの記事を読むのにうんざりしていたので、1つのフィールドを動作させようとしました。また、Magentoでエラーログを確認し、「$ this-> getTable()」がエラーであることがわかったため、削除しました。
<?php
/* @var $this Mage_Sales_Model_Mysql4_Setup */
$this->startSetup();
$connection = $this->getConnection();
/**
* Create the payment method dropdown field, because this field _may_ be
* used for searching we will create an index for it.
*/
$this->addAttribute('sales_flat_order', 'x_test_option', array(
'label' => 'X Test Option',
'type' => 'varchar',
'input' => 'select',
'visible' => true,
'required' => false,
'position' => 1,
'visible_on_front' => false,
'option' => array('value' => array('web', 'test 1', 'test 2')),
'default' => array('web'),
));
$this->endSetup();
列と属性の違いは何ですか?私の最初の推定は、列が既存のコアテーブルに追加され、属性がEAV_ *テーブルに追加され、適切に関連付けられるというものでした。
そのテーブルはフラットですが、そのリソースモデルはEAVであるため、書き込むにはEAV構成に属性を登録する必要があります。いくつかの販売事業体は、以前は EAVでしたが、パフォーマンス上の理由で平坦化されていました。
—
ベンマーク