Я занимался поиском, пробой и ошибкой, но не могу найти решение проблемы.
- Возможность изменения полей и порядка sales_order_grid; и
- Возможность отображения двух пользовательских полей в этой сетке (фильтруется).
Первый (пункт 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_ * и соответствующим образом связывается.
источник
Ответы:
Ваше предположение верно.
Но для
sales_
таблицы они одно и то же.Первоначально субъектами продаж были EAV. Они превратились в плоские столы, начиная с версии 1.4.0.1 (я думаю). И для обратной совместимости оба метода были сохранены.
Для любых других объектов с плоскими таблицами (страницы CMS, блоки, опросы) вы не можете использовать
addAttribute
толькоaddColumn
, но для продаж это работает в обоих направлениях.Если вы планируете сделать расширение, которое должно быть совместимо с версиями до 1.4, используйте его
addAttribute
, иначе я не вижу в этом смысла.источник
addColumn
метода? Хотя также не используется getTable в качестве sales_flat_order, это просто так. Я попробую это в ближайшее время и вернусь с вирдиктом :)$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
.