在magento的帐单和送货地址中添加自定义字段,并在后端显示其数据

时间:2016-03-13 11:43:22

标签: php magento

我尝试了所有解决方案,但都没有做过任何工作

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/

https://indiestechtips.wordpress.com/2011/07/30/how-to-add-custom-field-in-the-billing-and-shipping-address-of-onepage-checkout-in-magento/

任何人都可以帮助我找到更好的解决方案。

在此if字段显示在帐单邮寄地址的前端但不显示在发货地址中,我也无法在管理端查看其数据。

1 个答案:

答案 0 :(得分:2)

由于您遵循了this教程,并且最新/更新为this

我猜你会这样做:

<?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_addresssales_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;高速缓存