1

我已经为我的 Magento 主题创建了一个自定义布局,效果很好。到目前为止,我唯一的问题是我的注册完全没有任何作用。我尝试过搜索,但似乎只找到了有关如何将新字段添加到注册页面的结果。我目前的代码如下:

    <div id="user-login">
        <span class="log-head loginfield">
            <form action="<?php echo $this->getPostActionUrl() ?>" method="post" id="login-form">
                <h2>You Already Have An Account</h2>
                <p>Please login with your e-mail and password</p>
                <span>
                  <label>Enter your E-mail address:</label>
                  <input type="text" name="login[username]" value="<?php echo $this->htmlEscape($this->getUsername()) ?>" id="email" class="input-text required-entry validate-email" title="<?php echo $this->__('Email Address') ?>" />
                </span>
                <span>
                  <label>Enter your password:</label>
                  <input type="password" name="login[password]" class="input-text required-entry validate-password" id="pass" title="<?php echo $this->__('Password') ?>" />
                </span>
                  <input class="submit" type="submit" value="Submit">
             </form>
         </span>
         <span class="log-head registerfield">
             <form action="<?php echo $this->getPostActionUrl() ?>" method="post" id="form-validate">
                 <input type="hidden" name="success_url" value="<?php echo $this->getSuccessUrl() ?>" />
                 <input type="hidden" name="error_url" value="<?php echo $this->getErrorUrl() ?>" />
                 <h2>You Don't Have An Account</h2>
                 <p>Please enter your information and create an account</p>
                 <span>
                   <label>Email Address:</label>
                   <input type="text" name="login[username]" value="<?php echo $this->htmlEscape($this->getUsername()) ?>" id="email" class="input-text required-entry validate-email" title="<?php echo $this->__('Email Address') ?>" />
                 </span>
                 <span>
                   <label>Enter your password:</label>
                   <input type="password" name="password" id="password" title="<?php echo $this->__('Password') ?>" class="input-text required-entry validate-password" />
                 </span>
                 <span>
                   <label>Re-Enter your password:</label>
                   <input type="password" name="confirmation" title="<?php echo $this->__('Confirm Password') ?>" id="confirmation" class="input-text required-entry validate-cpassword" />
                 </span>
                   <input class="submit" type="submit" value="Create Account">
              </form>
              <script type="text/javascript">
                        //<![CDATA[
                            var dataForm = new VarienForm('form-validate', true);
                            <?php if($this->getShowAddressFields()): ?>
                            new RegionUpdater('country', 'region', 'region_id', <?php echo $this->helper('directory')->getRegionJson() ?>, undefined, 'zip');
                            <?php endif; ?>
                        //]]>
              </script>
          </span>
</div><!--/user-login -->

我结合了注册和登录页面以适合我的设计。输入字段直接取自基本主题。在我尝试测试并创建用户之后,页面只是刷新并且永远不会创建用户。如果我从后端创建一个用户并尝试登录页面刷新但从不登录我也是如此。

任何帮助都将不胜感激。

4

4 回答 4

4

您遇到问题的原因是因为两个表单都指向相同的表单操作(假设输入名称与默认 magento 相同)

action="<?php echo $this->getPostActionUrl()

这应该可以解决您的问题

更改此设置(我不确定您使用的是哪种块类型,因此我将更改这两个操作)

 <form action="<?php echo $this->getPostActionUrl() ?>" method="post" id="login-form">

<form action="<?php echo Mage::helper('customer')->getLoginPostUrl() ?>" method="post" id="login-form">

改变这个

<form action="<?php echo $this->getPostActionUrl() ?>" method="post" id="form-validate">

<form action="<?php echo Mage::helper('customer')->getRegisterPostUrl() ?>" method="post" id="form-validate">

如果这不起作用,请查看页面源代码并查看两个表单操作指向的位置(请参阅下面的它们应该指向的位置)。尝试将操作更改为

 <?php echo  Mage::getUrl() . '/customer/account/loginPost/'; ?> and <?php echo  Mage::getUrl() . /customer/account/createpost/ ?>

问题原因

默认情况下,magento 将注册和登录表单分成 2 个不同的页面,这些页面使用两个不同的块

请参阅 /app/design/frontend/default/contempospace/layout/customer.xml(customer_account_create 和 customer_account_login)

<block type="customer/form_login" name="customer_form_login" template="customer/form/login.phtml"/>

<block type="customer/form_register" name="customer_form_register" template="customer/form/register.phtml">

两个块都有一个方法 getPostActionUrl() 指向不同的 url /customer/account/loginPost/ 和 /customer/account/createpost/

/app/code/core/Mage/Customer/Block/Form/Login.php
/app/code/core/Mage/Customer/Block/Form/Register.php

您可能想看看Blocks 和 PHTML 如何协同工作

于 2012-10-26T00:17:58.170 回答
0

尝试使用:

<input name="form_key" type="hidden" value="<?php echo $this->getFormKey() ?>" />

并且您应该使用相同的名称来输入原产地名称。

于 2012-10-25T17:53:59.987 回答
0
<input name="form_key" type="hidden" value="<?php echo $this->getFormKey() ?>" />

<block type="customer/form_login" name="customer_form_login" template="customer/form/login.phtml"/>

<block type="customer/form_register" name="customer_form_register" template="customer/form/register.phtml">

<input name="form_key" type="hidden" value="<?php echo $this->getFormKey() ?>" />

<block type="customer/form_login" name="customer_form_login" template="customer/form/login.phtml"/>

<block type="customer/form_register" name="customer_form_register" template="customer/form/register.phtml">
于 2013-03-21T16:14:43.950 回答
0

每个人都对此非常有帮助(我遇到了同样的问题)。花了我一点时间,但这在最近的升级后浮出水面。问题是注册表单中没有 formkey 字段,只需将下面的行添加到表单中,它就开始对我正常工作。

<?php echo $this->getBlockHtml('formkey')?>
于 2015-12-22T23:08:52.730 回答