### 動作和菜單
操作和菜單是數據庫中的常規記錄,通常通過數據文件聲明。行動可以用三種方式觸發:
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>
~~~