首页 > 其他分享 >[odoo开发笔记05]odoo 15&16 Tree/看板视图添加按钮

[odoo开发笔记05]odoo 15&16 Tree/看板视图添加按钮

时间:2023-07-28 23:00:13浏览次数:38  
标签:xml web 15 button tree 视图 odoo var view

odoo在15及之后版本产生js引用变更,导致14及之前列表视图(Tree/List)添加自定义按钮的方式产生了变化。

目前15/16版本列表视图添加按钮有三种方式

1.每个明细行上都显示按钮

此种Tree视图添加按钮仅需要定位第一个字段,添加button即可

创建xml文件(例如sale_view.xml)

写入以下内容

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<record id="sale_order_inherited_tree_view" model="ir.ui.view">
<field name="name">sale.order.view.tree.inherit</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_quotation_tree"/>
<field name="arch" type="xml">
<xpath expr="//tree/field[@name='name']" position="before">
<button name="%(action_sale_wizards)d" string="弹出向导" class="oe_highlight" type="action"/>
</xpath>
</field>
</record>
</data>
</odoo>

2.选中列表明细后,显示按钮,不选中按钮不显示(系统版本更新后自带机制)

此种Tree视图添加按钮可针对于选中明细行进行操作处理

创建xml文件(例如sale_view.xml)

写入以下内容

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<record id="sale_order_inherited_tree_view" model="ir.ui.view">
<field name="name">sale.order.view.tree.inherit</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_quotation_tree"/>
<field name="arch" type="xml">
<xpath expr="//tree/field[@name='name']" position="before">
<header>
<button name="%(action_sale_wizards)d" string="弹出向导" class="oe_highlight" type="action"/>
</header>
</xpath>
</field>
</record>
</data>
</odoo>

注:以上两种均需将sale_view.xml添加至__manifest__.py文件中data内

'data': [
'views/sale_view.xml',
],

3.将按钮添加至创建按钮后面,需要写js文件来进行处理,仅通过xml无法实现

效果图如下

第一步,创建static/src/js/tree_button.js

写入以下内容

odoo.define('button_near_create.tree_button', function (require) {
"use strict";
var ListController = require('web.ListController');
var ListView = require('web.ListView');
var viewRegistry = require('web.view_registry');
var TreeButton = ListController.extend({
buttons_template: 'button_near_create.buttons',
events: _.extend({}, ListController.prototype.events, {
'click .open_wizard_action': '_OpenWizard',
}),
_OpenWizard: function () {
var self = this;
this.do_action({
type: 'ir.actions.act_window',
res_model: 'test.wizard',
name :'Open Wizard',
view_mode: 'form',
view_type: 'form',
views: [[false, 'form']],
target: 'new',
res_id: false,
});
}
});
var SaleOrderListView = ListView.extend({
config: _.extend({}, ListView.prototype.config, {
Controller: TreeButton,
}),
});
viewRegistry.add('button_in_tree', SaleOrderListView);
});

第二步,创建static/src/xml/tree_button.xml

写入以下内容

<?xml version="1.0" encoding="UTF-8"?>
<templates>
<t t-extend="ListView.buttons" t-name="button_near_create.buttons">
<t t-jquery="button.o_list_button_add" t-operation="after">
<button type="button" class="btn btn-primary open_wizard_action">
弹出向导
</button>
</t>
</t>
</templates>

第三步,也是最关键一步,15版本以前需要在views文件夹下创建assets.xml或templates.xml引用js文件,但是在15以及15以后版本不需要这样操作了。

需要在__manifest__.py文件中写入

'assets': {
'web.assets_backend': [
'button_near_create/static/src/js/tree_button.js',
],
'web.assets_qweb': [
'button_near_create/static/src/xml/tree_button.xml',
],
},

第四步,在对应的tree视图添加js属性,创建sale_view.xml

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<record id="sale_order_inherited_tree_view" model="ir.ui.view">
<field name="name">sale.order.view.tree.inherit</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_quotation_tree"/>
<field name="arch" type="xml">
<xpath expr="//tree" position="attributes">
<attribute name="js_class">button_in_tree</attribute>
</xpath>
</field>
</record>
</data>
</odoo>

重启,升级模块 页面即可生效

看板视图添加按钮

创建static/src/xml/kanban_button.xml

<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-extend="KanbanView.buttons" t-name="button_near_create.button">
<t t-jquery="button" t-operation="after">
<button t-if="widget.modelName == 'sale.order'"
class="btn btn-primary open_wizard_action_kanban oe_highlight"
type="button">弹出向导</button>
</t>
</t>
</templates>

创建static/src/js/kanban_button.js

odoo.define('button_near_create.kanban_button', function(require) {
"use strict";
var KanbanController = require('web.KanbanController');
var KanbanView = require('web.KanbanView');
var viewRegistry = require('web.view_registry');
var KanbanButton = KanbanController.include({
buttons_template: 'button_near_create.button',
events: _.extend({}, KanbanController.prototype.events, {
'click .open_wizard_action_kanban': '_OpenWizardKanban',
}),
_OpenWizardKanban: function () {
var self = this;
this.do_action({
type: 'ir.actions.act_window',
res_model: 'test.wizard',
name :'弹出向导',
view_mode: 'form',
view_type: 'form',
views: [[false, 'form']],
target: 'new',
res_id: false,
});
}
});
var SaleOrderKanbanView = KanbanView.extend({
config: _.extend({}, KanbanView.prototype.config, {
Controller: KanbanButton
}),
});
viewRegistry.add('button_in_kanban', SaleOrderKanbanView);
});

在__manifest__.py文件中web.assets_qweb和web.assets_backend添加上述两个文件路径

重启,升级,生效

标签:xml,web,15,button,tree,视图,odoo,var,view
From: https://www.cnblogs.com/pythonClub/p/17589087.html

相关文章

  • 黑魂215 增减HP
    打开BattleManager脚本把底下的DoDamage改成TryDoDamage ActorManager里的DoDamage函数自然也要改成TryDoDamage。写成:publicvoidTryDoDamage(){sm.HP-=5;ac.IssueTrigger("hit");//ac.IssueTrigger("die");}测试受攻击的时候扣除5点生......
  • 龙蜥开发者说:6 年前打开的开源“潘多拉盲盒”,如今都解了哪些未知数 | 第 15 期
    「龙蜥开发者说」第15期来了!开发者与开源社区相辅相成,相互成就,这些个人在龙蜥社区的使用心得、实践总结和技术成长经历都是宝贵的,我们希望在这里让更多人看见技术的力量。本期故事,我们邀请了龙蜥社区开发者陈成来分享「6年前打开的开源“潘多拉盲盒”,如今都解了哪些未知数」。......
  • Odoo Integer 字段类型在视图上不显示千分位
    OdooInteger字段类型会在视图上显示千分位。但我们有时候不需要显示千分位,可以如下处理:<fieldname="field"options="{'format':false}"/>这样就不会显示千分位了。......
  • odoo Widget使用大全
    odoo中有众多原生的widget,覆盖了很多使用场景,可惜的是odoo官方并未整理出一份使用文档.本章将根据实际使用情况来对常见的诸多widget的使用方法集中介绍一下.已知的可用Widget列表float_timemany2manyattendeemany2many_tagsone2manyemailmail_followersmail_threadm......
  • Educational Codeforces Round 152 (Rated for Div. 2)记录
    A.MorningSandwich#include<cstdio>#include<algorithm>#include<cmath>#include<vector>#include<string.h>#include<set>#include<string>#include<map>#include<iostream>#include<queue......
  • Educational Codeforces Round 152 A~D
    A#include<bits/stdc++.h>#defineendl'\n'#defineiosios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)usingnamespacestd;typedefpair<int,int>PII;constintN=2e5+10;constintMOD=1e9+7;intT;vo......
  • 2015 我国某市居民(市民)春节期间花销比例
    Asisclearlyreflectedinthepiechart,theproportionofmoneyspentbycitizensinacertainChinesecityduringtheSpringFestival.ThepercentageofexpensesonSpringFestival'sgiftisthelargest,whichaccountsfor40%while20%ontraffic......
  • # 实验15
    实验15题目安装一个新的int9中断例程,在DOS下,按下’A’键后,除非不再松开,如果松开,就会显示满屏幕的’A’,其他键的功能照常。代码:assumecs:codecodesegmentstart:pushcspopdsmovax,0moves,axmovsi,offsetint9movdi,204hmovcx,offsetint9end-offsetint9......
  • P2679 [NOIP2015 提高组] 子串 题解
    原题\(题目大意\)\(从字符串a中选出k个子串s_1,s_2,s_3...s_k使得s_1+s_2+s_3+...+s_k=b\)\(求总方案数对10^9+7取模的结果\)\(1\le|a|即n\le1000,1\le|b|即m\le200,1\lek\le|b|\)\(设f_{i,j,x}表示已经选到a的第i个字符,b的第j个字符,共选了x个子串的方案数\)\(则可得......
  • MIL-STD-1553B总线通信模块(1553B板卡)
    MIL-STD-1553B总线通信模块(1553B板卡)产品具有以下特点:1.产品覆盖多种接口CPCI/PXI/PCI/PC104/PC104+/USB等,满足用户不同平台的使用要求;2.自主知识产权IP核,通信速率支持1M/4M ......