【问题标题】:Adding a new attribute to order in magento在 magento 中添加新属性以订购
【发布时间】:2012-10-17 14:20:51
【问题描述】:

我想为订单添加一个对客户不可见的属性。我只想在数据库中使用它并为每个订单存储一个特定的值。我想根据这个值打印订单。那么如何在magento中添加订单属性。该属性就像订单状态一样。如果我想在 admin/sales/orders 中显示该属性,我该怎么做?

【问题讨论】:

  • @MJG:你的问题解决了吗?

标签: magento magento-1.7


【解决方案1】:

假设您要在订单中添加my_custom_input_field 并向管理员创建订单页面添加字段(要将字段添加到前端,您只需将输入字段添加到前端模板并仔细检查观察者)

在 /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>

在/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();

在 /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;
    }
}

(您应该避免更改核心默认值 - 您应该对此进行一些研究)

在/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; ?>

在/app/design/adminhtml/default/default/template/sales/order/create/form/account.phtml中

(添加到前端更改value="&lt;?php echo Mage...&gt;")

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

【讨论】:

  • 感谢分享代码。我想在这里提到一个扩展,让技术较少的人通过单击从后台添加额外的结帐字段。 fmeextensions.com/…
  • 如何将自定义列添加/写入到表 sales_flat_order_grid 中?
  • @user2963379 ... Magento 将自动更新,如果您更新 sales_flat_order 中的同名列
  • 我的意思是我想将 'my_custom_input_field' 列添加到 sales_flat_order_grid 表中。我尝试将额外的 addAttribute 添加到“order_grid”的 sql 文件中,但它似乎不起作用。
  • @RenonStewart:错误:snag.gy/aN17pb.jpg 代码:snag.gy/3aSsXn.jpg
猜你喜欢
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多