使用自定义模块进行注册时,数据未插入到 magento 数据库中

Posted

技术标签:

【中文标题】使用自定义模块进行注册时,数据未插入到 magento 数据库中【英文标题】:Data is not inserted in magento database while using custom module for registration 【发布时间】:2015-03-19 11:16:39 【问题描述】:

我创建了一个custom module to add Land Phone field in registration pageform display the field but in database the Land Phone number is not inserted。但是在eav_attribute table 中添加了陆地电话属性。唯一的问题是 Land Phone 的值没有插入到客户表中。我遵循了这个教程:http://www.fontis.com.au/blog/magento/know-more-about-your-customers-adding-custom-signup-attributes

我会给你详细的代码我做了什么。

我的模块名称是TCreg_Customer

app/etc/modules/TCreg_Customer.xml

<?xml version="1.0"?>
<config>
    <modules>
        <TCreg_Customer>
        <codePool>local</codePool>
        <active>true</active>
        </TCreg_Customer>
    </modules>
</config>

app/code/local/TCreg/Customer/etc/config.xml

我复制 app/code/core/Mage/Customer/etc/config.xml 文件并进行 2 处更改

<modules>
        <TCreg_Customer>
            <version>1.0.0</version>
        </TCreg_Customer>
    </modules>

并添加

<landphone><create>1</create><update>1</update></landphone>

&lt;customer_account&gt;标签内

app/code/local/TCreg/Customer/Model/Entity/Setup.php

<?php
class TCreg_Customer_Model_Entity_Setup extends Mage_Customer_Model_Entity_Setup

    public function getDefaultEntities()

        return array(

                'landphone'=>array(
                        'type'=> 'varchar',
                        'label'=> 'Land Phone',
                        'visiable' => true,
                        'sort_order' => 80,
                )
        );
    
 
?>

Land Phone 字段设置在位于 app/design/frontend/mytheme/template/persistent/customer/form/register.phtmlregister.phtml

<!--landphone field begin-->
    <div class="field">
     <label for="landphone"><?php echo $this->__('Land Phone') ?></label>
     <div class="input-box">
     <input type="text" name="landphone" id="landphone" value="<?php echo $this->escapeHtml($this->getFormData()->getLandphone()) ?>" title="<?php echo $this->__('Land Phone') ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('landphone') ?>" />
   </div>
</div>
<!--landphone field end-->

app/design/frontend/mytheme/template/persistent/customer/address/edit.phtml

<!--Landphone field begin-->
    <div class="field">
    <label for="landphone"><?php echo $this->__('Land Phone') ?></label>
     <div class="input-box">
     <input type="text" name="landphone" value="<?php echo $this->htmlEscape($this->getAddress()->getLandphone()) ?>" title="<?php echo $this->__('Land Phone') ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('landphone') ?>" id="landphone" />

</div>
</div>
<!--Landphone field end-->

新属性(陆地电话)需要添加到 Magento 数据库中。所以我在register.phtml中添加了这些代码

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$setup->addAttribute('customer', 'landphone', array(
    'label'     => 'Land Phone',
    'type'      => 'varchar',
    'input'     => 'text',
    'visible'   => true,
    'position'  => 1,
    ));

我认为唯一的问题是 Land phone 的值没有插入到客户表中。但我找不到解决方案。所以请帮助我..我该如何解决这个问题?任何帮助都是非常可观的..

我的 ma​​gento 版本是 1.9.1.0

【问题讨论】:

出于相同目的,请查看以下帖子:phpmagento.blogspot.in/2012/02/… 希望您能有一些想法以另一种方式执行此操作...不要忘记将核心文件复制到本地代码池文件夹 @VinodKumar,这是什么? '不要忘记将核心文件复制到本地代码池文件夹'.. 我提到你的链接,直接显示核心文件中的所有代码修改......所以我建议你将所有要编辑的文件复制到本地/法师目录中...... @VinodKumar,我按照教程进行操作,但没有运气......仍然没有将数据插入表中。 【参考方案1】:

您需要确保该属性在表 customer_form_attribute 中有一个条目,这将告诉 Magento 哪些客户属性应该在每个客户和地址表单上可用。

您可以通过以下脚本 sn-p 执行此操作。构建一个新的设置脚本,您已经提到您可以这样做并设置属性需要在其中可用的所有表单的数组。

Mage::getSingleton('eav/config')
        ->getAttribute('customer', 'attribute_code')
        ->setData('used_in_forms', array('adminhtml_customer', 'checkout_register', 'customer_account_create'))
        ->save();

表单代码选项如下:

adminhtml_checkout, adminhtml_customer, adminhtml_customer_address, checkout_register, customer_account_create, customer_account_edit, customer_address_edit, customer_register_address

【讨论】:

我很困惑,请更具体。 ->setData('used_in_forms', array('adminhtml_customer')) 中的 'used_in_forms' 是什么。把这段代码放在哪里? “表单代码选项”是什么意思?? 添加了一个简短的说明,基本上你需要一个新的设置脚本并将 used_in_forms 设置为属性应该在其中的所有表单的数组。

以上是关于使用自定义模块进行注册时,数据未插入到 magento 数据库中的主要内容,如果未能解决你的问题,请参考以下文章

当尝试将变量传递给另一个模块时,将代码拆分到Nodejs中的自定义模块时,它将被定义为未定义

wxml不可以使用自定义组件

未找到 Laravel 注册索引并创建错误

自定义模块的自定义布局不会在 Magento 1.9 中加载

使用 swift 4 以编程方式注册时未显示自定义单元格

MMDetection2.17-自定义组件时注册表(Registry)分析理解--以如何增加注意力模块为例