2010-12-06 20 views
13

注文ページに列を追加する必要があります。これは、列をに追加することを意味します。どちらも可能ですが、値を追加して新しい列に保存する方法はわかりません。Magentoで注文した余分なデータを保存する

新しい属性も登録する必要がありますか?
値が引用符に含まれていないので、値が変換されないため、config/global/fieldsets/sales_convert_quoteの下に登録する必要はありません。

Magento Enterprise 1.8を使用する。

答えて

23

を参照してくださいも

これらのテーブルに複数のフィールドを追加することを意味しますそれは今です。

sales_flat_order_gridで開始するが、私はそれが「メイン」テーブル(sales_flat_order)とメインテーブル+「_grid」(sales_flat_order_grid)の両方を検査働い道に従うことによって、Mage_Sales_Model_Mysql4_Order_Abstract::updateGridRecords()に更新され、その列の交差を取りますそれからクエリを構築します。したがって、グリッドテーブルに必要な列は、メインテーブルにも存在する必要があります。 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)'); 

次に、私は管理者のすべてのためのテーブルに表示するために追加の列を必要としていました。これを行うには、それぞれの関連ブロックをオーバーライドします。

<?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 IでMy/Module/Block/Adminhtml/Sales/Order/Grid.php

<?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> 

Iは、以下からなります新しいフィールドが設定されました。このビットは、注文が保存される前の時点でデータを追加する限り、それほど重要ではありません。

$order->setBoxNum('DATA GOES HERE'); 
+0

私は正確に同じことをやろうとしています、私は新しい列を作っていますsales_flat_order_gridでbarcode_noとGrid.phpを使用して、その列をmagento ordersグリッドで表示しました。今、magentoバックエンドのbarcode_no値をsales_flat_order_gridテーブルに保存するにはどうすればよいですか? –

+0

@ ShujaatShaikhどのビットで問題がありますか? – clockworkgeek

+0

いいえここで私はmagento admin backendからphpデータベースにカスタム値を挿入する方法について説明します。すべての記事は大きな助けになるでしょう! –

1

属性を追加する必要があります。これを行うには、拡張機能のアップデートまたはセットアップスクリプトを使用するのが最善の方法です。 多くのエラーのを - - 私は私が持っていると思う順序と引用符は、平らなテーブル構造に基づいているとして、それは本当に試行錯誤の多くの後ALTER TABLE in Magento setup script without using SQL

0

また、あなたは両方に(フラットであるため、実際に列がある時に)新しい「属性」を追加するためにこれを使用することができ、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_gridするsales_flat_orderから存在columndを追加している場合、あなたはsales_flat_order_gridテーブルを再同期する必要が覚えている:

In Magento, how do I populate a new column in sales_order_grid with data from sales_flat_order?

+0

私の場合は、このために 'Mage_Sales_Model_Resource_Setup'クラスを使用しなければなりませんでした。 'Mage_Sales_Model_Entity_Setup'クラスで属性を作成することは何もしませんでした(新しいdbカラムは作成されませんでしたが、エラーもありません)。 – Eric