2015-05-28 53 views
0

我试图让我的客户可以给他们的订单添加评论。所以我搜索了一个扩展后,我找到了一个。设置似乎很容易... 你刚确保块被加载在checkout.xmlMagento在结帐时添加评论

<block type="checkout/agreements" name="checkout.onepage.agreements" as="agreements" template="checkout/onepage/agreements.phtml"/> 

链接Magemaven OrderComment: http://www.magentocommerce.com/magento-connect/magemaven-ordercomment.html

但是未启用文本框显示出来。我的猜测是另一个扩展名(MageSetup)正在造成这种情况。当我激活模板提示时,它会向我显示不同的布局,而不是在checkout.xml中设置的布局。有一些phtml从“magesetup”文件夹加载。

我已经安装了Magento DE 1.9。有人可以解释为什么checkout.xml没有加载?是否有一些窍门通过我不知道的数据库加载的东西?

编辑: 我试图按照本教程中,但似乎出事了http://www.appseconnect.com/how-to-add-order-comment-on-customer-checkout-in-magento/

如何检查,如果该脚本正确执行?

$c = array (
‘entity_type_id’ => 1234, 
‘attribute_code’ => ‘myorder_customercomment’, 
‘backend_type’ => ‘text’,  // MySQL-DataType 
‘frontend_input’ => ‘textarea’, // Type of the HTML-Form-Field 
‘is_global’  => ‘1’, 
‘is_visible’  => ‘1’, 
‘is_required’  => ‘0’, 
‘is_user_defined’ => ‘0’, 
‘frontend_label’ => ‘Customer Comment’, 
); 
$attribute = new Mage_Eav_Model_Entity_Attribute(); 
$attribute->loadByCode($c[‘entity_type_id’], $c[‘attribute_code’]) 
->setStoreId(0) 
->addData($c); 
$attribute->save(); 

我觉得缺少某些东西,因为该类缺少方法getMyorderCustomercomment。或者这种方法是自动生成的?

MyCompany_MyOrder_Helper_CustomerOrderComment extends Mage_Core_Helper_Abstract { 
    public function setCustomerOrderComment($observer) { 
      $orderComment = $this->_getRequest()->getPost(‘myCustomerOrderComment’, false); 
      $observer->getEvent()->getOrder()->setMyorderCustomercomment($orderComment); 
    } 
} 

更新: 配置文件:

<?xml version="1.0"?> 
<config> 
    <global> 
     <modules> 
      <MyCompany_MyOrder> 
       <version>0.1.0</version> 
      </MyCompany_MyOrder> 
     </modules> 
     <helpers> 
      <myorder> 
       <class>MyCompany_MyOrder_Helper</class> 
      </myorder> 
     </helpers> 
    </global> 
    <frontend> 
     <events> 
      <checkout_type_onepage_save_order> 
       <observers> 
        <myorder_set_customerordercomment> 
         <type>model</type> 
         <class>MyCompany_MyOrder_Helper_CustomerOrderComment</class> 
         <method>setCustomerOrderComment</method> 
        </myorder_set_customerordercomment> 
       </observers> 
      </checkout_type_onepage_save_order> 
     </events> 
    </frontend> 
</config> 

助手:

<?php 
class MyCompany_MyOrder_Helper_CustomerOrderComment extends Mage_Core_Helper_Abstract { 
    public function setCustomerOrderComment($observer) { 
     $orderComment = $this->_getRequest()->getPost('myCustomerOrderComment', false); 

     mail('[email protected]', 'TestMail', $orderComment); 

     $observer->getEvent()->getOrder()->setMyorderCustomercomment($orderComment)->save(); 
    } 
} 

回答

0

你必须创建在PHTML文件一个阶属性和地点现场。这里有一个详细的博客,你可以尝试:http://www.appseconnect.com/how-to-add-order-comment-on-customer-checkout-in-magento/

更新 打开的数据库和开放eav_attribute表 - 搜索attribute_code场myorder_customercomment。如果有记录,脚本将成功执行。

setMyorderCustomercomment只设置用户在您创建的属性中输入的注释。 Magento提供了神奇的方法(get和set),所以你不需要重新定义getMyorderCustomercomment()方法。

当你做echo $ _order-> getMyorderCustomercomment();如果您的属性创建成功,则magento将自动从数据库中获取其值并对其进行回显。

该文章指定set方法的原因是,您可以从各种文件访问方法而无需重复代码。你可以避免指定该函数,只需写$ order-> setMyorderCustomercomment($ orderComment) - > save();它会工作。

了解更多关于Magento的魔术方法在这里:http://www.coolryan.com/magento/2012/04/06/magic-methods-inside-magento/

回答您的查询: 你是如何调用该函数?它应该被这样调用:Mage :: helper('modulename') - > setCustomerOrderComment($ arguments); 确保将上述语句中的modulename替换为实际的模块名称。

如果你的函数在观察者文件中,那么它会在checkout_type_onepage_save_order事件被触发后自动调用。所以请检查你的函数助手文件或观察者文件的写入位置,并提供适当的细节,哪些函数没有被调用。如果观察员功能未被调用,则您必须在下订单时检查正在触发哪个事件。由于评论中的字符限制,我无法在评论部分发布此内容,所以更改了我的答案。

希望这有助于!

+0

更新了问题 –

+0

更新了答案。 –

+0

eav_attribute中存在attribute_code“myorder_customercomment”。有没有办法检查数据库是否设置了字段?因为我认为实际的问题是,我不知道如果我不能加载属性或如果属性没有设置。我甚至尝试在这个功能发送电子邮件,但我没有收到电子邮件。我试图回应的价值,但我没有得到任何东西,所以我的猜测是该函数未被加载保存属性:$ _order = Mage :: getModel('sales/order') - > load(100000608) ; echo $ _order-> getMyorderCustomercomment(); 有没有办法检查函数是否运行? –