• How to make a custom WIDGET in OpenERP


    转自: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

  • 相关阅读:
    matlab2016b -ubuntu 1604 -install- and -trouble -shooting--finally-all is ok!!
    cvpr2017-code-etc
    汇率换算自然语言理解功能JAVA DEMO
    聚焦新相亲时代:女孩在京有五六套房哭着想嫁富2代
    cvpr2017年的所有论文下载
    公司危机、下岗困局、不受重视,程序员该如何面对职场挫折?
    利用CH341A编程器刷新BIOS,恢复BIOS,妈妈再也不用担心BIOS刷坏了
    垃圾人定律和垃圾人生存方式定律
    90后女孩的杀身之祸----悲剧酿成--放弃所有的虚构的故事后,你终会发现,真实平淡的现实才是最美好的。
    仓央嘉措比较著名的诗
  • 原文地址:https://www.cnblogs.com/chjbbs/p/3862692.html
Copyright © 2020-2023  润新知