Menambahkan bidang khusus ke sales_flat_order


14

Saya telah melakukan banyak pencarian, percobaan dan kesalahan, tetapi saya tidak dapat menemukan solusi untuk masalah ini.

  1. Kemampuan untuk mengubah bidang dan urutan sales_order_grid; dan
  2. Kemampuan untuk menampilkan dua bidang khusus pada kisi ini (dapat difilter).

Yang pertama (poin 1) telah dipecahkan, dengan memperluas Mage_Adminhtml_Block_Widget_Gridmodul 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.


Meskipun tabel itu datar, model sumber daya untuknya adalah EAV, karenanya atribut harus didaftarkan dalam konfigurasi EAV untuk ditulis. Beberapa entitas penjualan dulu EAV tetapi diratakan karena alasan kinerja.
patokan

Jawaban:


11

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, hanya addColumn, 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.


Terima kasih atas info yang saya temukan ini sangat membantu. Sebenarnya, sekarang memikirkannya, saya kira cara yang benar adalah menggunakan addColumnmetode? Sementara itu juga tidak menggunakan 'getTable' karena sales_flat_order hanya itu. Saya akan mencobanya segera, dan kembali dengan virdict :)
ash

2
Ternyata saya punya dua masalah (satu saya diabaikan); Satu $this->getTable('sales/flat_order')mungkin diatur sales_flat_order; yang kedua adalah $connection->addKey($this->getTable('sales/order_grid'), 'x_payment_type', 'x_payment_type');; x_payment_typeseharusnya x_payment_method.
ash
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.