Odoo 14 标头自定义

Posted

技术标签:

【中文标题】Odoo 14 标头自定义【英文标题】:Odoo 14 header customization 【发布时间】:2021-09-19 15:51:45 【问题描述】:

在 Odoo 14 中,我想编辑我的发票。我已经在上面坐了几个小时了,不能再进一步了。许多标题自定义是针对 Odoo 12 或更低版本描述的,但没有给我具体的答案。我想在发票右侧显示我的公司地址,在公司地址所在的左侧显示买方地址。

我想编辑页眉,使公司地址只出现在首页上,而徽标则保留在连续页面上。

当我创建一个<div class=header>。整个页眉不再显示在任何页面上。

<?xml version="1.0"?>
<t t-name="web.external_layout_standard">
        <div class="" t-attf-class="header o_company_#company.id_layout" t-att-style="report_header_style">
            <div class="row" >
                <div class="col-6 mb4">
                    <img t-if="company.logo" t-att-src="image_data_uri(company.logo)" style="max-height: 75px;width:80%; object-fit:contain;" />
                    <span style="width:150%; font-weight:bold; font-size:smaller;padding:0;margin-bottom:-10px;">Professionelle Businesslösung für Ihren Erfolg</span><br/>
                    <span style="width:150%; font-size:smaller;padding:0;margin-top:-10px;">Smart Solutions - Video Producing - IT Network - Aircraft Solutions</span>
                </div>
                <div class="col-9 text-right" style="margin-top:22px;" t-field="company.report_header" name="moto" />
            </div>
            <div t-if="company.logo or company.report_header" class="row zero_min_height">
                <div class="col-12">
                    <div style="border-bottom: 3px solid #fa0219;"/>
                </div>
            </div>
            <div class="row" style="height:15px;">
                <div class="col-6" style="font-size:x-small;width:100%; padding:50px 0 0 50px;height:20px;">
                 <span>test</span>
                </div>
                <div class="col-6" name="company_address" style="float:right; text-align:right;padding-top:15px; ">
                   <div t-field="company.partner_id" t-options="&quot;widget&quot;: &quot;contact&quot;, &quot;fields&quot;: [&quot;address&quot;, &quot;name&quot;], &quot;no_marker&quot;: true"/>
                      <span class="o_force_ltr" t-field="company.phone"/><br/>
                      <span t-field="company.email"/><br/>
                      <span t-field="company.website"/>
                    </div>
                </div>
            </div>
            

        <div style="" t-attf-class="article o_report_layout_standard o_company_#company.id_layout" t-att-data-oe-model="o and o._name" t-att-data-oe-id="o and o.id" t-att-data-oe-lang="o and o.env.context.get('lang')">
            <div style="" class="pt-5">
                <!-- This div ensures that the address is not cropped by the header. -->
                <t style="" t-call="web.address_layout"/>
            </div>
            <div style="" class="pt-5">
              <t t-raw="0"/>
            </div>        
        </div>

        <div t-attf-class="footer o_standard_footer o_company_#company.id_layout">
            <div class="" style="border-top: 1px solid #fa0219;color:gray;">

                <div name="financial_infos" style="font-size:smaller; text-align:left;float:left;width:90%;margin-top:5px;">
                    <span t-field="company.report_footer"/>
                    <div t-if="report_type == 'pdf'" class="text-muted">
                      Seite: <span class="page"/> / <span class="topage"/>
                    </div>
                </div>
                <div style="float:right;width:69px; text-align:center;margin-top:5px;font-size:smaller;">
                  <img   src="data:image/gif;>img</img>
                  <span style="width:100%;margin-bottom:2px;padding:0;">ISO</span>
                  <span style="width:100%;margin-bottom:2px;padding:0;">9001:2015</span>
                  <span style="width:100%;margin-bottom:2px;padding:0;">Zertifiziert</span>
                </div>
            </div>
        </div>
    </t>

【问题讨论】:

【参考方案1】:

Odoo 期望 external_layout 具有三个主要的 div:headerarticlefooter,彼此相邻才能正确渲染。

查看您的代码,您将新的代码行放在标题旁边,而不是在其中。这很可能不起作用,除非您在 Odoo 的源代码中更深入地继承和更改父视图 - 我不推荐这样做。

您可以尝试将所有代码放入 headerarticle div 中。看看它是否至少显示并从那里拿走。

编辑:

要控制标头的可见性,您可以查看 OCA 模块 Report Qweb Element Page Visibility。目前Odoo 14.0没有版本,但是自己实现应该不会太难,因为它基本上只有一个XML文件。

使用上面模块中的功能,您只需将一个类 first-page 添加到应该只在第一页上可见的元素中。

<div class="header">
    <div>
        <!-- Company logo etc - visible on every page -->
    </div>
    <div class="first-page">
        <!-- Company address etc - visible only on the first page -->
    </div>
</div>

【讨论】:

你好,如果我重写我的代码,让我有 3 个主 div。是否会隐藏页眉和页脚。我仍然不知道该怎么办。 它们将是可见的。您可以尝试使用 OCA 模块隐藏标题 - 请查看我编辑的答案以了解详细信息。

以上是关于Odoo 14 标头自定义的主要内容,如果未能解决你的问题,请参考以下文章

odoo怎么添加本地自定义模块

ExtJS - 使用同步时发送自定义标头

odoo首页添加自定义模块,修改代码后报错,请问各路大神啥情况

使用 CURL 发送自定义标头

47.Odoo产品分析 – 定制板块 – 为业务自定义odoo

WebSocket JS 的自定义标头