Thêm các trường tùy chỉnh vào sales_flat_order


14

Tôi đã thực hiện một số lượng khá lớn về thử nghiệm, thử nghiệm và lỗi nhưng tôi không thể tìm ra giải pháp cho vấn đề này.

  1. Khả năng thay đổi các trường và thứ tự của sales_order_grid; và
  2. Khả năng hiển thị hai trường tùy chỉnh trên lưới này (có thể lọc).

Cái trước (điểm 1) đã được giải quyết, bằng cách mở rộng Mage_Adminhtml_Block_Widget_Gridmô-đun tùy chỉnh của tôi (tôi biết về người quan sát, nhưng các mô-đun được cài đặt khác đã ghi đè các thay đổi của tôi với người quan sát của họ).

Bất kể, sau này là vấn đề hiện tại của tôi, dưới đây là hai phương pháp đã làm tôi thất bại cho đến nay.

Phương pháp 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();

Cách 2

Đến lúc này tôi cảm thấy mệt mỏi khi đọc cùng 7 bài viết không có ích, vì vậy tôi đã cố gắng để MỘT lĩnh vực hoạt động; Tôi cũng đã kiểm tra nhật ký lỗi trong Magento và thấy "$ this-> getTable ()" bị lỗi, do đó tôi đã xóa nó.

<?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();

Điều này khiến người ta phải đặt câu hỏi, sự khác biệt giữa cột và thuộc tính là gì? Giả định ban đầu của tôi là, một cột được thêm vào bảng lõi hiện có trong khi một thuộc tính được thêm vào các bảng EAV_ * và có liên quan phù hợp.


Mặc dù bảng đó là phẳng, mô hình tài nguyên cho nó là EAV, do đó thuộc tính phải được đăng ký trong cấu hình EAV được ghi vào. Một số thực thể bán hàng từng là EAV nhưng đã bị san phẳng vì lý do hiệu suất.
đánh dấu

Câu trả lời:


11

Giả định của bạn là chính xác.
Nhưng đối với sales_bảng họ là một và giống nhau.
Ban đầu các thực thể bán hàng là EAV. Họ đã thay đổi thành các bảng phẳng bắt đầu với phiên bản 1.4.0.1 (tôi nghĩ). Và để tương thích ngược cả hai phương pháp đã được giữ.
Đối với bất kỳ căn hộ thảo luận từ các đơn vị khác (trang cms, khối, các cuộc thăm dò), bạn không thể sử dụng addAttribute, chỉ có addColumn, nhưng để bán nó hoạt động cả hai cách.
Nếu bạn dự định tạo một tiện ích mở rộng phải tương thích với các phiên bản trước 1.4 thì hãy sử dụng addAttribute, nếu không tôi thấy không có điểm nào trong đó.


Cảm ơn thông tin tôi thấy điều này thực sự hữu ích. Thật ra, bây giờ nghĩ về nó, tôi cho rằng cách đúng là sử dụng addColumnphương pháp? Trong khi cũng không sử dụng 'getTable' vì sales_flat_order chỉ có thế. Tôi sẽ thử nó ngay, và trở lại với một virdict :)
tro

2
Hóa ra tôi có hai vấn đề (một vấn đề tôi bỏ qua); Một $this->getTable('sales/flat_order')cái cũng có thể được đặt thành sales_flat_order; thứ hai là $connection->addKey($this->getTable('sales/order_grid'), 'x_payment_type', 'x_payment_type');; x_payment_typenên đã x_payment_method.
tro
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.