Saya telah melakukan banyak pencarian, percobaan dan kesalahan, tetapi saya tidak dapat menemukan solusi untuk masalah ini.
- Kemampuan untuk mengubah bidang dan urutan sales_order_grid; dan
- Kemampuan untuk menampilkan dua bidang khusus pada kisi ini (dapat difilter).
Yang pertama (poin 1) telah dipecahkan, dengan memperluas Mage_Adminhtml_Block_Widget_Grid
modul kustom saya (saya tahu tentang pengamat, namun modul yang diinstal lainnya mengesampingkan perubahan saya dengan pengamat mereka).
Apapun, yang terakhir adalah masalah saya saat ini, di bawah ini adalah dua metode yang telah gagal saya sejauh ini.
Metode 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();
Metode 2
Pada titik ini saya sudah lelah membaca 7 artikel yang sama yang tidak membantu, jadi saya mencoba membuat SATU bidang berfungsi; Saya juga memeriksa log kesalahan di Magento dan menemukan "$ this-> getTable ()" salah, jadi saya menghapusnya.
<?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();
Yang membuat orang bertanya, apa perbedaan antara kolom dan atribut? Asumsi awal saya adalah bahwa, kolom ditambahkan ke tabel inti yang ada sementara atribut ditambahkan ke tabel EAV_ * dan terkait dengan tepat.
sumber
Jawaban:
Anggapan Anda benar.
Tapi untuk
sales_
meja mereka satu dan sama.Awalnya entitas penjualan adalah EAV. Mereka berubah menjadi tabel datar dimulai dengan versi 1.4.0.1 (saya pikir). Dan untuk kompatibilitas mundur kedua metode disimpan.
Untuk entitas datar dengan tabel lain (halaman cms, blok, jajak pendapat) Anda tidak dapat menggunakan
addAttribute
, hanyaaddColumn
, tetapi untuk penjualan ia berfungsi dua arah.Jika Anda berencana untuk membuat ekstensi yang harus kompatibel dengan versi sebelum 1.4 maka gunakan
addAttribute
, kalau tidak, saya tidak melihat gunanya.sumber
addColumn
metode? Sementara itu juga tidak menggunakan 'getTable' karena sales_flat_order hanya itu. Saya akan mencobanya segera, dan kembali dengan virdict :)$this->getTable('sales/flat_order')
mungkin diatursales_flat_order
; yang kedua adalah$connection->addKey($this->getTable('sales/order_grid'), 'x_payment_type', 'x_payment_type');
;x_payment_type
seharusnyax_payment_method
.