Magento 仅在某些情况下显示地址字段并验证注册表

Magento show Address fields and validate registration form only under some conditions

我正在尝试自定义用于创建客户帐户的表格,我想对不同类型的客户(即私人和公司)使用相同的表格。 我想要实现的是对两者使用相同的表单并根据用户的选择显示不同的字段:如果用户选择 'private' 他必须填写一些字段,如果他选择 'company',另外显示地址和增值税字段。

所以我在 local.xml 中启用了地址字段,它们会正确显示或隐藏,具体取决于选择的按钮(私人或公司)。

问题是,如果我只是隐藏地址字段,表单也会在这些字段上进行验证,除非我放一个

$this->setShowAddressFields(false);

就在

之前
if($this->getShowAddressFields()): ?

隐藏地址字段并禁止验证。 我也放了 <input type="hidden" name="create_address" value="0" /> 跳过地址字段验证。

所以我尝试使用 jquery 来更改 setShowAddressFields 每当用户单击按钮以选择其类型时,例如

        $('#choose-type button').click(function(){
            if($(this).val() == 'private'){
                $(this).addClass('selected');
                $('#choose-type button').last().removeClass('selected');
                $('.required-company').removeClass('visible'); 
                <?php $addrEnabled = $this->setShowAddressFields(false) ?>

            }else{
                $(this).addClass('selected');
                $('#choose-type button').first().removeClass('selected');
                <?php $addrEnabled = $this->setShowAddressFields(true) ?>
                $('.required-company').addClass('visible');
            }
        });

我还尝试在同一模板中显示两种不同的形式,一种使用 $this->setShowAddressFields(false),另一种使用 $this->setShowAddressFields(true) 和 show/hide正确的形式,并用 Varien 验证正确的形式,就像这样

var dataForm = new VarienForm('form-validate', true);
var dataFormbis = new VarienForm('form-validate-bis', true);

但仍然没有运气。

所以有可能在同一个模板中实现这样的东西,还是我必须强制创建两个不同的模板?

不知道它是否对某人有帮助,但我想出了我自己的解决方案(尽管我并不完全喜欢它,也不知道它是否是正确的方法)。

我终于成功解决了问题的最后一部分,因此创建了 2 个不同的表单并为每个表单创建了验证。

第一种形式具有 <?php $addrEnabled = $this->setShowAddressFields(false) ?>,而第二种形式将其设置为 true。

表单有不同的 id 来标识它们,一个有 id='form-private',另一个有 id='form-company'

然后在我的脚本中我有

validateRegistration('private','company');

        $('#choose-type button').click(function(){
            ($(this).val() == 'private') ? validateRegistration($(this).val(), 'company') : validateRegistration($(this).val(), 'private');
        });

        function validateRegistration(userType,userTypeBis){
            $("#form-"+userType + "").css('display', 'block');
            $("#form-"+userTypeBis + "").css('display', 'none');

            var dataForm = new VarienForm('form-'+userType+'', true);

            $("#form-"+userType + "").submit(function(e){
                if(//some custom condition to avoid validation in case some custom fields are not in the way i need ) {   
                    e.preventDefault();
                }
                else {
                    dataForm.validator && dataForm.validator.validate();  
                }
            });
        }
</script>

请注意,如果验证通过,submit() 会在 dataForm.validator.validate() 内部调用,因此不需要我的自定义条件(if-else),我认为重要的是有两种不同的形式和两种不同的验证。

希望对您有所帮助