如何在Magento后端显示自定义顺序属性

时间:2014-04-03 23:59:32

标签: magento attributes

我正在使用Magento 1.7 - 我对Magento模块开发还不熟悉。

我创建了一个名为Deliverydate的新订单自定义EAV属性,客户将在购物车页面上输入该属性。我创建了一个自定义模块和安装程序脚本,可以在eav_attribute表中看到它。

$installer = $this;
$installer->startSetup();
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');

$setup->addAttribute('order', 'deliverydate', array(
 'position'      => 1,
 'input'         => 'text',
 'backend_type'  => 'varchar',
 'type'          => 'varchar',
 'label'         => 'Choose delivery date',
 'visible'       => 1,
 'required'      => 0,
 'user_defined' => 1,
 'global'        => 1,
 'visible_on_front'  => 1,
));

$installer->endSetup();

但我已经阅读了很多来源,无法弄清楚如何 1)保存客户输入的值。 2)检索管理员中显示的值。

我已经阅读了有关观察者的这些教程,但似乎无法让人工作:

这是我的config.xml文件

<?xml version="1.0"?>
<config>
  <modules>
    <Mycompany_Deliverydate>
      <version>0.1.0</version>
    </Mycompany_Deliverydate>
  </modules>
  <global>
<resources>
  <deliverydate_setup>
    <setup>
      <module>Mycompany_Deliverydate</module>
      <class>Mycompany_Deliverydate_Model_Resource_Mysql4_Setup</class>
    </setup>
    <connection>
      <use>core_setup</use>
        </connection>
      </deliverydate_setup>
    </resources>
    <events>
    <checkout_type_onepage_save_order>
        <observers>
            <Deliverydate_observer>
                <type>singleton</type>
                <class>deliverydate/observer</class>
                <method>Deliverydate</method>
            </Deliverydate_observer>
        </observers>
    </checkout_type_onepage_save_order>
     </events>
   </global>
</config>

我的Observer.php文件,其中大部分是我从本网站的其他教程/问题中借来的。

class Mycompany_Deliverydate_Model_Observer {
  public function Deliverydate($observer) {

    $event = $observer->getEvent();
    $order = $event->getOrder();

    $order->setDeliverydate(Mage::app()->getRequest()->getPost('delivery_date'));


  }
}

我认为这根本就没有输入 - 我输入了throw new Exception并完成了整个订单而没有看到异常。无论如何,我不确定我是否正在检查正确的事件 - checkout_type_onepage_save_order - 何时被解雇?而且我不知道setDeliverydate()函数的定义在哪里,但正如我所说的那样来自另一个来源,它也没有在那里定义。

输入的值在哪里存储?

2 个答案:

答案 0 :(得分:1)

请检查以下帖子,它会对你有所帮助。如果它不能解决您的问题,请在此处发表评论

http://chillydraji.wordpress.com/2014/03/03/how-to-create-new-attribute-to-order-in-magento/

答案 1 :(得分:0)

客户下订单后,需要在“我的帐户”中显示自定义字段。所以要在模块前端布局文件中执行此操作,在本例中为custom.xml

<?xml version="1.0"?>

<layout version="0.1.0">

<sales_order_view>

<reference name="my.account.wrapper">

<block type="custom/custom_order" name="custom.order" template="custom/order.phtml" after='sales.order.info' />

</reference>

</sales_order_view>

</layout>

这里我们基本上参考了my.account.wrapper块并添加了一个子块。我们的块类型是custom / order_view,模板文件是custom/order.phtml

所以我们需要创建我们的块类

<?php

class Excellence_Custom_Block_Custom_Order extends Mage_Core_Block_Template{

public function getCustomVars(){

$model = Mage::getModel('custom/custom_order');

return $model->getByOrder($this->getOrder()->getId());

}

public function getOrder()

{

return Mage::registry('current_order');

}

}

和我们的order.phtml文件

<div class="col-set order-info-box">

<div class="col">

<div class="box">

<div class="box-title">

<h2><?php echo $this->__('Custom Fields') ?></h2>

</div>

<div class="box-content">



<?php

$custom = $this->getCustomVars();

foreach($custom as $key => $value){

?>

<b><?php echo $this->__($key);?></b> : <?php echo $value;?> <br/>

<?php } ?>


</div>

</div>

</div>

</div>

供参考,请访问: http://www.demagento.com/tutorial-magento-add-custom-field-to-order-checkout-page/