2010-12-06 20 views
13

Ich muss eine Spalte auf der Bestellseite hinzufügen, was bedeutet, eine Spalte zu sales_flat_order_grid hinzufügen. Beides ist möglich, aber ich weiß nicht, wie ich einen Wert hinzufügen soll, damit er in meiner neuen Spalte gespeichert wird.Speichern von zusätzlichen Daten mit einer Bestellung in Magento

Muss ich auch ein neues Attribut registrieren?
Der Wert ist nicht im Angebot, also denke ich, ich muss nicht unter config/global/fieldsets/sales_convert_quote registrieren, da der Wert nicht dort konvertiert werden soll.

Verwenden von Magento Enterprise 1.8.

Antwort

23

Nach viel Versuch und Irrtum Zugabe - viel Fehler - ich glaube, ich habe es jetzt.

mit dem sales_flat_order_grid Zunächst wird in Mage_Sales_Model_Mysql4_Order_Abstract::updateGridRecords() aktualisiert, indem die Spur folgende ich es, sowohl die „main“ inspiziert Tabelle ausgearbeitet (sales_flat_order) und die Haupttabelle + „_grid“ (sales_flat_order_grid), nimmt die intersect ihrer Spalten und erstellt daraus eine Abfrage. Daher muss jede Spalte, die Sie in der Grid-Tabelle benötigen, auch in der Haupttabelle enthalten sein. Es ist keine Entität im EAV-Stil, so dass Attribute nicht erstellt werden müssen.
Hier ist mein Setup-Skript ist:

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

Als nächstes musste ich die zusätzliche Spalte in allen Tabellen, um in Admin zeigen. Um dies zu tun, überschreibe ich jeden relevanten Block.

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

In My/Module/Block/Adminhtml/Sales/Order/Grid.php habe ich folgendes:

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

} 

Auch in My/Module/Block/Adminhtml/Customer/Edit/Tab/Orders.php und My/Module/Block/Adminhtml/Customer/Edit/Tab/View/Orders.php Ich habe diese Funktion:

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

schließlich zu beenden, im Falle sales_convert_quote_to_order I bevölkerte das neue Feld. Dieses Bit ist nicht so wichtig, solange Sie die Daten zu einem Zeitpunkt hinzufügen, bevor der Auftrag gespeichert wird.

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

Ich versuche, genau dasselbe zu tun, ich habe eine neue Spalte gemacht in sales_flat_order_grid als barcode_no und mit Grid.php habe ich diese Spalte in Magento Orders Grid angezeigt.Wie kann ich barcode_no value vom Magento-Backend in die sales_flat_order_grid-Tabelle speichern? –

+0

@ShujaatShaikh welches Bit hast du Probleme mit? – clockworkgeek

+0

Nein, wo ich eine Tuturial finden kann, wie man einen benutzerdefinierten Wert in meine PHP-Datenbank von Magento Admin-Backend einfügen. Jeder Artikel wäre eine große Hilfe! –

1

Sie müssen Attribute hinzufügen, der beste Weg dazu ist über Ihre Erweiterungen Update oder Setup-Skript. Da die Order- und Quote auf flachen Tabellenstrukturen basieren wirklich bedeutet es mehr Felder zu diesen Tabellen

auch sehen ALTER TABLE in Magento setup script without using SQL

0

Auch Sie dies für die Aufnahme der neuen „Attribut“ verwenden (bei wirklich eine Säule ist, weil eben ist) sowohl die sales_flat und die sales_flat_ _grid

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

Ihr Installateur muss sein : Mage_Sales_Model_Entity_Setup für die Verwendung des Rasterschlüssels.

Und denken Sie daran, wenn Sie eine vorhandene columnd von sales_flat_order hinzufügen sales_flat_order_grid, dann müssen Sie die sales_flat_order_grid Tabelle synchronisieren:

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

+0

In meinem Fall musste ich die Klasse "Mage_Sales_Model_Resource_Setup" dafür verwenden. Das Erstellen von Attributen mit der Klasse "Mage_Sales_Model_Entity_Setup" schien nichts zu tun (es wurden keine neuen db-Spalten erstellt, aber auch keine Fehler.) – Eric

Verwandte Themen