### 动作和菜单 操作和菜单是数据库中的常规记录,通常通过数据文件声明。行动可以用三种方式触发: 1. 通过点击菜单项(链接到特定的行动) 2. 通过点击按钮(如果这些连接到行动) 3. 作为对象的上下文行为 因为菜单是有点复杂的声明有一个 `<menuitem>` 声明的快捷方式 `ir.ui.menu` 并将其连接到相应的动作更容易。 ~~~ xml <record model="ir.actions.act_window" id="action_list_ideas"> <field name="name">Ideas</field> <field name="res_model">idea.idea</field> <field name="view_mode">tree,form</field> </record> <menuitem id="menu_ideas" parent="menu_root" name="Ideas" sequence="10" action="action_list_ideas"/> ~~~ Danger 必须声明其相应的菜单中的XML文件。 按顺序执行数据文件,在菜单可以创建之前,该操作的 `id` 必须在数据库中出现。 练习 定义新的菜单项 定义新的菜单项来访问课程和会议的 openacademy 菜单项下。用户应该能够 * 显示所有课程列表 * 创建/修改课程 1. 创建 `openacademy/views/openacademy.xml` 一个动作和菜单触发的动作 2. 将它添加到 `data` 列表中 `openacademy/__openerp__.py` *openacademy/__openerp__.py* ~~~ python 'data': [ # 'security/ir.model.access.csv', 'templates.xml', 'views/openacademy.xml', ], # only loaded in demonstration mode 'demo': [ ~~~ *openacademy/views/openacademy.xml* ~~~ xml <?xml version="1.0" encoding="UTF-8"?> <openerp> <data> <!-- window action --> <!-- 以下标记为一个操作定义 "window action", 这是一个行动打开一个视图或一组视图 --> <record model="ir.actions.act_window" id="course_list_action"> <field name="name">Courses</field> <field name="res_model">openacademy.course</field> <field name="view_type">form</field> <field name="view_mode">tree,form</field> <field name="help" type="html"> <p class="oe_view_nocontent_create">Create the first course </p> </field> </record> <!-- 顶级菜单:没有父 --> <menuitem id="main_openacademy_menu" name="Open Academy"/> <!-- 在左侧菜单中的第一级是必要的 在使用动作=属性 --> <menuitem id="openacademy_menu" name="Open Academy" parent="main_openacademy_menu"/> <!-- 他应该出现以下菜单项 *after* 其父 openacademy_menu 和 *after* 它的行动 course_list_action --> <menuitem id="courses_menu" name="Courses" parent="openacademy_menu" action="course_list_action"/> <!-- 全部 id 位置: action="openacademy.course_list_action" 它是不需要的,当它是相同的模块 --> </data> </openerp> ~~~