我尝试了所有解决方案,但都没有做过任何工作
http://excellencemagentoblog.com/blog/2011/11/29/magento-adding-custom-field-to-customer-address/ http://excellencemagentoblog.com/blog/2015/08/20/checkout-add-extra-address-field/
任何人都可以帮助我找到更好的解决方案。
在此if字段显示在帐单邮寄地址的前端但不显示在发货地址中,我也无法在管理端查看其数据。
答案 0 :(得分:2)
我猜你会这样做:
<?xml version="1.0"?>
<layout version="0.1.0">
<checkout_onepage_index>
<reference name='checkout.onepage.billing'>
<block type='checkout/onepage_billing' name='form.additional.info' template='address/checkout/onepage/billing_field.phtml'></block>
</reference>
</checkout_onepage_index>
</layout>
这只是将字段添加到帐单邮寄地址表单,而不是包含运费。
要使它显示在两个表单上,您需要的是:
<?xml version="1.0"?>
<layout version="0.1.0">
<checkout_onepage_index>
<reference name='checkout.onepage.billing'>
<block type='checkout/onepage_billing' name='form.additional.info' template='address/checkout/onepage/billing_field.phtml'></block>
</reference>
<reference name='checkout.onepage.shipping'>
<block type='checkout/onepage_shipping' name='form.additional.info' template='address/checkout/onepage/shipping_field.phtml'></block>
</reference>
</checkout_onepage_index>
</layout>
并在正确的目录路径中创建phtml文件名billing_field.phtml和shipping_field.phtml。
现在我们需要将这些数据存储在数据库表中。该字段将存储在sales_flat_quote_address
和sales_flat_order_address
表中。我们需要通过设置文件添加相应的列。
您需要创建安装文件的升级并将其添加到其中:
/**
* Adding Extra Column to sales_flat_quote_address
* to store the delivery instruction field
*/
$sales_quote_address = $installer->getTable('sales/quote_address');
$installer->getConnection()
->addColumn($sales_quote_address, 'table_name', array(
'type' => Varien_Db_Ddl_Table::TYPE_TEXT,
'comment' => 'Table Comment'
));
/**
* Adding Extra Column to sales_flat_order_address
* to store the delivery instruction field
*/
$sales_order_address = $installer->getTable('sales/order_address');
$installer->getConnection()
->addColumn($sales_order_address, 'table_name', array(
'type' => Varien_Db_Ddl_Table::TYPE_TEXT,
'comment' => 'Table Comment'
));
这将为数据库表添加额外的列。但我们需要做另一个重要的事情,需要告诉magento将字段从引用地址对象复制到订单地址对象。将这些行添加到config.xml文件中:
<global>
<fieldsets>
<sales_convert_quote_address>
<table_name>
<to_order_address>*</to_order_address>
</table_name>
</sales_convert_quote_address>
</fieldsets>
</global>
最后,我们需要显示新字段,其中显示地址。 Magento使用地址模板在任何地方显示地址信息,因此我们只需要将此字段添加到地址模板中。地址模板位于系统配置 - &gt;客户配置
我们会将此代码添加到之前创建的升级脚本中:
$config = Mage::getModel('core/config');
//append delivery instruction to address templates in system configuration
$html = Mage::getConfig()->getNode('default/customer/address_templates/html');
$html .= '{{depend table_name}}<br/>DH:{{var table_name}} {{/depend}}';
$config->saveConfig('customer/address_templates/html', $html);
$text = Mage::getConfig()->getNode('default/customer/address_templates/text');
$text .= '{{depend table_name}}DT:{{var table_name}} {{/depend}}';
$config->saveConfig('customer/address_templates/text', $text);
$oneline = Mage::getConfig()->getNode('default/customer/address_templates/oneline');
$oneline .= '{{depend table_name}}DO:{{var table_name}} {{/depend}}';
$config->saveConfig('customer/address_templates/oneline', $oneline);
$pdf = Mage::getConfig()->getNode('default/customer/address_templates/pdf');
$pdf .= '{{depend table_name}}<br/>DP:{{var table_name}} {{/depend}}';
$config->saveConfig('customer/address_templates/pdf', $pdf);
$js_template = Mage::getConfig()->getNode('default/customer/address_templates/js_template');
$js_template .= '{{depend table_name}}<br/>DJ:{{var table_name}} {{/depend}}';
$config->saveConfig('customer/address_templates/js_template', $js_template);
现在清除您的安装CACHE并运行您的应用程序
注意:您可以在此处清除缓存:安装&gt; var&gt;高速缓存强>