Додавання користувацьких полів у sales_flat_order


14

Я робив неабияку кількість гуглів, спроб і помилок, але не можу знайти проблему.

  1. Можливість зміни полів та порядку продажу_order_grid; і
  2. Можливість відображення двох користувацьких полів на цій сітці (filterable).

Перший (пункт 1) вирішено шляхом розширення Mage_Adminhtml_Block_Widget_Gridмого спеціального модуля (я знаю про спостерігачів, але інші встановлені модулі змінили мої зміни зі своїми спостерігачами).

Незважаючи на те, що остання - це моя нинішня проблема, нижче наведені два методи, які мене поки що не вдалили.

Спосіб 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 статей, які не допомогли, тому я спробував зробити ОДНІ польові роботи; Я також перевірив журнали помилок у 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, але були вирівняні з міркувань продуктивності.
орієнтири

Відповіді:


11

Ваша презумпція правильна.
Але для sales_столу вони одне і те саме.
Спочатку суб'єктами збуту були EAV. Вони перетворилися на плоскі таблиці, починаючи з версії 1.4.0.1 (я думаю). А для зворотної сумісності збереглися обидва методи.
Для будь-яких інших об'єктів з плоскими таблицями (сторінок cms, блоків, опитувань) ви не можете використовувати addAttributeтільки addColumn, але для продажу це працює обома способами.
Якщо ви плануєте зробити розширення, яке має бути сумісним з версіями до 1.4, тоді використовуйте addAttribute, інакше я не бачу сенсу в цьому.


Дякую за інформацію, я вважаю це дуже корисним. Власне, зараз, думаючи про це, я вважаю, що правильним способом є використання addColumnметоду? Хоча також не використовуйте "getTable" як продаж_flat_order саме це. Я спробую це незабаром, і повернуся з враженням :)
попел

2
Виявляється, у мене було дві проблеми (одну я не помітив); Один $this->getTable('sales/flat_order')може бути налаштований на sales_flat_order; другий був $connection->addKey($this->getTable('sales/order_grid'), 'x_payment_type', 'x_payment_type');; x_payment_typeповинні були бути x_payment_method.
зола
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.