This question has been flagged
2 Replies
14538 Views

Hello,


i had suddenly this error in my database (odoo 8.0):

 

Field(s) `arch` failed against a constraint: Invalid view definition
Error details:
Element '<xpath expr="//header//a[@class='navbar-brand']">' cannot be located in parent view
Error context:
View `Show Logo`
[view_id: 846, xml_id: website.layout_logo_show, model: n/a, parent_id: 844]" while parsing None:173, near
<data inherit_id="website.layout" customize_show="True" name="Show Logo">
<xpath expr="//header//a[@class='navbar-brand']" position="replace">
<a href="/" class="navbar-brand logo">
<img src="/logo.png" t-att-alt="'Logo of %s' % res_company.name" t-att-title="res_company.name"/>
</a>
</xpath>
</data>


no configuration or operation was made before

to resolve this issue i tried the following:

- update the module by command line - d databasename -u website

- update the module by command line - d databasename -u all

- comment the view "Show Logo" and update website module

- comment the view "Show Logo" and update all modules

none of the above procedures worked then i tried this step

- delete view from ir_ui_view table directly from database using name='Show Logo'  as a condition then updated the database with view 'Show logo' commented  in odoo-server/addons/website/views/website_templates.xml

this procedure worked for me. 

Now my question is why this error happened ? and is it correct to modify directly in website module ?

 

Avatar
Discard
Author Best Answer

Thank you for your answer, i did a complete search in all directories  "header//a[@class='navbar-brand']" is only used in website module and in a custom module not installed in my database.  commenting this one in custom modulte didnt resolve the issue.

i took a look in  views there is only one view with external id = "website.layout"   Main Layout here is its content:


<t name="Main layout" t-name="website.layout">&lt;!DOCTYPE html&gt;
    <html t-att-lang="lang and lang.replace('_', '-')" t-att-data-website-id="website.id if editable and website else None"          t-att-data-editable="'1' if editable else None"          t-att-data-translatable="'1' if translatable else None"          t-att-data-view-xmlid="xmlid if editable else None" t-att-data-main-object="repr(main_object) if editable else None"          t-att-data-oe-company-name="res_company.name">        <head>            <meta charset="utf-8"/><t t-if="main_object and 'website_meta_title' in main_object and not title">            <t t-set="title" t-value="main_object.website_meta_title"/>        </t><t t-if="main_object and 'name' in main_object and not title and not additional_title">            <t t-set="additional_title" t-value="main_object.name"/></t>            <t t-if="not title"><t t-set="title"><t t-if="additional_title">                <t t-raw="additional_title"/> | </t><t t-esc="(website or res_company).name"/></t>            </t><meta name="viewport" content="initial-scale=1"/><meta name="description" t-att-content="main_object and 'website_meta_description' in main_object                 and main_object.website_meta_description or website_meta_description"/><meta name="keywords" t-att-content="main_object and 'website_meta_keywords' in main_object                 and main_object.website_meta_keywords or website_meta_keywords"/><meta name="generator" content="Odoo"/><title><t t-esc="title"/></title><t t-set="languages" t-value="website.get_languages() if website else None"/><t t-if="request and request.website_multilang and website"><t t-foreach="website.get_alternate_languages(request.httprequest)" t-as="lg"><link rel="alternate" t-att-hreflang="lg['hreflang']" t-att-href="lg['href']"/></t></t><t t-call-assets="web.assets_common" t-js="false"/><t t-call-assets="website.assets_frontend" t-js="false"/><t t-raw="head or ''" name="layout_head"/>        </head>        <body>            <div id="wrapwrap">            <header>                <div class="navbar navbar-default navbar-static-top">                    <div class="container">            <div class="navbar-header">                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-top-collapse">                    <span class="sr-only">Basculer la navigation</span><span class="icon-bar"/><span class="icon-bar"/><span class="icon-bar"/></button><span data-cke-widget-id="107" data-cke-display-name="a" class="cke_widget_wrapper cke_widget_inline" data-cke-filter="off" data-cke-widget-wrapper="1" tabindex="-1">        <a class="navbar-brand cke_widget_editable cke_widget_element" data-cke-enter-mode="2" data-cke-filter="43" data-cke-saved-href="/" data-cke-widget-data="{}" data-cke-widget-editable="text" data-cke-widget-keep-attr="0" data-widget="oeref" href="/" t-field="res_company.name"/></span></div><div class="collapse navbar-collapse navbar-top-collapse"><ul class="nav navbar-nav navbar-right" id="top_menu"><t t-foreach="website.menu_id.child_id" t-as="submenu"><t t-call="website.submenu"/></t><li class="divider" t-ignore="true" t-if="website.user_id != user_id"/><li class="dropdown" t-ignore="true" t-if="website.user_id != user_id"><a href="#" class="dropdown-toggle" data-toggle="dropdown"><b><span t-esc="user_id.name"/><span class="caret"/></b></a><ul class="dropdown-menu js_usermenu" role="menu"><li><a href="/web" role="menuitem">My Account</a></li><li class="divider"/><li><a t-attf-href="/web/session/logout?redirect=/" role="menuitem">Logout</a></li></ul></li></ul></div></div></div>            </header><main><t t-raw="0"/></main><footer><div id="footer_container">                    </div></footer></div>        <t t-call-assets="web.assets_common" t-css="false"/>        <t t-call-assets="website.assets_frontend" t-css="false"/>        <script t-if="website and website.google_analytics_key">                (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){                (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),                m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)                })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
                ga('create', _.str.trim('<t t-esc="website.google_analytics_key"/>'), 'auto');
                ga('send','pageview');
            </script>    </body></html></t>


could you check if the expression is correct ?   <xpath expr="//header//a[@class='navbar-brand']" position="replace">


i don know why but "navbar-brand" cant be located in the original website.layout view


Thanks.

Avatar
Discard
Best Answer

That error could be related to that another view extension perhaps in another module or theme change the website.layout template making the xpath expr "//header//a[@class='navbar-brand']" unable to retrieve any node to transform and that cause the error. Perhaps the template was changed manually using the website editor or backend view form.

To determine what is the root of the issue you need to see what views are inheriting from the same view of your trouble view, in this case is website.layout the base view, so open up all the view that inherit from that view, you could do it in the views form in the backend with the technical features activated, in the menu /Settings/Technical/User Interface/Views

Avatar
Discard