You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
250 lines
18 KiB
250 lines
18 KiB
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo>
|
|
<!-- Enhanced template for header with better active menu highlighting -->
|
|
<template id="header_eco_food" inherit_id="website.template_header_default"
|
|
name="Template Header Theme EcoFood" active="True">
|
|
<xpath expr="//header" position="replace">
|
|
<header id="eco_food_header" class="header_modern_light">
|
|
<section class="nav_modern sticker">
|
|
<div>
|
|
<div class="top_bar1 bg-dark">
|
|
<div class="left">
|
|
<span>Welcome you to Eco-life store!</span>
|
|
</div>
|
|
<div class="right">
|
|
<ul class="d-flex align-items-center mb-0">
|
|
<li>
|
|
<t t-set="_classes" t-valuef="ms-2 float-end"/>
|
|
<div t-attf-class="o_pricelist_dropdown dropdown #{'' if hasPricelistDropdown else 'd-none'} #{_classes}">
|
|
<t t-set="curr_pl" t-value="website.pricelist_id"/>
|
|
<a role="button" href="#"
|
|
t-attf-class="dropdown-toggle -{{navClass}}"
|
|
data-bs-toggle="dropdown">
|
|
<t t-esc="curr_pl and curr_pl.name or ' - '"/>
|
|
</a>
|
|
<div class="dropdown-menu bg-dark" role="menu">
|
|
<t t-foreach="website_sale_pricelists" t-as="pl">
|
|
<a role="button"
|
|
t-att-href="'/shop/change_pricelist/%s' % pl.id"
|
|
class="dropdown-item dropdown-pricelist">
|
|
<span class="switcher_pricelist" t-att-data-pl_id="pl.id"
|
|
t-esc="pl.name"/>
|
|
</a>
|
|
</t>
|
|
</div>
|
|
</div>
|
|
</li>
|
|
<!-- Sign In -->
|
|
<t t-call="portal.placeholder_user_sign_in">
|
|
<t t-set="_item_class" t-value="'nav-item user ml-auto'"/>
|
|
<t t-set="_link_class" t-value="'nav-link font-weight-bold'"/>
|
|
</t>
|
|
<!-- User Dropdown -->
|
|
<t t-call="portal.user_dropdown">
|
|
<t t-set="_user_name" t-value="true"/>
|
|
<t t-set="_item_class" t-value="'nav-item dropdown ml-lg-auto'"/>
|
|
<t t-set="_link_class" t-value="'nav-link font-weight-bold'"/>
|
|
<t t-set="_dropdown_menu_class" t-value="'bg-dark'"/>
|
|
</t>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<section class="topbar">
|
|
<nav class="navbar navbar-expand-lg navbar-light">
|
|
<a class="navbar-brand pb-2 d-none d-md-none d-lg-block" href="/">
|
|
<span t-field="website.logo"
|
|
t-options="{'widget': 'image', 'width': 95, 'height': 40}" role="img"
|
|
t-att-aria-label="'Logo of %s' % website.name"
|
|
t-att-title="website.name"/>
|
|
</a>
|
|
|
|
<a class="navbar-toggler collapsed border-0 x" type="button" data-toggle="collapse"
|
|
data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown"
|
|
aria-expanded="false" aria-label="Toggle navigation">
|
|
<span class="span_color"/>
|
|
<span class="span_color"/>
|
|
<span class="span_color"/>
|
|
</a>
|
|
|
|
<div class="collapse navbar-collapse p-3 p-lg-0 px-sm-0 mt-0 mt-lg-0 d-flex flex-column flex-lg-row flex-xl-row justify-content-lg-center mobileMenu"
|
|
id="navbarNavDropdown">
|
|
<a class="navbar-toggler collapsed border-0 x mobile_toggler"
|
|
type="button" data-toggle="collapse"
|
|
data-target="#navbarNavDropdown"
|
|
aria-controls="navbarNavDropdown"
|
|
aria-expanded="false"
|
|
aria-label="Toggle navigation">
|
|
<span class="span_color"/>
|
|
<span class="span_color"/>
|
|
<span class="span_color"/>
|
|
</a>
|
|
|
|
<ul class="navbar-nav align-self-stretch">
|
|
<t t-foreach="website.menu_id.child_id" t-as="submenu">
|
|
<!-- Enhanced active menu detection -->
|
|
<t t-set="is_menu_active" t-value="submenu._is_active()"/>
|
|
<t t-set="has_active_child"
|
|
t-value="any(child._is_active() for child in submenu.child_id if child.is_visible)"/>
|
|
<t t-set="menu_active_class"
|
|
t-value="'active' if (is_menu_active or has_active_child) else ''"/>
|
|
|
|
<t t-set="item_class" t-valuef="nav-item"/>
|
|
<t t-set="link_class" t-valuef="nav-link"/>
|
|
<t t-set="show_dropdown"
|
|
t-value="(submenu.is_mega_menu and submenu.is_visible) or submenu.child_id.filtered(lambda menu: menu.is_visible)"/>
|
|
|
|
<!-- Simple menu item (no dropdown) -->
|
|
<li t-if="submenu.is_visible and not (submenu.child_id or submenu.is_mega_menu)"
|
|
t-attf-class="#{item_class} #{menu_active_class}">
|
|
<a t-att-href="submenu._clean_url()"
|
|
t-attf-class="#{link_class} #{menu_active_class}"
|
|
role="menuitem"
|
|
t-ignore="true"
|
|
t-att-target="'_blank' if submenu.new_window else None">
|
|
<span t-field="submenu.name"/>
|
|
</a>
|
|
</li>
|
|
|
|
<!-- Dropdown menu item -->
|
|
<li t-elif="show_dropdown"
|
|
t-attf-class="#{item_class} dropdown #{menu_active_class} #{submenu.is_mega_menu and 'position-static'}">
|
|
<a t-attf-class="#{link_class} dropdown-toggle #{menu_active_class} #{submenu.is_mega_menu and 'o_mega_menu_toggle'}"
|
|
data-bs-toggle="dropdown"
|
|
href="#"
|
|
t-att-aria-expanded="'true' if (is_menu_active or has_active_child) else 'false'">
|
|
<span t-field="submenu.name"/>
|
|
</a>
|
|
|
|
<!-- Mega menu -->
|
|
<div t-if="submenu.is_mega_menu"
|
|
t-attf-class="dropdown-menu o_mega_menu #{submenu.mega_menu_classes}"
|
|
data-name="Mega Menu"
|
|
t-field="submenu.mega_menu_content"/>
|
|
|
|
<!-- Regular dropdown -->
|
|
<ul t-else="" class="dropdown-menu" role="menu">
|
|
<t t-foreach="submenu.child_id" t-as="child_menu">
|
|
<t t-set="child_active_class"
|
|
t-value="'active' if child_menu._is_active() else ''"/>
|
|
<li t-if="child_menu.is_visible and not child_menu.child_id"
|
|
t-attf-class="#{child_active_class}">
|
|
<a t-att-href="child_menu._clean_url()"
|
|
t-attf-class="dropdown-item #{child_active_class}"
|
|
role="menuitem"
|
|
t-att-target="'_blank' if child_menu.new_window else None">
|
|
<span t-field="child_menu.name"/>
|
|
</a>
|
|
</li>
|
|
<!-- Nested dropdown support -->
|
|
<li t-elif="child_menu.is_visible and child_menu.child_id"
|
|
t-attf-class="dropdown-submenu #{child_active_class}">
|
|
<a t-att-href="child_menu._clean_url()"
|
|
t-attf-class="dropdown-item dropdown-toggle #{child_active_class}"
|
|
role="menuitem">
|
|
<span t-field="child_menu.name"/>
|
|
</a>
|
|
<ul class="dropdown-menu">
|
|
<t t-foreach="child_menu.child_id"
|
|
t-as="grandchild_menu">
|
|
<li t-if="grandchild_menu.is_visible">
|
|
<a t-att-href="grandchild_menu._clean_url()"
|
|
t-attf-class="dropdown-item #{('active' if grandchild_menu._is_active() else '')}"
|
|
role="menuitem"
|
|
t-att-target="'_blank' if grandchild_menu.new_window else None">
|
|
<span t-field="grandchild_menu.name"/>
|
|
</a>
|
|
</li>
|
|
</t>
|
|
</ul>
|
|
</li>
|
|
</t>
|
|
</ul>
|
|
</li>
|
|
</t>
|
|
</ul>
|
|
<t t-if="request.httprequest.path.startswith('/shop')">
|
|
<div class="d-flex d-lg-none me-2">
|
|
<!-- Wishlist -->
|
|
<div class="me-2">
|
|
<t t-call="website_sale_wishlist.header_wishlist_link">
|
|
<t t-set="_icon" t-value="True"/>
|
|
<t t-set="_link_class"
|
|
t-value="'eco_food o_navlink_background_hover btn position-relative p-2'"/>
|
|
<t t-set="_badge_class"
|
|
t-value="'position-absolute top-0 start-100 translate-middle badge rounded-pill bg-primary'"/>
|
|
</t>
|
|
</div>
|
|
<!-- Cart -->
|
|
<div>
|
|
<t t-call="website_sale.header_cart_link">
|
|
<t t-set="_icon" t-value="True"/>
|
|
<t t-set="_link_class" t-value="'btn position-relative p-2'"/>
|
|
<t t-set="_badge_class"
|
|
t-value="'position-absolute top-0 start-100 translate-middle badge rounded-pill bg-primary'"/>
|
|
</t>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
<!-- Mobile pricelist dropdown -->
|
|
<ul class="navbar-nav align-self-stretch">
|
|
<li class="d-xl-none d-lg-none d-flex justify-content-around mt-4">
|
|
<a href="#" class="mr-5">
|
|
<select class="form-select" id="pricelistDropdown"
|
|
aria-label="Default select example">
|
|
<t t-foreach="website_sale_pricelists" t-as="pl">
|
|
<option t-att-value="pl.id"
|
|
t-att-selected="pl.id == website.pricelist_id.id">
|
|
<a role="button"
|
|
t-att-href="'/shop/change_pricelist/%s' % pl.id"
|
|
class="dropdown-item dropdown-pricelist">
|
|
<span class="switcher_pricelist"
|
|
t-att-data-pl_id="pl.id" t-esc="pl.name"/>
|
|
</a>
|
|
</option>
|
|
</t>
|
|
</select>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<a class="navbar-brand navbar-brand2 pb-2 under_line d-block d-lg-none"
|
|
href="/">EcoFood
|
|
</a>
|
|
|
|
<!-- Shop-specific icons -->
|
|
<t t-if="request.httprequest.path.startswith('/shop')">
|
|
<ul class="navbar-icons navbar-nav d-none d-lg-flex">
|
|
<!-- Wishlist -->
|
|
<li class="nav-item ml-lg-3">
|
|
<t t-call="website_sale_wishlist.header_wishlist_link">
|
|
<t t-set="_icon" t-value="True"/>
|
|
<t t-set="_link_class"
|
|
t-value="'eco_food o_navlink_background_hover btn position-relative rounded-circle border-0 p-1 text-reset'"/>
|
|
<t t-set="_badge_class"
|
|
t-value="'position-absolute bg-transparent top-0 end-0 mt-n1 me-n1 rounded-pill'"/>
|
|
</t>
|
|
</li>
|
|
|
|
<!-- Cart -->
|
|
<li class="nav-item ml-lg-3">
|
|
<t t-call="website_sale.header_cart_link">
|
|
<t t-set="_icon" t-value="True"/>
|
|
<t t-set="_link_class"
|
|
t-value="'o_navlink_background_hover btn position-relative border-0 p-1 rounded-circle text-reset'"/>
|
|
<t t-set="_badge_class"
|
|
t-value="'position-absolute bg-transparent top-0 end-0 rounded-pill mt-n1 me-n1'"/>
|
|
</t>
|
|
</li>
|
|
</ul>
|
|
</t>
|
|
</nav>
|
|
<div class="overlay"/>
|
|
</section>
|
|
</div>
|
|
</section>
|
|
</header>
|
|
</xpath>
|
|
</template>
|
|
</odoo>
|