Odoo 10e实现按钮跳转自定义感谢HTML页面技术咨询
在Odoo 10中实现点击按钮跳转至自定义感谢页面(无法重复提交)
嘿,我来帮你搞定这个需求!在Odoo 10里实现点击按钮跳转到自定义感谢页面,还要像谷歌问卷那样防止重复提交,其实分几步就能搞定,我给你详细拆解一下:
1. 创建自定义感谢页面的QWeb模板
首先你需要在你的模块里定义一个感谢页面的HTML模板,用Odoo的QWeb语法来写,这样页面会自动套用你当前网站的布局,风格统一。
在你的模块下创建views/templates.xml文件(如果没有的话),添加以下代码:
<odoo> <!-- 定义感谢页面模板 --> <template id="thank_you_page" name="Thank You Page"> <t t-call="website.layout"> <div class="container mt-5"> <div class="jumbotron text-center"> <h1 class="display-4">🎉 感谢您的提交!</h1> <p class="lead">您的信息已成功记录,我们会在24小时内与您取得联系。</p> <hr class="my-4"> <p>如果您有其他需求,可以随时访问我们的首页或联系客服。</p> <a class="btn btn-primary btn-lg" href="/" role="button">返回首页</a> </div> </div> </t> </template> <!-- 注册页面路由,让用户能通过URL访问 --> <record id="thank_you_route" model="ir.ui.view"> <field name="name">Thank You Page Route</field> <field name="model">ir.ui.view</field> <field name="arch" type="xml"> <odoo> <route path="/thank-you" type="http" auth="public"> <template>your_module.thank_you_page</template> </route> </odoo> </field> </record> </odoo>
注意把your_module替换成你实际的模块名称,这样路由才能正确找到模板。auth="public"确保未登录用户也能访问这个页面。
2. 编写按钮的提交与跳转逻辑
接下来要给按钮绑定方法,先处理提交逻辑(比如保存状态、标记已提交),然后跳转到刚才创建的感谢页面。
在你的模型文件(比如models/your_model.py)里添加以下代码:
from odoo import models, api class YourModel(models.Model): _inherit = 'your.model' # 替换成你实际要扩展的模型,比如'crm.lead' @api.multi def action_submit_and_redirect(self): # 第一步:处理提交逻辑,比如标记记录为已提交 # 假设你的模型有一个state字段,用来控制状态 self.write({'state': 'submitted'}) # 第二步:跳转到自定义感谢页面 return { 'type': 'ir.actions.act_url', 'url': '/thank-you', 'target': 'self' }
如果你的模型还没有state字段,记得先添加这个字段(可以通过模型继承或者直接修改模型),用来区分已提交和未提交的记录。
3. 防止重复提交的处理
要实现类似谷歌问卷的“无法返回再次提交”效果,我们需要在提交页面做两个限制:
- 已提交的记录,隐藏提交按钮
- 如果用户通过浏览器返回按钮回到提交页面,提示已提交并引导到感谢页面
在你的表单视图文件(比如views/your_view.xml)里修改:
<odoo> <record id="your_model_form_view" model="ir.ui.view"> <field name="name">Your Model Form View</field> <field name="model">your.model</field> <field name="inherit_id" ref="base.your_model_form"/> # 替换成实际的父视图ID <field name="arch" type="xml"> <!-- 添加提交按钮,只有状态不是已提交时显示 --> <button name="action_submit_and_redirect" string="提交表单" type="object" class="btn-primary" attrs="{'invisible': [('state', '=', 'submitted')]}" /> <!-- 当状态为已提交时,显示提示信息 --> <div attrs="{'invisible': [('state', '!=', 'submitted')]}" class="alert alert-success mt-3" > <strong>温馨提示:</strong>您已成功提交该表单,无法重复提交。<a href="/thank-you" class="alert-link">点击查看感谢页面</a> </div> </field> </record> </odoo>
最后一步:更新模块并测试
做完以上操作后,记得升级你的模块,然后测试流程:
- 打开记录,点击提交按钮,会自动跳转到感谢页面
- 点击浏览器返回按钮,回到提交页面后,会看到已提交的提示,提交按钮也会隐藏
- 直接访问感谢页面的URL
/thank-you,也能正常打开
这样就完全实现了你想要的效果啦!
内容的提问来源于stack exchange,提问作者Ahsan Attari
相关产品推荐
相关产品推荐

