刚刚为客户启动了Odoo,我的模板存在一个主要问题。
一个包含div和header的简单模板。 我还有一个记录,可以在主菜单中显示。
我第一次创建它时一切正常。 但是,如果我想添加或更改某些HTML,则这些更改不会显示在网站页面上(即使我刷新/升级主题后)。 网站构建器允许我更改文本等等,但这不是我需要的。我希望能够从XML更改html结构。但是第一次创建页面时......我不允许这样做。该页面仅显示首次创建的页面。
希望它清楚,并提前感谢您的帮助。
乔
答案 0 :(得分:7)
版本:Odoo nightly 10.0-20170427
每次使用网站构建器(添加片段,更改文本,...)并保存时,Odoo数据库中的数据记录都会被修改(显然 - 否则您的更改将不会持久)。
在此过程中,表“ir_model_data”中字段“noupdate”的值从 false 设置为 true ,用于模板的记录。只要“noupdate”设置为 true ,模块上的升级操作就不会更改该模板的记录。
为了能够更改它,您必须将“noupdate”设置回 false ,以便在升级过程中,xml的修改内容将覆盖数据库中的模板。 请检查我答案底部的警告!
我遇到了类似的问题。像你一样,我创建了一个带有几个html标签的简单模块/模板,将其添加到main_menu并安装了模块。一切都按预期工作(菜单链接可见,我的所有内容都显示)。
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- === Page template === -->
<template name="tpl-imprint" id="website.imprint" page="True">
<t t-call="website.layout">
<div id="wrap">
<div class="container">
<div class="row">
<div class="col-xs-12">
<h1>some Header</h1>
<p>some text</p>
</div>
</div>
<!-- === Snippets' area === -->
<div class="row">
<div class="oe_structure" />
</div>
</div>
</div>
</t>
</template>
<!-- === Menu item === -->
<record id="menu_imprint" model="website.menu">
<field name="name">Imprint</field>
<field name="url">/page/imprint</field>
<field name="parent_id" ref="website.main_menu" />
<field name="sequence" type="int">100</field>
<field name="website_id" type="int">1</field>
</record>
</odoo>
之后我进一步修改了我的xml文件,添加了一些文本等,升级了模块,然后一切都按预期工作。 然后我在我自己创建的页面上对网站构建器进行了一些实验,添加了一些片段并保存。 然后我意识到我的xml中有一些拼写错误,所以我去了我的编辑器,修复了它们,升级了模块 - 并没有像预期的那样 - 我的视图没有得到修改。
由于我是Odoo的新手,并没有真正深入了解Odoo如何在后端工作而且我在谷歌上找不到任何好处,我开始分析在升级过程中数据库会发生什么以及使用网站建设者。我发现虽然只是使用升级来上传我的更改,但只有表“ir_ui_view”的字段“arch_db”被更改为相关记录。但是,通过使用网站构建器,不仅模板内容被写入“ir_ui_view”,而且表“ir_model_data”中相关记录的字段“noupdate”也被更改 - 它是从 false 设置的到 true (数据库可能发生了更多变化,但提到的那些变化与问题有关。)
要解决升级问题,我只需将“noupdate”的值更改回 true ,升级过程再次起作用。 (每次将网站构建器与一个自定义模板一起使用时,您都必须这样做 - 至少如果您想再次通过xml对模板进行更改)。
在手动更改数据库之前备份数据库!(我已经在数据库中测试/使用了这些sql行,但没有保修;)
在“ir_ui_view”
中查找模板的model_data_idselect
model_data_id
from
ir_ui_view
where
name = '<the name of your template - in my case tpl-imprint>';
使用该ID查找/更新表“ir_ui_data”
中的相关记录update
ir_model_data
set
noupdate = true
where
id = <the ID you got with the first query>
完成!尝试升级您的模块。您对xml的更改应立即存储在数据库中。
您也可以一步改变价值
update
ir_model_data
set
noupdate = false
where
id in(
select
model_data_id
from
ir_ui_view
where
name = '<the name of your template - in my case tpl-imprint>'
);
如果将“noupdate”设置为false,则在升级过程中,您对网站构建器所做的所有更改都将丢失。如果你想保留它们,你必须将修改粘贴到xml中的模板中!为此,请转到要从中获取内容的页面上的“自定义/ HTML编辑器”,然后将要保留的部分复制粘贴到xml中。
答案 1 :(得分:0)
从前端删除模板,然后更新模块并进行检查。
答案 2 :(得分:0)
当在视图或模板中完成更改时,您需要更新模块,以便更改反映在视图中。 所以尝试从应用程序更新模块或从终端更新
登录您的数据库并在终端中运行以下命令并从浏览器重新加载页面。
对于odoo 8,9
python openerp-server -u your_module_name
对于odoo 10
python odoo-bin -u your_module_name
答案 3 :(得分:0)
这是我们现在面临的一个主要问题。如果我通过覆盖原始网站模板来更改模板我的localhost更新了新内容,并且在生产和实时服务器中它没有得到更新。我主要在 website.layout 模板中进行了更改。 我也找到了解决方案,但这不是一种有效而实用的方法。为此,我按照以下步骤操作:
激活开发者模式
转到设置 - &gt;用户界面 - &gt;视图。 在视图中搜索模板并删除正确的模板并再次安装我的自定义模块。
但我不能说这是一种有效的方法,如果我们尝试删除一个有关系的模板,有时记录会出错。
答案 4 :(得分:0)
尝试添加一些翻译(到i18文件夹)后,我遇到了同样的问题。
我的模板没有任何noupdate字段。 (无论是在数据库前端还是在oodo前端中)。
所以我的解决方案是使用终端和 -i代替常规-u的来更新模块。似乎强迫了压倒一切。 就像:
python odoo-bin -i module_name