概述:为什么要重视 Odoo 的静态页面模型
在 Odoo 中,“模型”决定了数据如何被组织和存储。简单来说,你在业务中看到的每一条记录都存在某个模型里,模型定义了字段、关系和数据类型,是数据库的蓝图。
对于开发者与功能顾问而言,弄清模型结构是基础技能。模型不仅声明字段,还承载验证规则、默认值和业务逻辑,是理解系统行为与扩展能力的出发点。
本文聚焦于 website.page 这个模型:它负责管理网站上的静态页面。如果你的项目涉及自定义落地页、公司介绍页或需要把外部内容同步到网站,这个模型会频繁出现。
什么是 website.page 模型(用一句话说明)
website.page 在 Odoo 里表示手工创建和编辑的静态页面(如“关于我们”“联系我们”或营销落地页)。它属于 Website 应用生态,用于保存那些通过网站构建器维护的页面记录。
技术上,website.page 通过 Odoo 的模型继承机制与 ir.ui.view 关联(采用 _inherits)。也就是说,每条 page 记录对应一个包含 QWeb 模板和视图元数据的 ir.ui.view。页面的实际 HTML/模板存在那个视图里。
注意,像店铺列表或博客归档这类动态生成的页面,通常并不作为 website.page 记录存储。
换句话说,website.page 专用于可在网站构建器中直接编辑的静态内容;动态列表页由其他机制生成,不归入此模型管理。
模型中哪些字段最关键(快速导览)
下面列出与 website.page 最相关、在实际工作中最常用的字段,了解它们能更高效地管理页面与SEO。
1. 页面标题(name)
字段类型:Char。代表页面的标题,前端浏览器标签、导航菜单和搜索结果中显示的名称通常来自它。该值源自关联的 ir.ui.view。
2. 页面路径(url)
字段类型:Char。表示页面的访问路径,必须以斜杠开头,例如 /contact 或 /about-us,用户通过此路径访问页面。
3. 视图引用(view_id)
字段类型:Many2one(ir.ui.view)。必填。指向包含 QWeb 模板(arch)与 key 的视图。删除该视图会级联影响页面。
4. 所属网站(website_id)
字段类型:Many2one(website)。表示页面属于哪个网站;在多站点环境下可设为特定站点或留空以共享。
5. 是否发布(is_published)
字段类型:Boolean。控制页面是否对访客可见。未发布的页面通常会返回 404 或重定向,适用于临时隐藏内容。
6. 是否允许搜索引擎索引(website_indexed)
字段类型:Boolean。用于控制是否允许搜索引擎抓取该页,例如感谢页应关闭索引。
7. 发布日期(date_publish)
字段类型:Datetime。记录页面何时发布,常用于定时发布和前端显示上线时间。
8. 是否显示页头(header_visible)
字段类型:Boolean。用于决定是否渲染网站通用头部,适合需要沉浸式或全屏场景的落地页。
9. 是否显示页脚(footer_visible)
字段类型:Boolean。与 header_visible 类似,用于在特定页面隐藏或展示全站页脚。
10. 是否为主页(is_homepage)
字段类型:Boolean(计算字段)。当该页被设置为站点首页时为真,每个站点仅能有一个首页。
11. 是否可见(is_visible)
字段类型:Boolean(计算字段)。综合发布状态、时间与可见性规则,表示当前该页是否应当向用户展示。
12. 菜单项关联(menu_ids)
字段类型:One2many(website.menu)。列出链接到此页面的菜单项,一个页面可以在多个菜单中出现或不出现在任何菜单。
13. 创建时间(create_date)
字段类型:Datetime。记录创建时间,由 Odoo 自动维护,便于审计与报表。
14. 修改时间(write_date)
字段类型:Datetime。记录最后一次修改时间,同样由系统维护,用来追踪更新。
15. 模板内容(arch)
字段类型:Text。实际的 QWeb XML 模板保存在关联的 ir.ui.view 中,包含页面结构与可复用片段,网站构建器可直接编辑它。
16. 视图唯一键(key)
字段类型:Char。视图的唯一标识符,常用于模块 XML 文件与继承,通常格式为 module.view_name。
17. 视图类型(type)
字段类型:Selection。视图类型,对于网站页面应为 qweb,其他场景有 form、tree 等。
18. 是否激活(active)
字段类型:Boolean。软删除标志,来自 ir.ui.view;当为 False 时表示已归档,归档页面不会被访问。
19. SEO 标题(website_meta_title)
字段类型:Char。可覆盖默认标题,用于搜索引擎结果的展示,直接影响点击率与可见性。
20. SEO 描述(website_meta_description)
字段类型:Text。搜索结果中显示的摘要建议控制在 150–160 字符之内,以获得最佳展示效果。
21. 关键词(website_meta_keywords)
字段类型:Char。逗号分隔的关键词列表。现代 SEO 权重有限,但某些系统仍会读取。
22. 头部覆盖(header_overlay)
字段类型:Boolean。是否让头部覆盖内容区域,适用于横幅式(hero)页面,使头部悬浮在视觉层上。
23. 头部配色(header_color)
字段类型:Selection。控制头部色系(如 transparent、light、dark),影响可读性与视觉对比。
24. 访问可见性(visibility)
字段类型:Selection。访问控制选项:公开、登录用户、特定用户组或需要密码,适用于会员区或内部文档。
25. 重定向类型(redirect_type)
字段类型:Selection。当 URL 变更时选择 301(永久)或 302(临时)重定向,或不重定向,对 SEO 很重要。
企业如何在日常流程中使用该模型
网站页面在业务中的常见用途(概览)
落地页与活动推广:营销团队会为每次活动新建落地页,作为单独的 website.page 记录,控制 URL、上线时间与内容,配合 date_publish 实现定时发布。
公司官网的静态页面管理
企业的“关于我们”“隐私政策”“服务条款”等典型静态内容通常以 website.page 维护,更新频率低但对合规与品牌一致性很重要,其菜单位置通过 menu_ids 管理。
感谢页与提交确认页的处理
例如“表单已提交”或“预约成功”类页面也用 website.page 表示,但应将 website_indexed 设为 False,避免被搜索引擎收录。
多站点与本地化策略
在多网站部署下,通过 website_id 指定归属站点;若需多语言或地域化内容,可为不同站点复制并本地化页面。
受限内容与会员区实现方式
利用 visibility 字段可以把页面限定为登录用户或指定用户组访问,适合企业内部文档、付费会员内容或受控资源。
开发者如何扩展和定制 website.page
开发者扩展的常见思路与实践
模型继承是扩展 website.page 的主要手段
在自定义模块中使用 _inherit = 'website.page' 来新增字段或覆盖方法。保持扩展模块独立有利于后续升级与维护。
新增字段的设计要点
在继承模型中声明新的 Odoo 字段(Char、Many2one、Boolean、Integer、Text、Selection 等),并为多站点考虑是否需要 website-dependent 字段。
通过 Python 覆盖与扩展业务逻辑
可覆盖 create、write、unlink 等方法来加入自定义逻辑,记得调用 super() 保持链式行为;对 view_id 的级联删除需特别小心,避免无意丢失视图内容。
使用 Odoo Studio 的取舍
Odoo Studio 更适合快速布局与字段增删,便捷但在复杂逻辑或需对接外部 API 的场景下,自建模块更可控也更利于版本管理。
实务建议与 SEO 优化要点
- URL 规范化:使用友好且一致的 slug,同时避免特殊字符并用连字符分隔单词以提升可读性与 SEO 效果。
- 对感谢页与内部页关闭索引(website_indexed=False),以免造成低价值页面占据搜索结果。
- 更改页面 URL 时务必配置合适的重定向(301/302),保护已有的 SEO 权重并避免链接失效。
- 每个对外公开页面都应填写 website_meta_title 与 website_meta_description,以提升搜索展现与点击率。
- 通过 API 或 XML-RPC 创建页面的正确顺序是:先创建 ir.ui.view(type 为 qweb 并确保 key 唯一),再创建 website.page 并指向该 view_id,这样可以避免关系错误。
新手常犯的错误与坑位提醒
- 常见错误一:没有先创建或关联合法的 view_id。必须确保视图存在且类型为 qweb。
- 常见错误二:URL 未以斜杠开头。Odoo 期待形如 /contact 的路径,缺少斜杠会导致访问异常。
- 常见错误三:忘记对感谢/确认页关闭索引,导致不需要的页面被搜索引擎抓取,稀释站点关键词权重。
- 常见错误四:修改 URL 却未配置重定向,旧链接因此失效,搜索引擎收录和外部引用会遭到破坏。
- 常见错误五:直接修改由网站构建器改动过的视图 arch 时,可能受 ir.model.data 中 noupdate 标志影响,导致你的 XML 更改无法生效,必要时需调整该标志或通过正确的升级路径更新视图。
总结:掌握 website.page 带来的实际好处
小结:website.page 是 Odoo 管理静态页面的核心模型。它保存页面的元数据、访问路径与发布设置,而页面的具体模板与 HTML 内容保存在相应的 ir.ui.view 中。
掌握 website.page 的字段含义与其与 ir.ui.view 的继承关系,会让你在配置站点、定制功能或做系统集成时少走弯路。无论你是实施顾问还是后端开发者,理解这一模型能提高效率并降低出错率。
需要 Odoo 实施支持吗?联系我们获取帮助
关于我们:Dasolo 专注于 Odoo 的实施、定制与性能优化,尤其擅长 API 集成与模型级别的开发工作。我们对 Odoo 的数据结构与诸如 website.page 这样的关键模型有深入实战经验。
如果你在 Odoo 实施、定制网站页面或系统集成方面需要支持,我们可以提供咨询、开发与实施服务。 预约产品演示 与我们沟通你的项目需求与实施计划。