转自:http://sahotaparamjitsingh.blogspot.com/2012/04/how-to-make-custom-widget-in-openerp.html

 

Hello PeoplezZ,
    Today, here i will show you the method of creating your own custom WIDGET in OpenERP.
First of all, u all must know the structure of the OpenERP module, that is this much things must be there in every module.

<addon name>
+-- __openerp__.py
+-- controllers/
+-- static/
+-- lib/
+-- src/
+-- css/
+-- img/
+-- js/
+-- xml/
+-- test/
+-- test/

First of all,

What is a widget.?

Ans. The example of widget of OpenERP are

  • Example: widget=”one2many_list”
    • one2one_list
    • one2many_list
    • many2one_list
    • many2many
    • url
    • email
    • image
    • float_time
    • reference
    • button
    • textbox

The above examples are all WIDGETS in OpenERP and other than this u can create your know custom widget also. ---------------------------------------------------------------------------------------------------------------

So, here today i will show u the method that how u can create your own custom widget.

For creating your know custom widget in OpenERP you need this much files and folders in your OpenERP module that are

+-- static/
+-- src/
+-- css/
+-- img/
+-- js/
+-- xml/

In static folder you have to create the following folders that are css, img, js and xml.

for the custom widget u have to create 2 thing i.e. js file  and xml file.

In the js folder you have to create your js file i.e. JavaScript file in which u have write the script for creating the custom widget.

Here, I am showing u the example of my custom widget which i had create

for sharing the resource on facebook. I had created a like button of facebook in my widget.

---------------------------------------------------------------------------------------------------------------

resource.js

---------------------------------------------------------------------------------------------------------------

openerp.resource = function (openerp)

{  
    openerp.web.form.widgets.add('test', 'openerp.resource.Mywidget');

    openerp.resource.Mywidget = openerp.web.form.FieldChar.extend(

        {

        template : "test",

        init: function (view, code) {

            this._super(view, code);

            console.log('loading...');

        }

    });

}

---------------------------------------------------------------------------------------------------------------

Here, i had shown u my resource.js for creating a custom widget.

In the first line i.e.

  • openerp.resource = function (openerp)

In this line openerp is fixed u have to write it bcz u r creating in OpenERP

than resource is your addon_name than function(openerp) in this openerp is the instance it may be anything.

  • openerp.web.form.widgets.add('test', 'openerp.resource.Mywidget');

  In this line openerp is the instance name which u have passed the function argument, than web.form.widgets.add is the place where u r adding ur custom widget it will be the same and than ('test', 'openerp.resource.Mywidget');

in this 'test' is your custom widget name it may be anything of ur choice, than 'openerp.resource.Mywidget' in this openerp is fixed than resource is your addon_name and than Mywidget is any name that u can give of ur choice.

  •      openerp.resource.Mywidget = openerp.web.form.FieldChar.extend(

In this line," openerp.resource.Mywidget " this is the same thing which u have written in above line of adding method, than after "openerp.web.form.FieldChar.extend( " in this line openerp.web.form.FieldChar.extend( here I m extending the FIELDCHAR widget into my widget i.e. test.

  • {

            template : "test",

            init: function (view, code) {

                this._super(view, code);

                console.log('loading...');

            }

In this line, first i am giving the template name which u have to pass in the xml file. i.e. template : "test"

and than after that init: function and everything are the thing which u have to pass as it is bcz they are the function argument of the fieldchar so u have to pass as it is.

and the last line i.e. console.log('loading...');

console.log is same as the printf statement in C.

---------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------

resource.xml

---------------------------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>

<templates id="template" xml:space="preserve">

<t t-name="test">

    <html>

        <body>

<div id="fb-root"></div>

            <div id="fb-root"></div>

            <script>(function(d, s, id) {

            var js, fjs = d.getElementsByTagName(s)[0];

            if (d.getElementById(id)) return;

            js = d.createElement(s); js.id = id;

            js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";

            fjs.parentNode.insertBefore(js, fjs);

            }(document, 'script', 'facebook-jssdk'));</script>

            <div class="fb-like" data-send="true" data-layout="box_count" data-width="600" data-show-faces="false" data-font="arial"></div>

        </body>

    </html>   
</t>

</templates>

---------------------------------------------------------------------------------------------------------------

After creating the js file u have to create the xml file for that i had shown u the example of it.

In this the main thing is  <t t-name="test"> in that t-name="test" in that test is your template name which u have given in the resource.js file, so u have to give it same.

And the thing that i had written in the <body> selection is the facebook api which u can find from the google or anything.

eg.: i had taken it from

http://developers.facebook.com/docs/reference/plugins/like/

So u can take it from here or as u like.

---------------------------------------------------------------------------------------------------------------

And after completing this this.

I main thing that is dont forget to add that file into ur __openerp__.py file.

---------------------------------------------------------------------------------------------------------------

'js': ['static/src/js/resource.js'],

    'qweb': ['static/src/xml/resource.xml'],

---------------------------------------------------------------------------------------------------------------

js file u can add simply by 'js': than path

but for adding the xml file u have to write 'qweb': than path

---------------------------------------------------------------------------------------------------------------

Now, after creating your custom widget u can use it into any field as ur wish into ur view.xml file.

<field name= "share" string= "Share it... :" widget= "test" /> 

Here, I had placed my widget into the share field so at that place the facebook widget will be available.

It will appear like

How to make a custom WIDGET in OpenERP的更多相关文章

  1. ZetCode PyQt4 tutorial custom widget

    #!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PyQt4 tutorial In this example, ...

  2. C# widget

    Invoke(Delegate)的用法: //例如,要实时update窗体.如果在另一个线程中update,那么可以直接update(可以不在新线程中):也可以在Delegate中给出upate,然后 ...

  3. Burning widget

    This is a widget that we can see in Nero, K3B, or other CD/DVD burning software. #!/usr/bin/python # ...

  4. [Flutter] Create a Customer widget

    For example, we want to have to button, looks similar to FloatingActionButton: But in the doc, it sa ...

  5. [转]nopCommerce Widgets and How to Create One

    本文转自:https://dzone.com/articles/what-are-nopcommerce-widgets-and-how-to-create-one A widget is a sta ...

  6. 你所不知道的15个Axure使用技巧

    你有用原型开发工具吗?如果有,那你用的是Axure还是别的? 从以前就喜欢使用Axure,主要是觉得它能清楚的表达设计的思路,还有交互的真实再现,能让看的人一目了然,昨天看了这篇博文,便更加确定Axu ...

  7. MVC模式在UI里的应用

    In a similar way to other parts of a game, user interfaces usually go through several iterations unt ...

  8. 现代DOJO(翻译)

    http://dojotoolkit.org/documentation/tutorials/1.10/modern_dojo/index.html 你可能已经不用doio一段时间了,或者你一直想保持 ...

  9. android中将EditText改成不可编辑的状态

    今天在做项目的时候,要想实现一个将EditText变成不可编辑的状态,通过查找博客,发现一个好方法,对于单独的EditText控件我们可以单独设置 1.首先想到在xml中设置Android:edita ...

随机推荐

  1. BZOJ 3676: [Apio2014]回文串 后缀自动机 Manacher 倍增

    http://www.lydsy.com/JudgeOnline/problem.php?id=3676 过程很艰难了,第一次提交Manacher忘了更新p数组,超时,第二次是倍增的第0维直接在自动机 ...

  2. 在win7环境建立一个超隐秘账户

    在win7环境下,系统安全得到了加强,今天来看看怎样在win7环境下新建一个超级隐藏用户. 首先,我们需要新建一个普通的账户. 在win7中我们使用net  user  添加或者删除账户都是被拒绝的. ...

  3. Eclipse下mallet使用的方法

    Mallet是Umass大牛开发的一个关于统计自然语言处理的l的开源库,很好的一个东西.可以用来学topic model,训练ME模型等.对于开发者来说,其官网的技术文档是非常有效的. mallet下 ...

  4. java高并发程序设计模式-并发级别:阻塞、无障碍、无锁、无等待【转载】

    一般认为并发可以分为阻塞与非阻塞,对于非阻塞可以进一步细分为无障碍.无锁.无等待,下面就对这几个并发级别,作一些简单的介绍. 1.阻塞 阻塞是指一个线程进入临界区后,其它线程就必须在临界区外等待,待进 ...

  5. 常用SQL Server规范集锦及优化

    原文地址:http://www.cnblogs.com/liyunhua/p/4526195.html

  6. 【原创】MySQL+MyEclipse+对象映射文件,schema与category的关系

    (一) 1.映射文件的类如下写法:class name="com.sanqing.po.SysUser" table="sys_user"  catalog=& ...

  7. SqlServer项目经验:介质集有2个介质簇,但只提供了1个。必须提供所有成员

    在对数据库备份与还原的过程中,我遇到一个问题“介质集有2个介质簇,但只提供了1个.必须提供所有成员”,下面详细的介绍一下遇到问题的经过与问题解决的方法! 一.备份与还原遇到的问题描述与解决方法: 前两 ...

  8. 给WebAPI的REST接口添加测试页面(三)

    在前面的文章中,我介绍过了通过Swashbuckle在WebAPI中集成Swagger-UI.不过这种方式不适合于最新版的ASP.Net MVC6下的WebAPI,在网上搜了一下,发现了它还有一个专供 ...

  9. Codeforces Round #247 (Div. 2) ABC

    Codeforces Round #247 (Div. 2) http://codeforces.com/contest/431  代码均已投放:https://github.com/illuz/Wa ...

  10. Mysql字符串连接函数 CONCAT()与 CONCAT_WS()

    从数据库里取N个字段,然后组合到一起用“,”分割显示,起初想到用CONCAT()来处理,好是麻烦,没想到在手册里居然有提到 CONCAT_WS(),非常好用. CONCAT_WS(separator, ...