我正在使用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()
函数的定义在哪里,但正如我所说的那样来自另一个来源,它也没有在那里定义。
输入的值在哪里存储?
答案 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/