2012-10-17 16 views
9

Ich möchte ein Attribut zur Bestellung hinzufügen, das für den Kunden nicht sichtbar ist. Ich möchte es nur in der Datenbank verwenden und einen bestimmten Wert für jede Bestellung speichern. Ich möchte die Reihenfolge entsprechend diesem Wert drucken. Wie kann ich ein Bestellattribut in Magento hinzufügen? Das Attribut entspricht dem Status der Bestellung. Weiter, wenn ich dieses Attribut in Admin/Sales/Orders anzeigen möchte, wie kann ich das tun?Hinzufügen eines neuen Attributs zur Bestellung in Magento

+0

@MJG: Ist Ihr Problem gelöst? – Rathinam

Antwort

16

Angenommen, Sie möchten my_custom_input_field zu Ihrer Bestellung hinzufügen und ein Feld zu Ihrer Admin-Bestellseite hinzufügen (um das Feld zum Frontend hinzuzufügen, müssen Sie nur das Eingabefeld zur Frontvorlage hinzufügen und den Beobachter überprüfen)

In /app/code/local/MageIgniter/CustomOrderStatus/etc/config.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <MageIgniter_CustomOrderStatus> 
      <version>1.1</version> 
     </MageIgniter_CustomOrderStatus> 
    </modules> 

    <global> 
     <fieldsets> 
      <sales_convert_quote>       
       <my_custom_input_field><to_order>*</to_order></my_custom_input_field> 
      </sales_convert_quote> 

      <sales_convert_order>            
       <my_custom_input_field><to_quote>*</to_quote></my_custom_input_field> 
      </sales_convert_order> 
     </fieldsets> 
     <helpers> 
      <customorderstatus> 
       <class>MageIgniter_CustomOrderStatus_Helper</class> 
      </customorderstatus>    
     </helpers> 

     <models> 
      <customorderstatus> 
       <class>MageIgniter_CustomOrderStatus_Model</class> 
       <resourceModel>customorderstatus_mysql4</resourceModel> 
      </customorderstatus> 
     </models> 
     <resources> 
      <customorderstatus_setup> 
       <setup> 
        <module>MageIgniter_CustomOrderStatus</module> 
        <class>Mage_Sales_Model_Mysql4_Setup</class> 
       </setup> 
       <connection> 
        <use>core_setup</use> 
       </connection> 
      </customorderstatus_setup> 
      <customorderstatus_write> 
       <connection> 
        <use>core_write</use> 
       </connection> 
      </customorderstatus_write> 
      <customorderstatus_read> 
       <connection> 
        <use>core_read</use> 
       </connection> 
      </customorderstatus_read> 
     </resources> 

     <events> 
      <adminhtml_sales_order_create_process_data_before> 
       <observers> 
        <customorderstatus> 
         <type>singleton</type> 
         <class>customorderstatus/observer</class> 
         <method>saveCustomData</method> 
        </customorderstatus> 
       </observers> 
      </adminhtml_sales_order_create_process_data_before> 
     </events> 

     <blocks> 
      <customorderstatus> 
       <class>MageIgniter_CustomOrderStatus_Block</class> 
      </customorderstatus> 
     </blocks> 
    </global> 
</config> 

In /app/code/local/MageIgniter/CustomOrderStatus/sql/customorderstatus_setup/mysql4-install-1.1. php

<?php 
$installer = $this; 
$installer->startSetup(); 

$installer->addAttribute("order", "my_custom_input_field", array("type"=>"varchar")); 
$installer->addAttribute("quote", "my_custom_input_field", array("type"=>"varchar")); 
$installer->endSetup(); 

In /app/code/local/MageIgniter/CustomOrderStatus/Model/Observer.php

class MageIgniter_CustomOrderStatus_Model_Observer 
{ 
    public function saveCustomData($event) 
    { 
     $quote = $event->getSession()->getQuote(); 
     $quote->setData('my_custom_input_field', $event->getRequestModel()->getPost('my_custom_input_field')); 

     return $this; 
    } 
} 

(Sie vermeiden Änderungen an Kernstandard machen sollte - Sie sollten um diese einige der Forschung auf dem Weg zu tun)

In /app/design/adminhtml/default/default/template/sales/order/view/info.phtml

<?php if($_order->getMyCustomInputField()): ?> 
<tr> 
    <td class="label"><label><?php echo Mage::helper('sales')->__('My Custom Input Field') ?></label></td> 
    <td class="value"><strong><?php echo $_order->getMyCustomInputField() ?></strong></td> 
</tr> 
<?php endif; ?> 

in/app/design/adminhtml/default/default/template/Vertrieb/Auftrag/erstellen /form/account.phtml

(hinzufügen, um die value="<?php echo Mage...>" ändern Frontend)

<input id="my_custom_input_field" name="my_custom_input_field" value="<?php echo Mage::getSingleton('adminhtml/session_quote')->getQuote()->getMyCustomInputField() ?>" class="input-text" type="text"> 
+1

Danke für die Freigabe eines Codes. Ich möchte hier eine Erweiterung erwähnen, die es weniger technisch versierten Personen ermöglicht, zusätzliche Checkout-Felder mit einem einzigen Klick aus dem Backoffice hinzuzufügen. http://www.fmeextensions.com/magento-additional-checkout-attributes-fields.html –

+0

Wie fügen Sie hinzu/schreiben Sie die benutzerdefinierte Spalte in die Tabelle sales_flat_order_grid auch? – user2963379

+0

@ user2963379 ... Magento wird automatisch aktualisiert, wenn für Sie bei der Aktualisierung der Spalte mit dem gleichen Namen in sales_flat_order –

0

Hinzufügen von benutzerdefinierten umfasst mehrere Schritte, um zu bestellen Attributen. Zuerst müssen Sie der Datei ein Textfeld hinzufügen. Dann müssen Sie dieses Feld in Angebots- und Auftragstabellen hinzufügen und Observer-Klassen erstellen. Einige weitere Dateien wie custom.xm l und order.phtml müssen bearbeitet werden, um dieses Attribut anzuzeigen. Siehe

Für komplett Tutorial,

Verwandte Themen