视图负责Odoo12中的顶级导航栏

时间:2019-08-09 07:09:10

标签: xml odoo odoo-12

我正在尝试向顶部导航栏添加徽标,并且正在寻找要继承的视图ID,该ID将允许我使用xpath定位属性。

enter image description here

我在查找负责保存两个相邻元素的导航栏布局的视图时遇到了麻烦。

我发现了类似这样的内容:private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) { using (SqlConnection conn = new SqlConnection("DataSource=10.6.9.58;Initial Catalog=DBNew;User ID=qwertyuiop;Password=1234567890")) { try { string query = "select ID,HRName from HRTable"; SqlDataAdapter da = new SqlDataAdapter(query, conn); conn.Open(); DataSet ds = new DataSet(); da.Fill(ds, "HRTable"); comboBox1.DisplayMember = "HRName"; comboBox1.ValueMember = "ID"; comboBox1.DataSource = ds.Tables["HRTable"]; } catch (Exception ex) { // write exception info to log or anything else MessageBox.Show("Error occured!"); } } 。但是它没有定义这两个相邻的节点(在浏览器中的检阅元素工具中):

addons\website\views\website_navbar_templates.xml

<ul class="o_menu_apps">

它们仅存在于静态xml:<a class="o_menu_brand" role="button"> 中。 ``但是我不知道我是否可以用我的自定义模块和xpath修改这个xml。

内部:addons\web\static\src\xml\menu.xml 我看到了这段代码:

addons\website\views\website_templates.xml

该徽标在哪里?我在Odoo12中看不到任何徽标。我认为没有所谓的“ navbar-brand”类。

2 个答案:

答案 0 :(得分:1)

我最终用我的自定义模块覆盖了静态xml文件,如下所示:

function previewImages(cID){
        var ciCode = window.localStorage.getItem('ciCode');
        var xdata = ({'cIDs': cID, 'ciCodes': ciCode });
        $.ajax({
        type: 'GET',
        url: '../back_php_Code/pPrevImages.php',
        dataType: 'json',
        data: xdata,
        contentType: 'application/json; charset=utf-8',
        success: function (response) {
            var cells = eval(response);
            alert(JSON.stringify(cells));
            for (var i=0; i < cells.length ; i ++){
                    $('#iSet').append('<div class="col-lg-4 col-sm-6">'
                    + '<div class="thumbnail">'
                    + '<div class="thumb">'
                    + '<a href="..\files\assets\images\gallery-grid\1.png" data-lightbox="9" data-title="' + + '">'
                    + '<img src="'+ + '" alt="" class="img-fluid img-thumbnail">'
                    + '</a>'
                    + '</div></div></div>');            
            }
        },
         error: function (error) {
            console.log(error);
        }
   });  
}

我将此文件放在$ mysql -u root -p -e 'SHOW VARIABLES LIKE "%version%";' 中,并在manifest.py中将其命名

+-------------------------+-------------------------+
| Variable_name           | Value                   |
+-------------------------+-------------------------+
| innodb_version          | 5.5.49                  |
| protocol_version        | 10                      |
| slave_type_conversions  |                         |
| version                 | 5.5.49-0ubuntu0.14.04.1 |
| version_comment         | (Ubuntu)                |
| version_compile_machine | x86_64                  |
| version_compile_os      | debian-linux-gnu        |
+-------------------------+-------------------------+

答案 1 :(得分:0)

这也可以动态完成。在这种情况下,我们将在前端使用JavaScript代码,并使用控制器通知前端是否存在该公司的公司徽标,然后我们使用前端的get请求获取公司徽标。

首先,我们添加img标签以显示XML中的公司徽标。

<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
    <t t-extend="Menu">
        <t t-jquery=".o_menu_apps" t-operation="prepend">
            <a id="company-logo-link" href="/web">
                <img id="company-logo" alt="Logo"/>
            </a>
        </t>
    </t>
</templates>

此后,我们添加JavaScript以显示当前用户公司的徽标。我们从当前用户的会话中获取公司ID。

odoo.define('web_company_logo.Menu', function (require) {
'use strict';

var session = require('web.session');
var Menu = require('web.Menu');

Menu.include({
    /**
    * @override
    */
    start: function (parent, options) {
        this._super.apply(this, arguments);

        // current url, <domain_name>:<port_number>
        var url = window.location.origin;

        // company id from the session
        var companyId = session.company_id;

        // use ajax to check if the company has a logo.
        // if there is no logo, remove the anchor, else
        // use the company's logo as the img src
        $.ajax({
            type: 'GET',
            data: {'company_id': companyId},
            url: `${url}/check_company_logo`,
            success: function (result) {
                console.log('Inside the success function');
                var result = JSON.parse(result);
                if (result.has_logo == true) {
                    $('#company-logo')[0].src = `${url}/web/image?model=res.company&id=${companyId}&field=logo`;
                }
                else {
                    $('#company-logo-link')[0].remove();
                }
            },
            error: function (xhr, ajaxOptions, thrownError) {
                console.log('Error encountered');
            },
        });
    },
   });
});

要使此JavaScript代码正常工作,应添加以下控制器,以告知前端该公司是否有徽标。

import json

from odoo import http
from odoo.http import request


class WebCompanyLogoController(http.Controller):

@http.route(['/check_company_logo'], type='http',
            auth="public", methods=['GET'],
            website=True, sitemap=False)
def check_company_logo(self, company_id=0):
    """
    Check if company has a logo
    :param company_id: ID of the company as an integer
    :return: bool
    """
    has_logo = bool(request.env['res.company'].browse(int(company_id)).logo)

    return json.dumps({
        'has_logo': has_logo,
    }, ensure_ascii=False)