Сохранение дополнительных данных при заказе в Magento - PullRequest
13 голосов
/ 06 декабря 2010

Мне нужно добавить столбец на страницу заказов, что означает добавление столбца к sales_flat_order_grid.Оба эти варианта возможны, однако я не знаю, как добавить значение, чтобы оно сохранялось в моем новом столбце.

Нужно ли регистрировать новый атрибут тоже?
Значение отсутствуетв цитате, поэтому, мне кажется, мне не нужно регистрироваться под config/global/fieldsets/sales_convert_quote, так как значение там не для конвертации.

Использование Magento Enterprise 1.8.

Ответы [ 3 ]

23 голосов
/ 08 декабря 2010

После большого количества проб и ошибок - много ошибок - я думаю, что оно у меня есть сейчас.

Для начала sales_flat_order_grid обновляется в Mage_Sales_Model_Mysql4_Order_Abstract::updateGridRecords(), следуя разработанному мной следу, он проверяет как "главную" таблицу (sales_flat_order), так и основную таблицу + "_grid" (sales_flat_order_grid) , берет пересечение их столбцов и строит запрос из этого. Поэтому любой столбец, который вам нужен в таблице сетки, также должен быть в основной таблице. Это не объект в стиле EAV, поэтому атрибуты создавать не нужно.
Вот мой скрипт установки:

<?php

/* @var $this Nexxt_Booth_Model_Entity_Setup */
$installer = $this;

$installer->getConnection()->addColumn($installer->getTable('sales_flat_order'), 'box_num', 'varchar(255)');
$installer->getConnection()->addColumn($installer->getTable('sales_flat_order_grid'), 'box_num', 'varchar(255)');

Далее мне понадобился дополнительный столбец для отображения во всех таблицах заказов в admin. Для этого я перебил каждый соответствующий блок.

<?xml version="1.0"?>
<config>
    ....

    <global>
        <blocks>
            <adminhtml>
                <rewrite>
                    <customer_edit_tab_view_orders>
                    <!-- Recent 5 orders on customer page -->
                        My_Module_Block_Adminhtml_Customer_Edit_Tab_View_Orders
                    </customer_edit_tab_view_orders>
                    <customer_edit_tab_orders>
                    <!-- All orders on customer tab -->
                        My_Module_Block_Adminhtml_Customer_Edit_Tab_Orders
                    </customer_edit_tab_orders>
                    <sales_order_grid>
                    <!-- All orders in Sales menu -->
                        My_Module_Block_Adminhtml_Sales_Order_Grid
                    </sales_order_grid>
                </rewrite>
            </adminhtml>
        </blocks>
    </global>
</config>

В My/Module/Block/Adminhtml/Sales/Order/Grid.php я сделал следующее:

<?php

class My_Module_Block_Adminhtml_Sales_Order_Grid extends Mage_Adminhtml_Block_Sales_Order_Grid

    protected function _prepareColumns()
    {
        $this->addColumn('box_num', array(
            'header'    => $this->__('Box #'),
            'index'     => 'box_num',
            'width'     => '100px'
        ));
        $this->addColumnsOrder('box_num', 'shipping_name');
        return parent::_prepareColumns();
    }

}

Аналогично, в My/Module/Block/Adminhtml/Customer/Edit/Tab/Orders.php и My/Module/Block/Adminhtml/Customer/Edit/Tab/View/Orders.php я добавил эту функцию:

    protected function _prepareColumns()
    {
        $this->addColumn('box_num', array(
            'header'    => $this->__('Box #'),
            'index'     => 'box_num',
            'width'     => '100px'
        ));
        $this->addColumnsOrder('box_num', (Mage::app()->isSingleStoreMode() ? 'grand_total' : 'store_id'));
        return parent::_prepareColumns();
    }

Наконец, чтобы закончить, в случае sales_convert_quote_to_order я заполнил новое поле. Этот бит не так важен, если вы добавляете данные в момент до сохранения заказа.

$order->setBoxNum('DATA GOES HERE');
1 голос
/ 07 декабря 2010

вы должны добавить атрибуты, лучший способ сделать это через обновление расширений или скрипт установки. Поскольку порядок и кавычка основаны на структурах плоских таблиц, это действительно означает добавление дополнительных полей в эти таблицы

также см. ALTER TABLE в скрипте установки Magento без использования SQL

0 голосов
/ 29 июня 2012

Кроме того, вы можете использовать это для добавления нового «атрибута» (в действительности это столбец, потому что он плоский) и в sales_flat, и в sales_flat_ _grid

$installer->addAttribute('order', 'box_num', array(
'label'    => 'Box Number',
'type'     => 'varchar',
'grid'     => true      // this is important
));

ваш установщик должен быть: Mage_Sales_Model_Entity_Setupдля использования ключа сетки.

И помните, что если вы добавляете существующий столбец из sales_flat_order в sales_flat_order_grid, то вам нужно повторно синхронизировать таблицу sales_flat_order_grid:

Как в Magentoзаполнить новый столбец в sales_order_grid данными из sales_flat_order?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...