首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Magento 2中添加新字段以创建帐户表单

在Magento 2中添加新字段以创建帐户表单
EN

Stack Overflow用户
提问于 2016-04-25 18:54:29
回答 1查看 4.3K关注 0票数 1

我在客户创建帐户表单中添加新字段时遇到问题。字段正确显示在管理面板中添加新的客户表单,但不是在前端创建帐户。我创建了这样的模块:

MyModules\CustomerMarketingFields\Setup\InstallData.php

代码语言:javascript
复制
<?php
namespace MyModules\CustomerMarketingFields\Setup;
use Magento\Framework\Module\Setup\Migration;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
class InstallData implements InstallDataInterface
{
    /**
     * Customer setup factory
     *
     * @var \Magento\Customer\Setup\CustomerSetupFactory
     */
    private $customerSetupFactory;
    /**
     * Init
     *
     * @param \Magento\Customer\Setup\CustomerSetupFactory $customerSetupFactory
     */
    public function __construct(\Magento\Customer\Setup\CustomerSetupFactory $customerSetupFactory)
    {
        $this->customerSetupFactory = $customerSetupFactory;
    }
    /**
     * Installs DB schema for a module
     *
     * @param ModuleDataSetupInterface $setup
     * @param ModuleContextInterface $context
     * @return void
     */
    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
    $installer = $setup;
    $installer->startSetup();
    $customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);
    $entityTypeId = $customerSetup->getEntityTypeId(\Magento\Customer\Model\Customer::ENTITY);

    $customerSetup->addAttribute(\Magento\Customer\Model\Customer::ENTITY, "regulation",  array(
        "type"     => "int",
        "backend"  => "",
        "label"    => "Regulation",
        "input"    => "boolean",
        "source"   => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
        "visible"  => true,
        "required" => true,
        "default" => "",
        "frontend" => "",
        "unique"     => false,
        "note"       => ""

    ));

    $regulation   = $customerSetup->getAttribute(\Magento\Customer\Model\Customer::ENTITY, "regulation");

    $regulation = $customerSetup->getEavConfig()->getAttribute(\Magento\Customer\Model\Customer::ENTITY, 'regulation');
    $used_in_forms[]="adminhtml_customer";
    $used_in_forms[]="checkout_register";
    $used_in_forms[]="customer_account_create";
    $used_in_forms[]="customer_account_edit";
    $used_in_forms[]="adminhtml_checkout";
    $regulation->setData("used_in_forms", $used_in_forms)
        ->setData("is_used_for_customer_segment", true)
        ->setData("is_system", 0)
        ->setData("is_user_defined", 1)
        ->setData("is_visible", 1)
        ->setData("sort_order", 100);
    $regulation->save();

    $installer->endSetup();
}
}

MyModules\CustomerMarketingFields\View\Frontend\layout\customer_account_create.xml

代码语言:javascript
复制
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="form.additional.info">
<block class="Magento\Framework\View\Element\Template" name="my_form_additional_info_customer" template="MyModules_CustomerMarketingFields::additionalinfocustomer.phtml"/>
</referenceContainer>
</body>
</page>

MyModules\CustomerMarketingFields\View\Frontend\templates\additionalinfocustomer.phtml

代码语言:javascript
复制
<fieldset class="fieldset create account" data-hasrequired="<?php /* @escapeNotVerified */
echo __('* Required Fields') ?>">
    <legend class="legend"><span><?php /* @escapeNotVerified */
            echo __('Additional Information') ?></span></legend>

<p>
<div class="field regulation required">
    <label for="regulation" class="label"><span><?php /* @escapeNotVerified */
            echo __('Regulation') ?></span></label>
    <div class="control">
        <input type="checkbox" checked name="regulation" id="regulation" title="<?php /* @escapeNotVerified */
        echo __('Regulation') ?>" class="input-text" data-validate="{required:true}">
    </div>
</div>
</p>
</fieldset>

这里不包括文件module.xml和registration.php。有人能告诉我我哪里做错了吗?

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2016-04-25 20:50:58

下面的代码适用于我

MyModules/CustomerMarketingFields/etc/modules.xml

代码语言:javascript
复制
<?xml version="1.0"?>
<!--
/**
 * Copyright © 2016 Samumaretiya. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
	<module name="MyModules_CustomerMarketingFields" setup_version="2.0.0">
		<sequence>
            <module name="Magento_Customer"/>
        </sequence>
	</module>
</config>

布局

MyModules/CustomerMarketingFields/view/frontend/layout/customer_account_create.xml

代码语言:javascript
复制
Layout

MyModules/CustomerMarketingFields/view/frontend/layout/customer_account_create.xml

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="form.additional.info">
            <block class="Magento\Framework\View\Element\Template" name="form_additional_info_customer" template="MyModules_CustomerMarketingFields::additionalinfocustomer.phtml"/>
        </referenceContainer>
    </body>
</page>

模板

MyModules/CustomerMarketingFields/view/frontend/templates/additionalinfocustomer.phtml

代码语言:javascript
复制
<fieldset class="fieldset create account" data-hasrequired="<?php /* @escapeNotVerified */
echo __('* Required Fields') ?>">
    <legend class="legend"><span><?php /* @escapeNotVerified */
            echo __('Additional Information') ?></span></legend>

<p>
<div class="field regulation required">
    <label for="regulation" class="label"><span><?php /* @escapeNotVerified */
            echo __('Regulation') ?></span></label>
    <div class="control">
        <input type="checkbox" checked name="regulation" id="regulation" title="<?php /* @escapeNotVerified */
        echo __('Regulation') ?>" class="input-text" data-validate="{required:true}">
    </div>
</div>
</p>
</fieldset>

上面的代码对我来说很有效。你可以让视图,布局,前台等都是小写的吗?

完成上述操作后,请从cmd执行以下命令

sudo php "Your magento 2 installation folder name"/bin/magento setup:upgrade

sudo chmod -R 777“您的magento 2安装文件夹名”

如果您有任何疑问或疑虑,请告诉我

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36838554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档