如何在Magento 1.8.1版本的联系表单中添加复选框?
在Magento 1.8.1联系表单中添加复选框的简便方法
嘿Wojtek,我刚好折腾过Magento 1.8.x版本的联系表单自定义,给你分享个不用装扩展、直接改文件就能搞定的简便方案,分三步走:
1. 修改前端表单模板,添加复选框
找到你当前主题的联系表单模板文件:app/design/frontend/[你的主题包]/[主题名称]/template/contacts/form.phtml
在表单的合适位置(比如提交按钮上方)插入复选框代码,建议放在留言框和提交按钮之间:
<div class="field checkbox required"> <input type="checkbox" id="agree_terms" name="agree_terms" value="1" class="input-checkbox validate-required-checkbox" /> <label for="agree_terms" class="label"><em>*</em> 我同意网站的隐私政策与服务条款</label> </div>
注意:把
[你的主题包]/[主题名称]替换成你实际使用的主题路径,比如默认主题是base/default
2. 添加前端验证规则
还是在刚才的form.phtml文件里,找到页面底部的表单验证初始化代码(大概在</form>标签附近),在VarienForm初始化后添加自定义验证规则:
var contactForm = new VarienForm('contactForm', true); // 给复选框添加必填验证 Validation.add('validate-required-checkbox', '请勾选同意条款', function(v) { return $('agree_terms').checked; });
这样用户没勾选的话,点击提交会直接在前端弹出提示,不用走后端请求。
3. 后端验证(防止绕过前端提交)
为了避免用户通过调试工具绕过前端验证,我们需要在后端也加一层校验。不建议直接修改核心文件,最好把核心控制器复制到local目录下修改:
- 复制
app/code/core/Mage/Contacts/controllers/IndexController.php到app/code/local/Mage/Contacts/controllers/IndexController.php - 打开复制后的文件,找到
postAction()方法,在$post = $this->getRequest()->getPost();这行后面添加以下代码:
// 验证复选框是否勾选 if (!$this->getRequest()->getPost('agree_terms')) { Mage::getSingleton('customer/session')->addError($this->__('请勾选同意条款')); $this->_redirect('contacts'); return; }
这样就算用户绕过前端,后端也会拦截并跳回联系表单,显示错误提示。
可选:把复选框状态加入邮件内容
如果需要在收到的联系邮件里显示用户是否勾选了复选框,还需要修改邮件模板:
- 找到邮件模板文件:
app/locale/[你的语言]/template/email/contacts_email_template.html(比如中文是zh_CN) - 在模板合适位置添加:
<p><strong>是否同意条款:</strong> {{var data.agree_terms}}</p>
- 回到刚才修改的
IndexController.php的postAction()方法,找到$mailTemplate->setVars(array(这部分,在数组里添加一行:
'agree_terms' => $post['agree_terms'] ? '是' : '否',
这样收到的邮件里就会显示用户的勾选状态了。
这个方案都是Magento原生的修改方式,不需要额外安装扩展,操作起来也比较直观,适合快速实现需求~
内容的提问来源于stack exchange,提问作者WojtekPl
相关产品推荐
相关产品推荐

